diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme-0.5.1.dist-info/INSTALLER b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme-0.5.1.dist-info/INSTALLER new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme-0.5.1.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme-0.5.1.dist-info/LICENSE b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme-0.5.1.dist-info/LICENSE new file mode 100644 index 00000000..211dd9cc --- /dev/null +++ b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme-0.5.1.dist-info/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2013-2018 Dave Snider, Read the Docs, Inc. & contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme-0.5.1.dist-info/METADATA b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme-0.5.1.dist-info/METADATA new file mode 100644 index 00000000..5774e7a3 --- /dev/null +++ b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme-0.5.1.dist-info/METADATA @@ -0,0 +1,103 @@ +Metadata-Version: 2.1 +Name: sphinx-rtd-theme +Version: 0.5.1 +Summary: Read the Docs theme for Sphinx +Home-page: https://github.com/readthedocs/sphinx_rtd_theme +Author: Dave Snider, Read the Docs, Inc. & contributors +Author-email: dev@readthedocs.org +License: MIT +Platform: UNKNOWN +Classifier: Framework :: Sphinx +Classifier: Framework :: Sphinx :: Theme +Classifier: Development Status :: 5 - Production/Stable +Classifier: License :: OSI Approved :: MIT License +Classifier: Environment :: Console +Classifier: Environment :: Web Environment +Classifier: Intended Audience :: Developers +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.3 +Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Operating System :: OS Independent +Classifier: Topic :: Documentation +Classifier: Topic :: Software Development :: Documentation +Requires-Dist: sphinx +Provides-Extra: dev +Requires-Dist: transifex-client ; extra == 'dev' +Requires-Dist: sphinxcontrib-httpdomain ; extra == 'dev' +Requires-Dist: bump2version ; extra == 'dev' + +************************** +Read the Docs Sphinx Theme +************************** + +.. image:: https://img.shields.io/pypi/v/sphinx_rtd_theme.svg + :target: https://pypi.python.org/pypi/sphinx_rtd_theme + :alt: Pypi Version +.. image:: https://circleci.com/gh/readthedocs/sphinx_rtd_theme.svg?style=svg + :alt: Build Status + :target: https://circleci.com/gh/readthedocs/sphinx_rtd_theme +.. image:: https://img.shields.io/pypi/l/sphinx_rtd_theme.svg + :target: https://pypi.python.org/pypi/sphinx_rtd_theme/ + :alt: License +.. image:: https://readthedocs.org/projects/sphinx-rtd-theme/badge/?version=latest + :target: http://sphinx-rtd-theme.readthedocs.io/en/latest/?badge=latest + :alt: Documentation Status + +This Sphinx_ theme was designed to provide a great reader experience for +documentation users on both desktop and mobile devices. This theme is used +primarily on `Read the Docs`_ but can work with any Sphinx project. You can find +a working demo of the theme in the `theme documentation`_ + +.. _Sphinx: http://www.sphinx-doc.org +.. _Read the Docs: http://www.readthedocs.org +.. _theme documentation: https://sphinx-rtd-theme.readthedocs.io/en/latest/ + +Installation +============ + +This theme is distributed on PyPI_ and can be installed with ``pip``: + +.. code:: console + + $ pip install sphinx-rtd-theme + +To use the theme in your Sphinx project, you will need to add the following to +your ``conf.py`` file: + +.. code:: python + + import sphinx_rtd_theme + + extensions = [ + ... + "sphinx_rtd_theme", + ] + + html_theme = "sphinx_rtd_theme" + +For more information read the full documentation on `installing the theme`_ + +.. _PyPI: https://pypi.python.org/pypi/sphinx_rtd_theme +.. _installing the theme: https://sphinx-rtd-theme.readthedocs.io/en/latest/installing.html + +Configuration +============= + +This theme is highly customizable on both the page level and on a global level. +To see all the possible configuration options, read the documentation on +`configuring the theme`_. + +.. _configuring the theme: https://sphinx-rtd-theme.readthedocs.io/en/latest/configuring.html + +Contributing +============ + +If you would like to help modify or translate the theme, you'll find more +information on contributing in our `contributing guide`_. + +.. _contributing guide: https://sphinx-rtd-theme.readthedocs.io/en/latest/contributing.html + + diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme-0.5.1.dist-info/RECORD b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme-0.5.1.dist-info/RECORD new file mode 100644 index 00000000..2cbecbf3 --- /dev/null +++ b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme-0.5.1.dist-info/RECORD @@ -0,0 +1,63 @@ +sphinx_rtd_theme-0.5.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +sphinx_rtd_theme-0.5.1.dist-info/LICENSE,sha256=SGSJZCG4pJES7vqJmmtDZjKb1v5mnzjv77KfgUh87x4,1119 +sphinx_rtd_theme-0.5.1.dist-info/METADATA,sha256=pcIzLIkbqWFjo1P05DNi0TqbpGJlRAGwwK6-bZ9JIQo,3567 +sphinx_rtd_theme-0.5.1.dist-info/RECORD,, +sphinx_rtd_theme-0.5.1.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +sphinx_rtd_theme-0.5.1.dist-info/WHEEL,sha256=Z-nyYpwrcSqxfdux5Mbn_DQ525iP7J2DG3JgGvOYyTQ,110 +sphinx_rtd_theme-0.5.1.dist-info/entry_points.txt,sha256=iTs5wnBlk5Wj13ivBKljEBc5sXHi5W36liWmPmugQkg,58 +sphinx_rtd_theme-0.5.1.dist-info/top_level.txt,sha256=fJPZIXJs_gnmgm6U_6azGTNmDsz8za4Gpra4gGGcXKg,17 +sphinx_rtd_theme/__init__.py,sha256=KdE6DwSwzP4JNrx29nFP3JKxjrvikzZcn3JeHFyofO8,1628 +sphinx_rtd_theme/__pycache__/__init__.cpython-37.pyc,, +sphinx_rtd_theme/breadcrumbs.html,sha256=4Jh_eJnF8PflhLXJtynsxNY0KiyE1fVO9UYaKrneTtM,4045 +sphinx_rtd_theme/footer.html,sha256=RLJYoDz72w_CSLIbYT8Vl4PAXGDDLXBBLKUVx-ibmyQ,2809 +sphinx_rtd_theme/layout.html,sha256=lJDCGBGGOeEcDY3hYEcDVJY_MgrA0psHWMDgRSe5b18,9048 +sphinx_rtd_theme/locale/de/LC_MESSAGES/sphinx.mo,sha256=fQ_lFWgDLLuRVC1SfQoawsk_DBKCzv6__vz6wZ9ju6A,2085 +sphinx_rtd_theme/locale/de/LC_MESSAGES/sphinx.po,sha256=oe1cDm07zZ7_5CyMBjO_9yaE6iyV93zjSOq7OJ_be3M,4151 +sphinx_rtd_theme/locale/en/LC_MESSAGES/sphinx.mo,sha256=tuB660LkvCmC-IYmdCu1v7Wg7MVCF_nXPdawTixV9hc,455 +sphinx_rtd_theme/locale/en/LC_MESSAGES/sphinx.po,sha256=nMwFvXGDv9-B0O9Bksua8ujmOqJ2iyE9LaZ1jAwZCfo,3941 +sphinx_rtd_theme/locale/es/LC_MESSAGES/sphinx.mo,sha256=DCJFK5t3pz_3Ld_taMUmIp13CxKsVkrTAjJBo1a_AAA,2266 +sphinx_rtd_theme/locale/es/LC_MESSAGES/sphinx.po,sha256=1ZH0MSy2SJKGfuI7UmnseQ7r8ik12k8KIs6cB31unUk,4713 +sphinx_rtd_theme/locale/et/LC_MESSAGES/sphinx.mo,sha256=BpL0MdFqFrS1NdyvO3COnGpQ4OXkYk_jiJ2cYJdjz7U,2059 +sphinx_rtd_theme/locale/et/LC_MESSAGES/sphinx.po,sha256=eFNvAgT7GX-jTeqrOShQZexqpkmpWpnr7507gT3in0s,4257 +sphinx_rtd_theme/locale/fr/LC_MESSAGES/sphinx.mo,sha256=nGLNfBqe7qipvm5j4vz6YtTe5xPtgVUXJCKvsNPgEYQ,2164 +sphinx_rtd_theme/locale/fr/LC_MESSAGES/sphinx.po,sha256=n6lYIaGX8bfidwD1qT3_HNfl1whG6vrqzIzqPYQJMm0,4422 +sphinx_rtd_theme/locale/nl/LC_MESSAGES/sphinx.mo,sha256=n_FypA8AgxlJfu9eD_k14ShpF9YihtaZiJqRlihee4A,2069 +sphinx_rtd_theme/locale/nl/LC_MESSAGES/sphinx.po,sha256=tUWD--ggepGNM4219cj_O4caPk7CIT2eCajRss6FELo,4362 +sphinx_rtd_theme/locale/pt_BR/LC_MESSAGES/sphinx.mo,sha256=M4un5iIQXuWE8UO5TfVVfofQLV8LZSKxicDUa4yIJv0,2219 +sphinx_rtd_theme/locale/pt_BR/LC_MESSAGES/sphinx.po,sha256=01vA42XVr-pV9pueIceWAFLVaUXtGkTC2D_I2SAjFo0,4542 +sphinx_rtd_theme/locale/ru/LC_MESSAGES/sphinx.mo,sha256=_FSTKnzb4PRU5QOWf5Ad2XvGjlv7M88AheZ5JCPm7MM,2791 +sphinx_rtd_theme/locale/ru/LC_MESSAGES/sphinx.po,sha256=VxJSltin7g86krOYvUxmzPw85x0Ly1GQbDbQrX8HC_w,5201 +sphinx_rtd_theme/locale/sphinx.pot,sha256=kVGPkcPIj3l7rst3_2gMYb_C_b3KWVKHl1dA3P0l2UY,3756 +sphinx_rtd_theme/locale/sv/LC_MESSAGES/sphinx.mo,sha256=mVpJq_jE0rsrdulRvOthe1H053LkWqoLBpUVKZ9K9Kg,2097 +sphinx_rtd_theme/locale/sv/LC_MESSAGES/sphinx.po,sha256=_yYZ8K2IjpLHnb2N5qXJ10lJLxVLAx8UxqUqi2og6K0,4448 +sphinx_rtd_theme/locale/tr/LC_MESSAGES/sphinx.mo,sha256=2MTdvC0Fu9AHqS9oFIFVfkesxwx3lEITQyYIeaIhE0M,2115 +sphinx_rtd_theme/locale/tr/LC_MESSAGES/sphinx.po,sha256=5m8C38BNs4oCCogFXZ7JWc4sqQ1LN9oHLtPEbd09afI,4204 +sphinx_rtd_theme/locale/zh_CN/LC_MESSAGES/sphinx.mo,sha256=_64BAS71Dx-jExr6dPP7FAD5T7NBIAn8Tspk0AVBIGw,2056 +sphinx_rtd_theme/locale/zh_CN/LC_MESSAGES/sphinx.po,sha256=sTxtU-2sp06LEEF_nuhKYlZ-IxIlKoqu9qV6sXq2DHg,4265 +sphinx_rtd_theme/search.html,sha256=ZrR-0mK3QUwnjaw2CHK97SDaLSI9jQq6W59GJmtaF60,1851 +sphinx_rtd_theme/searchbox.html,sha256=xpm38vOVnqRLP1ePEO87bWBAqmbjDxP0aKLoijqxfUI,369 +sphinx_rtd_theme/static/css/badge_only.css,sha256=xAUPpH2Ltil8eYEfZj5s-jLLa3g7R-rt3WulDVzxpmY,3275 +sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Bold.woff,sha256=n-yHytviQTslXx7Fd1c6g_HKLhw3qgI9vrzTp7hkY2o,87624 +sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Bold.woff2,sha256=GgwCTdGiZ8UtVXVGn_6FcNHoQWTefTk880FLr9F9egw,67312 +sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Regular.woff,sha256=nzJjDiwMUTW_HobjbLZbOTLkQQZEI1vCvZlenH9v8Rc,86288 +sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Regular.woff2,sha256=h05CIihW168Ds_Q40h2SOkKA1H_mfEhRDiF0oVeXle8,66444 +sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.eot,sha256=e_yrbbmdXPvxcFygU23ceFhUMsxfpBu9etDwCQM7KXk,165742 +sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.svg,sha256=rWFXkmwWIrpOHQPUePFUE2hSS_xG9R5C_g2UX37zI-Q,444379 +sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.ttf,sha256=qljzPyOaD7AvXHpsRcBD16msmgkzNYBmlOzW1O3A1qg,165548 +sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.woff,sha256=ugxZ3rVFD1y0Gz-TYJ7i0NmVQVh33foiPoqKdTNHTwc,98024 +sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.woff2,sha256=Kt78vAQefRj88tQXh53FoJmXqmTWdbejxLbOM9oT8_4,77160 +sphinx_rtd_theme/static/css/fonts/lato-bold-italic.woff,sha256=mAyFkuVIjfJWGSyZnpLbj9MC24zYkJt_omamhON-Rfg,323344 +sphinx_rtd_theme/static/css/fonts/lato-bold-italic.woff2,sha256=wJFqMzQNBj97BWeeCAMecp0YiERHBvBIBHBdpZZtiV0,193308 +sphinx_rtd_theme/static/css/fonts/lato-bold.woff,sha256=DlaxfRQus2bIAHAx0U402kjHC0qdmgykkuaWp7rkXh4,309728 +sphinx_rtd_theme/static/css/fonts/lato-bold.woff2,sha256=roj8DXqWGDL4CVJ9ML05g6aGbUL2alat4j9UNoFZTbY,184912 +sphinx_rtd_theme/static/css/fonts/lato-normal-italic.woff,sha256=JjGKFGel5crxCwTPqULQeWMlYM16Kc7FZf0dyffsUIE,328412 +sphinx_rtd_theme/static/css/fonts/lato-normal-italic.woff2,sha256=RGV2Xy9u3c2tNP_XyrVZ5WvA515F4ZL4XpVisHcUgdw,195704 +sphinx_rtd_theme/static/css/fonts/lato-normal.woff,sha256=W5Al3aTXaI4zEbDBft3FARM7gH3vM-_672WThDz1QW4,309192 +sphinx_rtd_theme/static/css/fonts/lato-normal.woff2,sha256=mDsMrzNuhUIhT8FwGaT8XgNghkuSgGyhTVXB_BwsWg8,182708 +sphinx_rtd_theme/static/css/theme.css,sha256=D-HEP5UGTr5BaRskKQEc0WM9fEpGD6REsLJt1Kr88v0,123687 +sphinx_rtd_theme/static/js/badge_only.js,sha256=8KSAjQTE1VN4dRrAlqg3a2SxpwTIJYSw7lkCEs9BMBM,934 +sphinx_rtd_theme/static/js/html5shiv-printshiv.min.js,sha256=tCp-lJpuIdZrMPu7SiLer9ngzKvATw-ikH_GJS_fFl8,4370 +sphinx_rtd_theme/static/js/html5shiv.min.js,sha256=9uAoNWHdszsUDhSXf_rVcWOqKPfi5_8V5R4UdbZle2A,2734 +sphinx_rtd_theme/static/js/theme.js,sha256=scTQnaOnGcaJNEiIWE7xjFLEu8_zt6rtd1L9_3pHBQw,4916 +sphinx_rtd_theme/theme.conf,sha256=6SmBe2-QST8aiVPDx10E-fVl2r2M_cAKiWoZAOEUdck,407 +sphinx_rtd_theme/versions.html,sha256=oZxqmUp9O1NpLm9VYktOOaB8Qqm2JF0g7HQshmMZObg,1236 diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme-0.5.1.dist-info/REQUESTED b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme-0.5.1.dist-info/REQUESTED new file mode 100644 index 00000000..e69de29b diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme-0.5.1.dist-info/WHEEL b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme-0.5.1.dist-info/WHEEL new file mode 100644 index 00000000..01b8fc7d --- /dev/null +++ b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme-0.5.1.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.36.2) +Root-Is-Purelib: true +Tag: py2-none-any +Tag: py3-none-any + diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme-0.5.1.dist-info/entry_points.txt b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme-0.5.1.dist-info/entry_points.txt new file mode 100644 index 00000000..aece1a1a --- /dev/null +++ b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme-0.5.1.dist-info/entry_points.txt @@ -0,0 +1,3 @@ +[sphinx.html_themes] +sphinx_rtd_theme = sphinx_rtd_theme + diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme-0.5.1.dist-info/top_level.txt b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme-0.5.1.dist-info/top_level.txt new file mode 100644 index 00000000..483a4e96 --- /dev/null +++ b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme-0.5.1.dist-info/top_level.txt @@ -0,0 +1 @@ +sphinx_rtd_theme diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/__init__.py b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/__init__.py new file mode 100644 index 00000000..b4d72c99 --- /dev/null +++ b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/__init__.py @@ -0,0 +1,52 @@ +""" +Sphinx Read the Docs theme. + +From https://github.com/ryan-roemer/sphinx-bootstrap-theme. +""" + +from os import path + +from sphinx import version_info +from sphinx.locale import _ + +try: + # Avaliable from Sphinx 1.6 + from sphinx.util.logging import getLogger +except ImportError: + from logging import getLogger + + +__version__ = '0.5.1' +__version_full__ = __version__ + +logger = getLogger(__name__) + + +def get_html_theme_path(): + """Return list of HTML theme paths.""" + cur_dir = path.abspath(path.dirname(path.dirname(__file__))) + return cur_dir + + +def config_initiated(app, config): + theme_options = config.html_theme_options or {} + if theme_options.get('canonical_url'): + logger.warning( + _('The canonical_url option is deprecated, use the html_baseurl option from Sphinx instead.') + ) + + +# See http://www.sphinx-doc.org/en/stable/theming.html#distribute-your-theme-as-a-python-package +def setup(app): + if version_info >= (1, 6, 0): + # Register the theme that can be referenced without adding a theme path + app.add_html_theme('sphinx_rtd_theme', path.abspath(path.dirname(__file__))) + + if version_info >= (1, 8, 0): + # Add Sphinx message catalog for newer versions of Sphinx + # See http://www.sphinx-doc.org/en/master/extdev/appapi.html#sphinx.application.Sphinx.add_message_catalog + rtd_locale_path = path.join(path.abspath(path.dirname(__file__)), 'locale') + app.add_message_catalog('sphinx', rtd_locale_path) + app.connect('config-inited', config_initiated) + + return {'parallel_read_safe': True, 'parallel_write_safe': True} diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/breadcrumbs.html b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/breadcrumbs.html new file mode 100644 index 00000000..f58eff59 --- /dev/null +++ b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/breadcrumbs.html @@ -0,0 +1,84 @@ +{# Support for Sphinx 1.3+ page_source_suffix, but don't break old builds. #} + +{% if page_source_suffix %} +{% set suffix = page_source_suffix %} +{% else %} +{% set suffix = source_suffix %} +{% endif %} + +{% if meta is defined and meta is not none %} +{% set check_meta = True %} +{% else %} +{% set check_meta = False %} +{% endif %} + +{% if check_meta and 'github_url' in meta %} +{% set display_github = True %} +{% endif %} + +{% if check_meta and 'bitbucket_url' in meta %} +{% set display_bitbucket = True %} +{% endif %} + +{% if check_meta and 'gitlab_url' in meta %} +{% set display_gitlab = True %} +{% endif %} + +{% set display_vcs_links = display_vcs_links if display_vcs_links is defined else True %} + +
+ + + + {% if (theme_prev_next_buttons_location == 'top' or theme_prev_next_buttons_location == 'both') and (next or prev) %} + + {% endif %} +
+
diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/footer.html b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/footer.html new file mode 100644 index 00000000..1284a243 --- /dev/null +++ b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/footer.html @@ -0,0 +1,61 @@ + diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/layout.html b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/layout.html new file mode 100644 index 00000000..ca16d166 --- /dev/null +++ b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/layout.html @@ -0,0 +1,250 @@ +{# TEMPLATE VAR SETTINGS #} +{%- set url_root = pathto('', 1) %} +{%- if url_root == '#' %}{% set url_root = '' %}{% endif %} +{%- if not embedded and docstitle %} + {%- set titlesuffix = " — "|safe + docstitle|e %} +{%- else %} + {%- set titlesuffix = "" %} +{%- endif %} +{%- set lang_attr = 'en' if language == None else (language | replace('_', '-')) %} +{%- set sphinx_writer = 'writer-html5' if html5_doctype else 'writer-html4' %} + + + + + + {{ metatags }} + + {% block htmltitle %} + {{ title|striptags|e }}{{ titlesuffix }} + {% endblock %} + + {# CSS #} + + + {%- for css in css_files %} + {%- if css|attr("rel") %} + + {%- else %} + + {%- endif %} + {%- endfor %} + + {%- for cssfile in extra_css_files %} + + {%- endfor %} + + {# FAVICON #} + {% if favicon %} + + {% endif %} + + {# CANONICAL URL (deprecated) #} + {% if theme_canonical_url and not pageurl %} + + {% endif %} + + {# CANONICAL URL #} + {%- if pageurl %} + + {%- endif %} + + {# JAVASCRIPTS #} + {%- block scripts %} + + {%- if not embedded %} + {# XXX Sphinx 1.8.0 made this an external js-file, quick fix until we refactor the template to inherert more blocks directly from sphinx #} + {% if sphinx_version >= "1.8.0" %} + + {%- for scriptfile in script_files %} + {{ js_tag(scriptfile) }} + {%- endfor %} + {% else %} + + {%- for scriptfile in script_files %} + + {%- endfor %} + {% endif %} + + + {# OPENSEARCH #} + {%- if use_opensearch %} + + {%- endif %} + {%- endif %} + {%- endblock %} + + {%- block linktags %} + {%- if hasdoc('about') %} + + {%- endif %} + {%- if hasdoc('genindex') %} + + {%- endif %} + {%- if hasdoc('search') %} + + {%- endif %} + {%- if hasdoc('copyright') %} + + {%- endif %} + {%- if next %} + + {%- endif %} + {%- if prev %} + + {%- endif %} + {%- endblock %} + {%- block extrahead %} {% endblock %} + + + + + {% block extrabody %} {% endblock %} +
+ {# SIDE NAV, TOGGLES ON MOBILE #} + + +
+ + {# MOBILE NAV, TRIGGLES SIDE NAV ON TOGGLE #} + + + +
+ {%- block content %} + {% if theme_style_external_links|tobool %} + + +
+ +
+ {% include "versions.html" %} + + + + {# Do not conflict with RTD insertion of analytics script #} + {% if not READTHEDOCS %} + {% if theme_analytics_id %} + + + + {% endif %} + {% endif %} + + {%- block footer %} {% endblock %} + + + diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/de/LC_MESSAGES/sphinx.mo b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/de/LC_MESSAGES/sphinx.mo new file mode 100644 index 00000000..ede2e1ad Binary files /dev/null and b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/de/LC_MESSAGES/sphinx.mo differ diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/de/LC_MESSAGES/sphinx.po b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/de/LC_MESSAGES/sphinx.po new file mode 100644 index 00000000..44b82f29 --- /dev/null +++ b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/de/LC_MESSAGES/sphinx.po @@ -0,0 +1,142 @@ +# English translations for sphinx_rtd_theme. +# Copyright (C) 2019 ORGANIZATION +# This file is distributed under the same license as the sphinx_rtd_theme +# project. +# FIRST AUTHOR , 2019. +# +# Translators: +# Tom Kunze , 2019 +# +msgid "" +msgstr "" +"Project-Id-Version: sphinx_rtd_theme 0.4.3.dev0\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2021-01-04 13:48-0800\n" +"PO-Revision-Date: 2019-07-16 21:44+0000\n" +"Last-Translator: Tom Kunze , 2019\n" +"Language-Team: German (https://www.transifex.com/readthedocs/teams/101354/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.8.0\n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: sphinx_rtd_theme/breadcrumbs.html:45 sphinx_rtd_theme/breadcrumbs.html:47 +msgid "Edit on GitHub" +msgstr "Auf GitHub bearbeiten" + +#: sphinx_rtd_theme/breadcrumbs.html:52 sphinx_rtd_theme/breadcrumbs.html:54 +msgid "Edit on Bitbucket" +msgstr "Auf Bitbucket bearbeiten" + +#: sphinx_rtd_theme/breadcrumbs.html:59 sphinx_rtd_theme/breadcrumbs.html:61 +msgid "Edit on GitLab" +msgstr "Auf GitLab bearbeiten" + +#: sphinx_rtd_theme/breadcrumbs.html:64 sphinx_rtd_theme/breadcrumbs.html:66 +msgid "View page source" +msgstr "Quelltext anzeigen" + +#: sphinx_rtd_theme/breadcrumbs.html:76 sphinx_rtd_theme/footer.html:5 +msgid "Next" +msgstr "Weiter" + +#: sphinx_rtd_theme/breadcrumbs.html:79 sphinx_rtd_theme/footer.html:8 +msgid "Previous" +msgstr "Zurück" + +#. Build is a noun, not a verb +#: sphinx_rtd_theme/footer.html:29 +msgid "Build" +msgstr "Build" + +#: sphinx_rtd_theme/footer.html:40 +#, python-format +msgid "Last updated on %(last_updated)s." +msgstr "Zuletzt aktualisiert am %(last_updated)s." + +#. the variable "sphinx_web" is a link to the Sphinx project documentation +#. with +#. the text "Sphinx" +#: sphinx_rtd_theme/footer.html:52 +#, python-format +msgid "Built with %(sphinx_web)s using a" +msgstr "Erstellt mit %(sphinx_web)s mit einem" + +#. this is always used as "provided by Read the Docs", and should not imply +#. Read the Docs is an author of the generated documentation. +#: sphinx_rtd_theme/footer.html:56 +#, python-format +msgid "provided by %(readthedocs_web)s" +msgstr "bereitgestellt von %(readthedocs_web)s" + +#: sphinx_rtd_theme/layout.html:85 +#, python-format +msgid "Search within %(docstitle)s" +msgstr "%(docstitle)s durchsuchen" + +#: sphinx_rtd_theme/layout.html:93 +msgid "About these documents" +msgstr "Über diese Dokumentation" + +#: sphinx_rtd_theme/layout.html:96 +msgid "Index" +msgstr "Index" + +#: sphinx_rtd_theme/layout.html:99 sphinx_rtd_theme/search.html:11 +msgid "Search" +msgstr "Suche" + +#: sphinx_rtd_theme/layout.html:102 +msgid "Copyright" +msgstr "Copyright" + +#: sphinx_rtd_theme/layout.html:134 +msgid "Logo" +msgstr "Logo" + +#: sphinx_rtd_theme/search.html:31 +msgid "Please activate JavaScript to enable the search functionality." +msgstr "Bitte aktiviere JavaScript, um die Suchfunktion zu nutzen." + +#. Search is a noun, not a verb +#: sphinx_rtd_theme/search.html:39 +msgid "Search Results" +msgstr "Suchergebnisse" + +#: sphinx_rtd_theme/search.html:41 +msgid "" +"Your search did not match any documents. Please make sure that all words are" +" spelled correctly and that you've selected enough categories." +msgstr "" +"Es wurden keine mit deiner Suchanfrage übereinstimmenden Dokumente gefunden." +" Achte darauf, dass alle Wörter richtig geschrieben sind und dass genug " +"Kategorien ausgewählt sind." + +#: sphinx_rtd_theme/searchbox.html:4 +msgid "Search docs" +msgstr "Dokumentation durchsuchen" + +#: sphinx_rtd_theme/versions.html:11 +msgid "Versions" +msgstr "Versionen" + +#. The phrase "Read the Docs" is not translated +#: sphinx_rtd_theme/versions.html:24 +msgid "On Read the Docs" +msgstr "Auf Read the Docs" + +#: sphinx_rtd_theme/versions.html:26 +msgid "Project Home" +msgstr "Projektübersicht" + +#: sphinx_rtd_theme/versions.html:29 +msgid "Builds" +msgstr "Builds" + +#~ msgid "Docs" +#~ msgstr "Dokumentation" + +#~ msgid "Free document hosting provided by" +#~ msgstr "Kostenloses Dokumentationen-Hosting zur Verfügung gestellt von" diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/en/LC_MESSAGES/sphinx.mo b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/en/LC_MESSAGES/sphinx.mo new file mode 100644 index 00000000..564badfc Binary files /dev/null and b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/en/LC_MESSAGES/sphinx.mo differ diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/en/LC_MESSAGES/sphinx.po b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/en/LC_MESSAGES/sphinx.po new file mode 100644 index 00000000..76653641 --- /dev/null +++ b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/en/LC_MESSAGES/sphinx.po @@ -0,0 +1,164 @@ +# English translations for sphinx_rtd_theme. +# Copyright (C) 2019 ORGANIZATION +# This file is distributed under the same license as the sphinx_rtd_theme +# project. +# FIRST AUTHOR , 2019. +# +msgid "" +msgstr "" +"Project-Id-Version: sphinx_rtd_theme 0.4.3.dev0\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2021-01-04 13:48-0800\n" +"PO-Revision-Date: 2019-07-16 15:43-0600\n" +"Last-Translator: FULL NAME \n" +"Language: en\n" +"Language-Team: en \n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.8.0\n" + +#: sphinx_rtd_theme/breadcrumbs.html:45 sphinx_rtd_theme/breadcrumbs.html:47 +msgid "Edit on GitHub" +msgstr "" + +#: sphinx_rtd_theme/breadcrumbs.html:52 sphinx_rtd_theme/breadcrumbs.html:54 +msgid "Edit on Bitbucket" +msgstr "" + +#: sphinx_rtd_theme/breadcrumbs.html:59 sphinx_rtd_theme/breadcrumbs.html:61 +msgid "Edit on GitLab" +msgstr "" + +#: sphinx_rtd_theme/breadcrumbs.html:64 sphinx_rtd_theme/breadcrumbs.html:66 +msgid "View page source" +msgstr "" + +#: sphinx_rtd_theme/breadcrumbs.html:76 sphinx_rtd_theme/footer.html:5 +msgid "Next" +msgstr "" + +#: sphinx_rtd_theme/breadcrumbs.html:79 sphinx_rtd_theme/footer.html:8 +msgid "Previous" +msgstr "" + +#: sphinx_rtd_theme/footer.html:20 +#, python-format +msgid "© Copyright %(copyright)s." +msgstr "" + +#: sphinx_rtd_theme/footer.html:22 +#, python-format +msgid "© Copyright %(copyright)s." +msgstr "" + +#. Build is a noun, not a verb +#: sphinx_rtd_theme/footer.html:29 +msgid "Build" +msgstr "" + +#. the phrase "revision" comes from Git, referring to a commit +#: sphinx_rtd_theme/footer.html:35 +msgid "Revision" +msgstr "" + +#: sphinx_rtd_theme/footer.html:40 +#, python-format +msgid "Last updated on %(last_updated)s." +msgstr "" + +#. the variable "sphinx_web" is a link to the Sphinx project documentation with +#. the text "Sphinx" +#: sphinx_rtd_theme/footer.html:52 +#, python-format +msgid "Built with %(sphinx_web)s using a" +msgstr "" + +#. "theme" refers to a theme for Sphinx, which alters the appearance of the +#. generated documenation +#: sphinx_rtd_theme/footer.html:54 +msgid "theme" +msgstr "" + +#. this is always used as "provided by Read the Docs", and should not imply +#. Read the Docs is an author of the generated documentation. +#: sphinx_rtd_theme/footer.html:56 +#, python-format +msgid "provided by %(readthedocs_web)s" +msgstr "" + +#: sphinx_rtd_theme/layout.html:85 +#, python-format +msgid "Search within %(docstitle)s" +msgstr "" + +#: sphinx_rtd_theme/layout.html:93 +msgid "About these documents" +msgstr "" + +#: sphinx_rtd_theme/layout.html:96 +msgid "Index" +msgstr "" + +#: sphinx_rtd_theme/layout.html:99 sphinx_rtd_theme/search.html:11 +msgid "Search" +msgstr "" + +#: sphinx_rtd_theme/layout.html:102 +msgid "Copyright" +msgstr "" + +#: sphinx_rtd_theme/layout.html:134 +msgid "Logo" +msgstr "" + +#: sphinx_rtd_theme/search.html:31 +msgid "Please activate JavaScript to enable the search functionality." +msgstr "" + +#. Search is a noun, not a verb +#: sphinx_rtd_theme/search.html:39 +msgid "Search Results" +msgstr "" + +#: sphinx_rtd_theme/search.html:41 +msgid "" +"Your search did not match any documents. Please make sure that all words " +"are spelled correctly and that you've selected enough categories." +msgstr "" + +#: sphinx_rtd_theme/searchbox.html:4 +msgid "Search docs" +msgstr "" + +#: sphinx_rtd_theme/versions.html:11 +msgid "Versions" +msgstr "" + +#: sphinx_rtd_theme/versions.html:17 +msgid "Downloads" +msgstr "" + +#. The phrase "Read the Docs" is not translated +#: sphinx_rtd_theme/versions.html:24 +msgid "On Read the Docs" +msgstr "" + +#: sphinx_rtd_theme/versions.html:26 +msgid "Project Home" +msgstr "" + +#: sphinx_rtd_theme/versions.html:29 +msgid "Builds" +msgstr "" + +#~ msgid "Docs" +#~ msgstr "" + +#~ msgid "Free document hosting provided by" +#~ msgstr "" + +#~ msgid "Documentation Home" +#~ msgstr "" + diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/es/LC_MESSAGES/sphinx.mo b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/es/LC_MESSAGES/sphinx.mo new file mode 100644 index 00000000..1036b2ad Binary files /dev/null and b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/es/LC_MESSAGES/sphinx.mo differ diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/es/LC_MESSAGES/sphinx.po b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/es/LC_MESSAGES/sphinx.po new file mode 100644 index 00000000..f7e07777 --- /dev/null +++ b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/es/LC_MESSAGES/sphinx.po @@ -0,0 +1,162 @@ +# English translations for sphinx_rtd_theme. +# Copyright (C) 2019 ORGANIZATION +# This file is distributed under the same license as the sphinx_rtd_theme +# project. +# FIRST AUTHOR , 2019. +# +# Translators: +# Anthony , 2019 +# Leonardo J. Caballero G. , 2020 +# +msgid "" +msgstr "" +"Project-Id-Version: sphinx_rtd_theme 0.4.3.dev0\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2021-01-04 13:48-0800\n" +"PO-Revision-Date: 2019-07-16 21:44+0000\n" +"Last-Translator: Leonardo J. Caballero G. , 2020\n" +"Language-Team: Spanish (https://www.transifex.com/readthedocs/teams/101354/es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.8.0\n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: sphinx_rtd_theme/breadcrumbs.html:45 sphinx_rtd_theme/breadcrumbs.html:47 +msgid "Edit on GitHub" +msgstr "Editar en GitHub" + +#: sphinx_rtd_theme/breadcrumbs.html:52 sphinx_rtd_theme/breadcrumbs.html:54 +msgid "Edit on Bitbucket" +msgstr "Editar en Bitbucket" + +#: sphinx_rtd_theme/breadcrumbs.html:59 sphinx_rtd_theme/breadcrumbs.html:61 +msgid "Edit on GitLab" +msgstr "Editar en GitLab" + +#: sphinx_rtd_theme/breadcrumbs.html:64 sphinx_rtd_theme/breadcrumbs.html:66 +msgid "View page source" +msgstr "Ver código fuente de la página" + +#: sphinx_rtd_theme/breadcrumbs.html:76 sphinx_rtd_theme/footer.html:5 +msgid "Next" +msgstr "Siguiente" + +#: sphinx_rtd_theme/breadcrumbs.html:79 sphinx_rtd_theme/footer.html:8 +msgid "Previous" +msgstr "Anterior" + +#. Build is a noun, not a verb +#: sphinx_rtd_theme/footer.html:29 +msgid "Build" +msgstr "Construido" + +#. the phrase "revision" comes from Git, referring to a commit +#: sphinx_rtd_theme/footer.html:35 +msgid "Revision" +msgstr "Revisión" + +#: sphinx_rtd_theme/footer.html:40 +#, python-format +msgid "Last updated on %(last_updated)s." +msgstr "Actualizado por última vez en %(last_updated)s." + +#. the variable "sphinx_web" is a link to the Sphinx project documentation +#. with +#. the text "Sphinx" +#: sphinx_rtd_theme/footer.html:52 +#, python-format +msgid "Built with %(sphinx_web)s using a" +msgstr "Construido con %(sphinx_web)s usando un" + +#. "theme" refers to a theme for Sphinx, which alters the appearance of the +#. generated documenation +#: sphinx_rtd_theme/footer.html:54 +msgid "theme" +msgstr "tema" + +#. this is always used as "provided by Read the Docs", and should not imply +#. Read the Docs is an author of the generated documentation. +#: sphinx_rtd_theme/footer.html:56 +#, python-format +msgid "provided by %(readthedocs_web)s" +msgstr "proporcionado por %(readthedocs_web)s" + +#: sphinx_rtd_theme/layout.html:85 +#, python-format +msgid "Search within %(docstitle)s" +msgstr "Buscar en %(docstitle)s" + +#: sphinx_rtd_theme/layout.html:93 +msgid "About these documents" +msgstr "Sobre esta documentación" + +#: sphinx_rtd_theme/layout.html:96 +msgid "Index" +msgstr "Índice" + +#: sphinx_rtd_theme/layout.html:99 sphinx_rtd_theme/search.html:11 +msgid "Search" +msgstr "Búsqueda" + +#: sphinx_rtd_theme/layout.html:102 +msgid "Copyright" +msgstr "Derechos de autor" + +#: sphinx_rtd_theme/layout.html:134 +msgid "Logo" +msgstr "Logotipo" + +#: sphinx_rtd_theme/search.html:31 +msgid "Please activate JavaScript to enable the search functionality." +msgstr "" +"Por favor, active JavaScript para habilitar la funcionalidad de búsqueda." + +#. Search is a noun, not a verb +#: sphinx_rtd_theme/search.html:39 +msgid "Search Results" +msgstr "Resultados de la búsqueda" + +#: sphinx_rtd_theme/search.html:41 +msgid "" +"Your search did not match any documents. Please make sure that all words are" +" spelled correctly and that you've selected enough categories." +msgstr "" +"Su búsqueda no coincide con ningún documento. Por favor, asegúrese de que " +"todas las palabras estén correctamente escritas y que usted haya " +"seleccionado las suficientes categorías." + +#: sphinx_rtd_theme/searchbox.html:4 +msgid "Search docs" +msgstr "Buscar documentos" + +#: sphinx_rtd_theme/versions.html:11 +msgid "Versions" +msgstr "Versiones" + +#: sphinx_rtd_theme/versions.html:17 +msgid "Downloads" +msgstr "Descargas" + +#. The phrase "Read the Docs" is not translated +#: sphinx_rtd_theme/versions.html:24 +msgid "On Read the Docs" +msgstr "En Read the Docs" + +#: sphinx_rtd_theme/versions.html:26 +msgid "Project Home" +msgstr "Página de Proyecto" + +#: sphinx_rtd_theme/versions.html:29 +msgid "Builds" +msgstr "Construcciones" + +#~ msgid "Docs" +#~ msgstr "Documentos" + +#~ msgid "Free document hosting provided by" +#~ msgstr "Alojamiento gratuito de documentos proporcionado por" + +#~ msgid "Documentation Home" +#~ msgstr "Inicio de Documentación" diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/et/LC_MESSAGES/sphinx.mo b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/et/LC_MESSAGES/sphinx.mo new file mode 100644 index 00000000..ff7da18b Binary files /dev/null and b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/et/LC_MESSAGES/sphinx.mo differ diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/et/LC_MESSAGES/sphinx.po b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/et/LC_MESSAGES/sphinx.po new file mode 100644 index 00000000..33f2ed7d --- /dev/null +++ b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/et/LC_MESSAGES/sphinx.po @@ -0,0 +1,153 @@ +# English translations for sphinx_rtd_theme. +# Copyright (C) 2019 ORGANIZATION +# This file is distributed under the same license as the sphinx_rtd_theme +# project. +# FIRST AUTHOR , 2019. +# +# Translators: +# Anthony , 2020 +# Ivar Smolin , 2020 +# +msgid "" +msgstr "" +"Project-Id-Version: sphinx_rtd_theme 0.4.3.dev0\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2021-01-04 13:48-0800\n" +"PO-Revision-Date: 2019-07-16 21:44+0000\n" +"Last-Translator: Ivar Smolin , 2020\n" +"Language-Team: Estonian (https://www.transifex.com/readthedocs/teams/101354/et/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.8.0\n" +"Language: et\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: sphinx_rtd_theme/breadcrumbs.html:45 sphinx_rtd_theme/breadcrumbs.html:47 +msgid "Edit on GitHub" +msgstr "Muuda GitHubis" + +#: sphinx_rtd_theme/breadcrumbs.html:52 sphinx_rtd_theme/breadcrumbs.html:54 +msgid "Edit on Bitbucket" +msgstr "Muuda Bitbucketis" + +#: sphinx_rtd_theme/breadcrumbs.html:59 sphinx_rtd_theme/breadcrumbs.html:61 +msgid "Edit on GitLab" +msgstr "Muuda GitLabis" + +#: sphinx_rtd_theme/breadcrumbs.html:64 sphinx_rtd_theme/breadcrumbs.html:66 +msgid "View page source" +msgstr "Vaata lehe lähtekoodi" + +#: sphinx_rtd_theme/breadcrumbs.html:76 sphinx_rtd_theme/footer.html:5 +msgid "Next" +msgstr "Järgmine" + +#: sphinx_rtd_theme/breadcrumbs.html:79 sphinx_rtd_theme/footer.html:8 +msgid "Previous" +msgstr "Eelmine" + +#. Build is a noun, not a verb +#: sphinx_rtd_theme/footer.html:29 +msgid "Build" +msgstr "Ehitus" + +#. the phrase "revision" comes from Git, referring to a commit +#: sphinx_rtd_theme/footer.html:35 +msgid "Revision" +msgstr "Redaktsioon" + +#: sphinx_rtd_theme/footer.html:40 +#, python-format +msgid "Last updated on %(last_updated)s." +msgstr "Viimati uuendatud %(last_updated)s." + +#. the variable "sphinx_web" is a link to the Sphinx project documentation +#. with +#. the text "Sphinx" +#: sphinx_rtd_theme/footer.html:52 +#, python-format +msgid "Built with %(sphinx_web)s using a" +msgstr "Ehitatud %(sphinx_web)s'iga," + +#. "theme" refers to a theme for Sphinx, which alters the appearance of the +#. generated documenation +#: sphinx_rtd_theme/footer.html:54 +msgid "theme" +msgstr "kujundusteema" + +#: sphinx_rtd_theme/layout.html:85 +#, python-format +msgid "Search within %(docstitle)s" +msgstr "Otsi dokumendist %(docstitle)s" + +#: sphinx_rtd_theme/layout.html:93 +msgid "About these documents" +msgstr "Nende dokumentide kirjeldused" + +#: sphinx_rtd_theme/layout.html:96 +msgid "Index" +msgstr "Indeks" + +#: sphinx_rtd_theme/layout.html:99 sphinx_rtd_theme/search.html:11 +msgid "Search" +msgstr "Otsing" + +#: sphinx_rtd_theme/layout.html:102 +msgid "Copyright" +msgstr "Autoriõigus" + +#: sphinx_rtd_theme/layout.html:134 +msgid "Logo" +msgstr "Logo" + +#: sphinx_rtd_theme/search.html:31 +msgid "Please activate JavaScript to enable the search functionality." +msgstr "Otsimisfunktsiooni lubamiseks aktiveeri palun JavaScript" + +#. Search is a noun, not a verb +#: sphinx_rtd_theme/search.html:39 +msgid "Search Results" +msgstr "Otsingu tulemused" + +#: sphinx_rtd_theme/search.html:41 +msgid "" +"Your search did not match any documents. Please make sure that all words are" +" spelled correctly and that you've selected enough categories." +msgstr "" +"Sinu otsingule ei vastanud ükski dokument. Palun veendu, et kõik sisestatud " +"sõnad on õigesti kirjutatud ja sa oled valikud piisaval hulgal kategooriaid." + +#: sphinx_rtd_theme/searchbox.html:4 +msgid "Search docs" +msgstr "Otsi dokumente" + +#: sphinx_rtd_theme/versions.html:11 +msgid "Versions" +msgstr "Versioonid" + +#: sphinx_rtd_theme/versions.html:17 +msgid "Downloads" +msgstr "Allalaadimised" + +#. The phrase "Read the Docs" is not translated +#: sphinx_rtd_theme/versions.html:24 +msgid "On Read the Docs" +msgstr "Saidil Read the Docs" + +#: sphinx_rtd_theme/versions.html:26 +msgid "Project Home" +msgstr "Projekti kodu" + +#: sphinx_rtd_theme/versions.html:29 +msgid "Builds" +msgstr "Ehitused" + +#~ msgid "Docs" +#~ msgstr "Dokumendid" + +#~ msgid "Free document hosting provided by" +#~ msgstr "Dokumentatsiooni majutab tasuta" + +#~ msgid "Documentation Home" +#~ msgstr "Dokumentatsiooni kodu" diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/fr/LC_MESSAGES/sphinx.mo b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/fr/LC_MESSAGES/sphinx.mo new file mode 100644 index 00000000..00a21fe1 Binary files /dev/null and b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/fr/LC_MESSAGES/sphinx.mo differ diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/fr/LC_MESSAGES/sphinx.po b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/fr/LC_MESSAGES/sphinx.po new file mode 100644 index 00000000..92634861 --- /dev/null +++ b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/fr/LC_MESSAGES/sphinx.po @@ -0,0 +1,153 @@ +# English translations for sphinx_rtd_theme. +# Copyright (C) 2019 ORGANIZATION +# This file is distributed under the same license as the sphinx_rtd_theme +# project. +# FIRST AUTHOR , 2019. +# +# Translators: +# Radina Matic , 2020 +# Anthony , 2020 +# +msgid "" +msgstr "" +"Project-Id-Version: sphinx_rtd_theme 0.4.3.dev0\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2021-01-04 13:48-0800\n" +"PO-Revision-Date: 2019-07-16 21:44+0000\n" +"Last-Translator: Anthony , 2020\n" +"Language-Team: French (https://www.transifex.com/readthedocs/teams/101354/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.8.0\n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: sphinx_rtd_theme/breadcrumbs.html:45 sphinx_rtd_theme/breadcrumbs.html:47 +msgid "Edit on GitHub" +msgstr "Éditer sur GitHub" + +#: sphinx_rtd_theme/breadcrumbs.html:52 sphinx_rtd_theme/breadcrumbs.html:54 +msgid "Edit on Bitbucket" +msgstr "Éditer sur Bitbucket" + +#: sphinx_rtd_theme/breadcrumbs.html:59 sphinx_rtd_theme/breadcrumbs.html:61 +msgid "Edit on GitLab" +msgstr "Éditer sur GitLab" + +#: sphinx_rtd_theme/breadcrumbs.html:64 sphinx_rtd_theme/breadcrumbs.html:66 +msgid "View page source" +msgstr "Afficher la source de la page" + +#: sphinx_rtd_theme/breadcrumbs.html:76 sphinx_rtd_theme/footer.html:5 +msgid "Next" +msgstr "Suivant" + +#: sphinx_rtd_theme/breadcrumbs.html:79 sphinx_rtd_theme/footer.html:8 +msgid "Previous" +msgstr "Précédent" + +#. Build is a noun, not a verb +#: sphinx_rtd_theme/footer.html:29 +msgid "Build" +msgstr "Compilation" + +#. the phrase "revision" comes from Git, referring to a commit +#: sphinx_rtd_theme/footer.html:35 +msgid "Revision" +msgstr "Révision" + +#: sphinx_rtd_theme/footer.html:40 +#, python-format +msgid "Last updated on %(last_updated)s." +msgstr "Dernière mise à jour le %(last_updated)s." + +#. the variable "sphinx_web" is a link to the Sphinx project documentation +#. with +#. the text "Sphinx" +#: sphinx_rtd_theme/footer.html:52 +#, python-format +msgid "Built with %(sphinx_web)s using a" +msgstr "Compilé avec %(sphinx_web)s en utilisant un" + +#. "theme" refers to a theme for Sphinx, which alters the appearance of the +#. generated documenation +#: sphinx_rtd_theme/footer.html:54 +msgid "theme" +msgstr "thème" + +#. this is always used as "provided by Read the Docs", and should not imply +#. Read the Docs is an author of the generated documentation. +#: sphinx_rtd_theme/footer.html:56 +#, python-format +msgid "provided by %(readthedocs_web)s" +msgstr "fourni par %(readthedocs_web)s" + +#: sphinx_rtd_theme/layout.html:85 +#, python-format +msgid "Search within %(docstitle)s" +msgstr "Rechercher dans %(docstitle)s" + +#: sphinx_rtd_theme/layout.html:93 +msgid "About these documents" +msgstr "À propos de cette documentation" + +#: sphinx_rtd_theme/layout.html:96 +msgid "Index" +msgstr "Index" + +#: sphinx_rtd_theme/layout.html:99 sphinx_rtd_theme/search.html:11 +msgid "Search" +msgstr "Rechercher" + +#: sphinx_rtd_theme/layout.html:102 +msgid "Copyright" +msgstr "Droits d'auteur" + +#: sphinx_rtd_theme/layout.html:134 +msgid "Logo" +msgstr "Logo" + +#: sphinx_rtd_theme/search.html:31 +msgid "Please activate JavaScript to enable the search functionality." +msgstr "Activez JavaScript pour accéder à la fonction de recherche." + +#. Search is a noun, not a verb +#: sphinx_rtd_theme/search.html:39 +msgid "Search Results" +msgstr "Résultats de la recherche" + +#: sphinx_rtd_theme/search.html:41 +msgid "" +"Your search did not match any documents. Please make sure that all words are" +" spelled correctly and that you've selected enough categories." +msgstr "" +"Votre recherche ne correspond à aucun document. Assurez-vous que tous les " +"mots sont correctement orthographiés et que vous avez sélectionné " +"suffisamment de catégories." + +#: sphinx_rtd_theme/searchbox.html:4 +msgid "Search docs" +msgstr "Rechercher docs" + +#: sphinx_rtd_theme/versions.html:11 +msgid "Versions" +msgstr "Versions" + +#: sphinx_rtd_theme/versions.html:17 +msgid "Downloads" +msgstr "Téléchargements" + +#: sphinx_rtd_theme/versions.html:26 +msgid "Project Home" +msgstr "Accueil du projet" + +#: sphinx_rtd_theme/versions.html:29 +msgid "Builds" +msgstr "Compilations" + +#~ msgid "Docs" +#~ msgstr "Docs" + +#~ msgid "Free document hosting provided by" +#~ msgstr "Hébergement gratuit de documents fourni par" diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/nl/LC_MESSAGES/sphinx.mo b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/nl/LC_MESSAGES/sphinx.mo new file mode 100644 index 00000000..40eb7fe7 Binary files /dev/null and b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/nl/LC_MESSAGES/sphinx.mo differ diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/nl/LC_MESSAGES/sphinx.po b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/nl/LC_MESSAGES/sphinx.po new file mode 100644 index 00000000..464d68fe --- /dev/null +++ b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/nl/LC_MESSAGES/sphinx.po @@ -0,0 +1,156 @@ +# English translations for sphinx_rtd_theme. +# Copyright (C) 2019 ORGANIZATION +# This file is distributed under the same license as the sphinx_rtd_theme +# project. +# FIRST AUTHOR , 2019. +# +# Translators: +# Jesse Tan, 2019 +# +msgid "" +msgstr "" +"Project-Id-Version: sphinx_rtd_theme 0.4.3.dev0\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2021-01-04 13:48-0800\n" +"PO-Revision-Date: 2019-07-16 21:44+0000\n" +"Last-Translator: Jesse Tan, 2019\n" +"Language-Team: Dutch (https://www.transifex.com/readthedocs/teams/101354/nl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.8.0\n" +"Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: sphinx_rtd_theme/breadcrumbs.html:45 sphinx_rtd_theme/breadcrumbs.html:47 +msgid "Edit on GitHub" +msgstr "Bewerk op GitHub" + +#: sphinx_rtd_theme/breadcrumbs.html:52 sphinx_rtd_theme/breadcrumbs.html:54 +msgid "Edit on Bitbucket" +msgstr "Bewerk op BitBucket" + +#: sphinx_rtd_theme/breadcrumbs.html:59 sphinx_rtd_theme/breadcrumbs.html:61 +msgid "Edit on GitLab" +msgstr "Bewerk op GitLab" + +#: sphinx_rtd_theme/breadcrumbs.html:64 sphinx_rtd_theme/breadcrumbs.html:66 +msgid "View page source" +msgstr "Bekijk paginabron" + +#: sphinx_rtd_theme/breadcrumbs.html:76 sphinx_rtd_theme/footer.html:5 +msgid "Next" +msgstr "Volgende" + +#: sphinx_rtd_theme/breadcrumbs.html:79 sphinx_rtd_theme/footer.html:8 +msgid "Previous" +msgstr "Vorige" + +#. Build is a noun, not a verb +#: sphinx_rtd_theme/footer.html:29 +msgid "Build" +msgstr "Bouwresultaat" + +#. the phrase "revision" comes from Git, referring to a commit +#: sphinx_rtd_theme/footer.html:35 +msgid "Revision" +msgstr "Revisie" + +#: sphinx_rtd_theme/footer.html:40 +#, python-format +msgid "Last updated on %(last_updated)s." +msgstr "Laatste update op %(last_updated)s." + +#. the variable "sphinx_web" is a link to the Sphinx project documentation +#. with +#. the text "Sphinx" +#: sphinx_rtd_theme/footer.html:52 +#, python-format +msgid "Built with %(sphinx_web)s using a" +msgstr "Gebouwd met %(sphinx_web)s met een" + +#. "theme" refers to a theme for Sphinx, which alters the appearance of the +#. generated documenation +#: sphinx_rtd_theme/footer.html:54 +msgid "theme" +msgstr "thema" + +#. this is always used as "provided by Read the Docs", and should not imply +#. Read the Docs is an author of the generated documentation. +#: sphinx_rtd_theme/footer.html:56 +#, python-format +msgid "provided by %(readthedocs_web)s" +msgstr "geleverd door %(readthedocs_web)s" + +#: sphinx_rtd_theme/layout.html:85 +#, python-format +msgid "Search within %(docstitle)s" +msgstr "Zoek binnen %(docstitle)s" + +#: sphinx_rtd_theme/layout.html:93 +msgid "About these documents" +msgstr "Over deze documenten" + +#: sphinx_rtd_theme/layout.html:96 +msgid "Index" +msgstr "Index" + +#: sphinx_rtd_theme/layout.html:99 sphinx_rtd_theme/search.html:11 +msgid "Search" +msgstr "Zoek" + +#: sphinx_rtd_theme/layout.html:102 +msgid "Copyright" +msgstr "Copyright" + +#: sphinx_rtd_theme/layout.html:134 +msgid "Logo" +msgstr "Logo" + +#: sphinx_rtd_theme/search.html:31 +msgid "Please activate JavaScript to enable the search functionality." +msgstr "Zet JavaScript aan om de zoekfunctie mogelijk te maken." + +#. Search is a noun, not a verb +#: sphinx_rtd_theme/search.html:39 +msgid "Search Results" +msgstr "Zoekresultaten" + +#: sphinx_rtd_theme/search.html:41 +msgid "" +"Your search did not match any documents. Please make sure that all words are" +" spelled correctly and that you've selected enough categories." +msgstr "" +"Zoekpoging vond geen documenten. Zorg ervoor dat alle woorden correct zijn " +"gespeld en dat voldoende categorieën zijn geselecteerd." + +#: sphinx_rtd_theme/searchbox.html:4 +msgid "Search docs" +msgstr "Zoek in documentatie" + +#: sphinx_rtd_theme/versions.html:11 +msgid "Versions" +msgstr "Versies" + +#: sphinx_rtd_theme/versions.html:17 +msgid "Downloads" +msgstr "Downloads" + +#. The phrase "Read the Docs" is not translated +#: sphinx_rtd_theme/versions.html:24 +msgid "On Read the Docs" +msgstr "Op Read the Docs" + +#: sphinx_rtd_theme/versions.html:26 +msgid "Project Home" +msgstr "Project Home" + +#: sphinx_rtd_theme/versions.html:29 +msgid "Builds" +msgstr "Bouwresultaten" + +#~ msgid "Docs" +#~ msgstr "Documentatie" + +#~ msgid "Free document hosting provided by" +#~ msgstr "Gratis hosting voor documentatie verzorgd door" diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/pt_BR/LC_MESSAGES/sphinx.mo b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/pt_BR/LC_MESSAGES/sphinx.mo new file mode 100644 index 00000000..608d2c02 Binary files /dev/null and b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/pt_BR/LC_MESSAGES/sphinx.mo differ diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/pt_BR/LC_MESSAGES/sphinx.po b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/pt_BR/LC_MESSAGES/sphinx.po new file mode 100644 index 00000000..eb1ff5b7 --- /dev/null +++ b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/pt_BR/LC_MESSAGES/sphinx.po @@ -0,0 +1,158 @@ +# English translations for sphinx_rtd_theme. +# Copyright (C) 2019 ORGANIZATION +# This file is distributed under the same license as the sphinx_rtd_theme +# project. +# FIRST AUTHOR , 2019. +# +# Translators: +# Rafael Fontenelle , 2020 +# +msgid "" +msgstr "" +"Project-Id-Version: sphinx_rtd_theme 0.4.3.dev0\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2021-01-04 13:48-0800\n" +"PO-Revision-Date: 2019-07-16 21:44+0000\n" +"Last-Translator: Rafael Fontenelle , 2020\n" +"Language-Team: Portuguese (Brazil) (https://www.transifex.com/readthedocs/teams/101354/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.8.0\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: sphinx_rtd_theme/breadcrumbs.html:45 sphinx_rtd_theme/breadcrumbs.html:47 +msgid "Edit on GitHub" +msgstr "Editar no GitHub" + +#: sphinx_rtd_theme/breadcrumbs.html:52 sphinx_rtd_theme/breadcrumbs.html:54 +msgid "Edit on Bitbucket" +msgstr "Editar no Bitbucket" + +#: sphinx_rtd_theme/breadcrumbs.html:59 sphinx_rtd_theme/breadcrumbs.html:61 +msgid "Edit on GitLab" +msgstr "Editar no GitLab" + +#: sphinx_rtd_theme/breadcrumbs.html:64 sphinx_rtd_theme/breadcrumbs.html:66 +msgid "View page source" +msgstr "Ver código-fonte da página" + +#: sphinx_rtd_theme/breadcrumbs.html:76 sphinx_rtd_theme/footer.html:5 +msgid "Next" +msgstr "Próximo" + +#: sphinx_rtd_theme/breadcrumbs.html:79 sphinx_rtd_theme/footer.html:8 +msgid "Previous" +msgstr "Anterior" + +#. Build is a noun, not a verb +#: sphinx_rtd_theme/footer.html:29 +msgid "Build" +msgstr "Compilação" + +#. the phrase "revision" comes from Git, referring to a commit +#: sphinx_rtd_theme/footer.html:35 +msgid "Revision" +msgstr "Revisão" + +#: sphinx_rtd_theme/footer.html:40 +#, python-format +msgid "Last updated on %(last_updated)s." +msgstr "Última atualização em %(last_updated)s." + +#. the variable "sphinx_web" is a link to the Sphinx project documentation +#. with +#. the text "Sphinx" +#: sphinx_rtd_theme/footer.html:52 +#, python-format +msgid "Built with %(sphinx_web)s using a" +msgstr "Compilado com %(sphinx_web)s usando um" + +#. "theme" refers to a theme for Sphinx, which alters the appearance of the +#. generated documenation +#: sphinx_rtd_theme/footer.html:54 +msgid "theme" +msgstr "tema" + +#. this is always used as "provided by Read the Docs", and should not imply +#. Read the Docs is an author of the generated documentation. +#: sphinx_rtd_theme/footer.html:56 +#, python-format +msgid "provided by %(readthedocs_web)s" +msgstr "fornecido por %(readthedocs_web)s" + +#: sphinx_rtd_theme/layout.html:85 +#, python-format +msgid "Search within %(docstitle)s" +msgstr "Pesquisar em %(docstitle)s" + +#: sphinx_rtd_theme/layout.html:93 +msgid "About these documents" +msgstr "Sobre esses documentos" + +#: sphinx_rtd_theme/layout.html:96 +msgid "Index" +msgstr "Índice" + +#: sphinx_rtd_theme/layout.html:99 sphinx_rtd_theme/search.html:11 +msgid "Search" +msgstr "Pesquisar" + +#: sphinx_rtd_theme/layout.html:102 +msgid "Copyright" +msgstr "Copyright" + +#: sphinx_rtd_theme/layout.html:134 +msgid "Logo" +msgstr "Logo" + +#: sphinx_rtd_theme/search.html:31 +msgid "Please activate JavaScript to enable the search functionality." +msgstr "" +"Por favor, ative JavaScript para habilitar a funcionalidade de pesquisa." + +#. Search is a noun, not a verb +#: sphinx_rtd_theme/search.html:39 +msgid "Search Results" +msgstr "Resultados da pesquisa" + +#: sphinx_rtd_theme/search.html:41 +msgid "" +"Your search did not match any documents. Please make sure that all words are" +" spelled correctly and that you've selected enough categories." +msgstr "" +"A sua pesquisa não encontrou nenhum documento correspondente. Verifique se " +"todas as palavras estão escritas corretamente e se você selecionou " +"categorias suficientes." + +#: sphinx_rtd_theme/searchbox.html:4 +msgid "Search docs" +msgstr "Pesquisar documentos" + +#: sphinx_rtd_theme/versions.html:11 +msgid "Versions" +msgstr "Versões" + +#: sphinx_rtd_theme/versions.html:17 +msgid "Downloads" +msgstr "Downloads" + +#. The phrase "Read the Docs" is not translated +#: sphinx_rtd_theme/versions.html:24 +msgid "On Read the Docs" +msgstr "No Read the Docs" + +#: sphinx_rtd_theme/versions.html:26 +msgid "Project Home" +msgstr "Página inicial" + +#: sphinx_rtd_theme/versions.html:29 +msgid "Builds" +msgstr "Compilações" + +#~ msgid "Docs" +#~ msgstr "Docs" + +#~ msgid "Free document hosting provided by" +#~ msgstr "Hospedagem de documentos livres fornecida por" diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/ru/LC_MESSAGES/sphinx.mo b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/ru/LC_MESSAGES/sphinx.mo new file mode 100644 index 00000000..9927724a Binary files /dev/null and b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/ru/LC_MESSAGES/sphinx.mo differ diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/ru/LC_MESSAGES/sphinx.po b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/ru/LC_MESSAGES/sphinx.po new file mode 100644 index 00000000..7b6564a7 --- /dev/null +++ b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/ru/LC_MESSAGES/sphinx.po @@ -0,0 +1,157 @@ +# English translations for sphinx_rtd_theme. +# Copyright (C) 2019 ORGANIZATION +# This file is distributed under the same license as the sphinx_rtd_theme +# project. +# FIRST AUTHOR , 2019. +# +# Translators: +# Dmitry Shachnev , 2019 +# lvv83 , 2019 +# +msgid "" +msgstr "" +"Project-Id-Version: sphinx_rtd_theme 0.4.3.dev0\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2021-01-04 13:48-0800\n" +"PO-Revision-Date: 2019-07-16 21:44+0000\n" +"Last-Translator: lvv83 , 2019\n" +"Language-Team: Russian (https://www.transifex.com/readthedocs/teams/101354/ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.8.0\n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" + +#: sphinx_rtd_theme/breadcrumbs.html:45 sphinx_rtd_theme/breadcrumbs.html:47 +msgid "Edit on GitHub" +msgstr "Редактировать на GitHub" + +#: sphinx_rtd_theme/breadcrumbs.html:52 sphinx_rtd_theme/breadcrumbs.html:54 +msgid "Edit on Bitbucket" +msgstr "Редактировать на BitBucket" + +#: sphinx_rtd_theme/breadcrumbs.html:59 sphinx_rtd_theme/breadcrumbs.html:61 +msgid "Edit on GitLab" +msgstr "Редактировать на GitLab" + +#: sphinx_rtd_theme/breadcrumbs.html:64 sphinx_rtd_theme/breadcrumbs.html:66 +msgid "View page source" +msgstr "Просмотреть исходный код страницы" + +#: sphinx_rtd_theme/breadcrumbs.html:76 sphinx_rtd_theme/footer.html:5 +msgid "Next" +msgstr "Следующая" + +#: sphinx_rtd_theme/breadcrumbs.html:79 sphinx_rtd_theme/footer.html:8 +msgid "Previous" +msgstr "Предыдущая" + +#. Build is a noun, not a verb +#: sphinx_rtd_theme/footer.html:29 +msgid "Build" +msgstr "Сборка" + +#. the phrase "revision" comes from Git, referring to a commit +#: sphinx_rtd_theme/footer.html:35 +msgid "Revision" +msgstr "Ревизия" + +#: sphinx_rtd_theme/footer.html:40 +#, python-format +msgid "Last updated on %(last_updated)s." +msgstr "Последний раз обновлено %(last_updated)s." + +#. the variable "sphinx_web" is a link to the Sphinx project documentation +#. with +#. the text "Sphinx" +#: sphinx_rtd_theme/footer.html:52 +#, python-format +msgid "Built with %(sphinx_web)s using a" +msgstr "Собрано при помощи %(sphinx_web)s с использованием" + +#. "theme" refers to a theme for Sphinx, which alters the appearance of the +#. generated documenation +#: sphinx_rtd_theme/footer.html:54 +msgid "theme" +msgstr "темы," + +#. this is always used as "provided by Read the Docs", and should not imply +#. Read the Docs is an author of the generated documentation. +#: sphinx_rtd_theme/footer.html:56 +#, python-format +msgid "provided by %(readthedocs_web)s" +msgstr "предоставленной %(readthedocs_web)s" + +#: sphinx_rtd_theme/layout.html:85 +#, python-format +msgid "Search within %(docstitle)s" +msgstr "Поиск в %(docstitle)s" + +#: sphinx_rtd_theme/layout.html:93 +msgid "About these documents" +msgstr "Об этих документах" + +#: sphinx_rtd_theme/layout.html:96 +msgid "Index" +msgstr "Алфавитный указатель" + +#: sphinx_rtd_theme/layout.html:99 sphinx_rtd_theme/search.html:11 +msgid "Search" +msgstr "Поиск" + +#: sphinx_rtd_theme/layout.html:102 +msgid "Copyright" +msgstr "Авторские права" + +#: sphinx_rtd_theme/layout.html:134 +msgid "Logo" +msgstr "Логотип" + +#: sphinx_rtd_theme/search.html:31 +msgid "Please activate JavaScript to enable the search functionality." +msgstr "Активируйте JavaScript, чтобы использовать функционал поиска." + +#. Search is a noun, not a verb +#: sphinx_rtd_theme/search.html:39 +msgid "Search Results" +msgstr "Результаты поиска" + +#: sphinx_rtd_theme/search.html:41 +msgid "" +"Your search did not match any documents. Please make sure that all words are" +" spelled correctly and that you've selected enough categories." +msgstr "" +"По Вашему запросу не найдено результатов. Пожалуйста, проверьте, что все " +"слова написаны правильно, и Вы выбрали нужные категории." + +#: sphinx_rtd_theme/searchbox.html:4 +msgid "Search docs" +msgstr "Поиск в документации" + +#: sphinx_rtd_theme/versions.html:11 +msgid "Versions" +msgstr "Версии" + +#: sphinx_rtd_theme/versions.html:17 +msgid "Downloads" +msgstr "Загрузки" + +#. The phrase "Read the Docs" is not translated +#: sphinx_rtd_theme/versions.html:24 +msgid "On Read the Docs" +msgstr "На Read the Docs" + +#: sphinx_rtd_theme/versions.html:26 +msgid "Project Home" +msgstr "Домашняя страница проекта" + +#: sphinx_rtd_theme/versions.html:29 +msgid "Builds" +msgstr "Сборки" + +#~ msgid "Docs" +#~ msgstr "Документация" + +#~ msgid "Free document hosting provided by" +#~ msgstr "Бесплатный хостинг документов, предоставленный" diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/sphinx.pot b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/sphinx.pot new file mode 100644 index 00000000..e4e0783f --- /dev/null +++ b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/sphinx.pot @@ -0,0 +1,154 @@ +# Translations template for sphinx_rtd_theme. +# Copyright (C) 2021 ORGANIZATION +# This file is distributed under the same license as the sphinx_rtd_theme +# project. +# FIRST AUTHOR , 2021. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: sphinx_rtd_theme 0.5.0\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2021-01-04 13:48-0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.8.0\n" + +#: sphinx_rtd_theme/breadcrumbs.html:45 sphinx_rtd_theme/breadcrumbs.html:47 +msgid "Edit on GitHub" +msgstr "" + +#: sphinx_rtd_theme/breadcrumbs.html:52 sphinx_rtd_theme/breadcrumbs.html:54 +msgid "Edit on Bitbucket" +msgstr "" + +#: sphinx_rtd_theme/breadcrumbs.html:59 sphinx_rtd_theme/breadcrumbs.html:61 +msgid "Edit on GitLab" +msgstr "" + +#: sphinx_rtd_theme/breadcrumbs.html:64 sphinx_rtd_theme/breadcrumbs.html:66 +msgid "View page source" +msgstr "" + +#: sphinx_rtd_theme/breadcrumbs.html:76 sphinx_rtd_theme/footer.html:5 +msgid "Next" +msgstr "" + +#: sphinx_rtd_theme/breadcrumbs.html:79 sphinx_rtd_theme/footer.html:8 +msgid "Previous" +msgstr "" + +#: sphinx_rtd_theme/footer.html:20 +#, python-format +msgid "© Copyright %(copyright)s." +msgstr "" + +#: sphinx_rtd_theme/footer.html:22 +#, python-format +msgid "© Copyright %(copyright)s." +msgstr "" + +#. Build is a noun, not a verb +#: sphinx_rtd_theme/footer.html:29 +msgid "Build" +msgstr "" + +#. the phrase "revision" comes from Git, referring to a commit +#: sphinx_rtd_theme/footer.html:35 +msgid "Revision" +msgstr "" + +#: sphinx_rtd_theme/footer.html:40 +#, python-format +msgid "Last updated on %(last_updated)s." +msgstr "" + +#. the variable "sphinx_web" is a link to the Sphinx project documentation with +#. the text "Sphinx" +#: sphinx_rtd_theme/footer.html:52 +#, python-format +msgid "Built with %(sphinx_web)s using a" +msgstr "" + +#. "theme" refers to a theme for Sphinx, which alters the appearance of the +#. generated documenation +#: sphinx_rtd_theme/footer.html:54 +msgid "theme" +msgstr "" + +#. this is always used as "provided by Read the Docs", and should not imply +#. Read the Docs is an author of the generated documentation. +#: sphinx_rtd_theme/footer.html:56 +#, python-format +msgid "provided by %(readthedocs_web)s" +msgstr "" + +#: sphinx_rtd_theme/layout.html:85 +#, python-format +msgid "Search within %(docstitle)s" +msgstr "" + +#: sphinx_rtd_theme/layout.html:93 +msgid "About these documents" +msgstr "" + +#: sphinx_rtd_theme/layout.html:96 +msgid "Index" +msgstr "" + +#: sphinx_rtd_theme/layout.html:99 sphinx_rtd_theme/search.html:11 +msgid "Search" +msgstr "" + +#: sphinx_rtd_theme/layout.html:102 +msgid "Copyright" +msgstr "" + +#: sphinx_rtd_theme/layout.html:134 +msgid "Logo" +msgstr "" + +#: sphinx_rtd_theme/search.html:31 +msgid "Please activate JavaScript to enable the search functionality." +msgstr "" + +#. Search is a noun, not a verb +#: sphinx_rtd_theme/search.html:39 +msgid "Search Results" +msgstr "" + +#: sphinx_rtd_theme/search.html:41 +msgid "" +"Your search did not match any documents. Please make sure that all words " +"are spelled correctly and that you've selected enough categories." +msgstr "" + +#: sphinx_rtd_theme/searchbox.html:4 +msgid "Search docs" +msgstr "" + +#: sphinx_rtd_theme/versions.html:11 +msgid "Versions" +msgstr "" + +#: sphinx_rtd_theme/versions.html:17 +msgid "Downloads" +msgstr "" + +#. The phrase "Read the Docs" is not translated +#: sphinx_rtd_theme/versions.html:24 +msgid "On Read the Docs" +msgstr "" + +#: sphinx_rtd_theme/versions.html:26 +msgid "Project Home" +msgstr "" + +#: sphinx_rtd_theme/versions.html:29 +msgid "Builds" +msgstr "" + diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/sv/LC_MESSAGES/sphinx.mo b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/sv/LC_MESSAGES/sphinx.mo new file mode 100644 index 00000000..80046bdc Binary files /dev/null and b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/sv/LC_MESSAGES/sphinx.mo differ diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/sv/LC_MESSAGES/sphinx.po b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/sv/LC_MESSAGES/sphinx.po new file mode 100644 index 00000000..78d91a85 --- /dev/null +++ b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/sv/LC_MESSAGES/sphinx.po @@ -0,0 +1,156 @@ +# English translations for sphinx_rtd_theme. +# Copyright (C) 2019 ORGANIZATION +# This file is distributed under the same license as the sphinx_rtd_theme +# project. +# FIRST AUTHOR , 2019. +# +# Translators: +# Daniel Holmberg , 2020 +# +msgid "" +msgstr "" +"Project-Id-Version: sphinx_rtd_theme 0.4.3.dev0\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2021-01-04 13:48-0800\n" +"PO-Revision-Date: 2019-07-16 21:44+0000\n" +"Last-Translator: Daniel Holmberg , 2020\n" +"Language-Team: Swedish (https://www.transifex.com/readthedocs/teams/101354/sv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.8.0\n" +"Language: sv\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: sphinx_rtd_theme/breadcrumbs.html:45 sphinx_rtd_theme/breadcrumbs.html:47 +msgid "Edit on GitHub" +msgstr "Editera på GitHub" + +#: sphinx_rtd_theme/breadcrumbs.html:52 sphinx_rtd_theme/breadcrumbs.html:54 +msgid "Edit on Bitbucket" +msgstr "Editera på Bitbucket" + +#: sphinx_rtd_theme/breadcrumbs.html:59 sphinx_rtd_theme/breadcrumbs.html:61 +msgid "Edit on GitLab" +msgstr "Editera på GitLab" + +#: sphinx_rtd_theme/breadcrumbs.html:64 sphinx_rtd_theme/breadcrumbs.html:66 +msgid "View page source" +msgstr "Visa sidkälla" + +#: sphinx_rtd_theme/breadcrumbs.html:76 sphinx_rtd_theme/footer.html:5 +msgid "Next" +msgstr "Nästa" + +#: sphinx_rtd_theme/breadcrumbs.html:79 sphinx_rtd_theme/footer.html:8 +msgid "Previous" +msgstr "Tillbaka" + +#. Build is a noun, not a verb +#: sphinx_rtd_theme/footer.html:29 +msgid "Build" +msgstr "Bygg" + +#. the phrase "revision" comes from Git, referring to a commit +#: sphinx_rtd_theme/footer.html:35 +msgid "Revision" +msgstr "Ändra" + +#: sphinx_rtd_theme/footer.html:40 +#, python-format +msgid "Last updated on %(last_updated)s." +msgstr "Senast uppdaterad %(last_updated)s." + +#. the variable "sphinx_web" is a link to the Sphinx project documentation +#. with +#. the text "Sphinx" +#: sphinx_rtd_theme/footer.html:52 +#, python-format +msgid "Built with %(sphinx_web)s using a" +msgstr "Gjord med %(sphinx_web)s med hjälp av" + +#. "theme" refers to a theme for Sphinx, which alters the appearance of the +#. generated documenation +#: sphinx_rtd_theme/footer.html:54 +msgid "theme" +msgstr "tema" + +#. this is always used as "provided by Read the Docs", and should not imply +#. Read the Docs is an author of the generated documentation. +#: sphinx_rtd_theme/footer.html:56 +#, python-format +msgid "provided by %(readthedocs_web)s" +msgstr "erhållet av %(readthedocs_web)s" + +#: sphinx_rtd_theme/layout.html:85 +#, python-format +msgid "Search within %(docstitle)s" +msgstr "Sök i %(docstitle)s" + +#: sphinx_rtd_theme/layout.html:93 +msgid "About these documents" +msgstr "Om dessa dokument" + +#: sphinx_rtd_theme/layout.html:96 +msgid "Index" +msgstr "Index" + +#: sphinx_rtd_theme/layout.html:99 sphinx_rtd_theme/search.html:11 +msgid "Search" +msgstr "Sök" + +#: sphinx_rtd_theme/layout.html:102 +msgid "Copyright" +msgstr "Upphovsrätt" + +#: sphinx_rtd_theme/layout.html:134 +msgid "Logo" +msgstr "Logo" + +#: sphinx_rtd_theme/search.html:31 +msgid "Please activate JavaScript to enable the search functionality." +msgstr "" +"Var vänlig och aktivera JavaScript för att möjliggöra sökfunktionaliteten." + +#. Search is a noun, not a verb +#: sphinx_rtd_theme/search.html:39 +msgid "Search Results" +msgstr "Sökresultat" + +#: sphinx_rtd_theme/search.html:41 +msgid "" +"Your search did not match any documents. Please make sure that all words are" +" spelled correctly and that you've selected enough categories." +msgstr "" +"Din sökning gav inga träffar. Var vänlig och se till att alla ord är rätt " +"stavade och att du har valt tillräckligt många kategorier." + +#: sphinx_rtd_theme/searchbox.html:4 +msgid "Search docs" +msgstr "Sök i dokumentationen" + +#: sphinx_rtd_theme/versions.html:11 +msgid "Versions" +msgstr "Versioner" + +#: sphinx_rtd_theme/versions.html:17 +msgid "Downloads" +msgstr "Nerladdningar" + +#. The phrase "Read the Docs" is not translated +#: sphinx_rtd_theme/versions.html:24 +msgid "On Read the Docs" +msgstr "På Read the Docs" + +#: sphinx_rtd_theme/versions.html:26 +msgid "Project Home" +msgstr "Projekt Hem" + +#~ msgid "Docs" +#~ msgstr "Dokumentation" + +#~ msgid "Free document hosting provided by" +#~ msgstr "Gratis dokumentations hysning erhållen av" + +#~ msgid "Documentation Home" +#~ msgstr "Dokumentation Hem" diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/tr/LC_MESSAGES/sphinx.mo b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/tr/LC_MESSAGES/sphinx.mo new file mode 100644 index 00000000..cdb900df Binary files /dev/null and b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/tr/LC_MESSAGES/sphinx.mo differ diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/tr/LC_MESSAGES/sphinx.po b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/tr/LC_MESSAGES/sphinx.po new file mode 100644 index 00000000..3705a814 --- /dev/null +++ b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/tr/LC_MESSAGES/sphinx.po @@ -0,0 +1,146 @@ +# English translations for sphinx_rtd_theme. +# Copyright (C) 2019 ORGANIZATION +# This file is distributed under the same license as the sphinx_rtd_theme +# project. +# FIRST AUTHOR , 2019. +# +# Translators: +# BouRock, 2020 +# +msgid "" +msgstr "" +"Project-Id-Version: sphinx_rtd_theme 0.4.3.dev0\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2021-01-04 13:48-0800\n" +"PO-Revision-Date: 2019-07-16 21:44+0000\n" +"Last-Translator: BouRock, 2020\n" +"Language-Team: Turkish (https://www.transifex.com/readthedocs/teams/101354/tr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.8.0\n" +"Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: sphinx_rtd_theme/breadcrumbs.html:45 sphinx_rtd_theme/breadcrumbs.html:47 +msgid "Edit on GitHub" +msgstr "GitHub'da Düzenle" + +#: sphinx_rtd_theme/breadcrumbs.html:52 sphinx_rtd_theme/breadcrumbs.html:54 +msgid "Edit on Bitbucket" +msgstr "Bitbucket'ta Düzenle" + +#: sphinx_rtd_theme/breadcrumbs.html:59 sphinx_rtd_theme/breadcrumbs.html:61 +msgid "Edit on GitLab" +msgstr "GitLab'ta Düzenle" + +#: sphinx_rtd_theme/breadcrumbs.html:64 sphinx_rtd_theme/breadcrumbs.html:66 +msgid "View page source" +msgstr "Sayfa kaynağını görüntüle" + +#: sphinx_rtd_theme/breadcrumbs.html:76 sphinx_rtd_theme/footer.html:5 +msgid "Next" +msgstr "Sonraki" + +#: sphinx_rtd_theme/breadcrumbs.html:79 sphinx_rtd_theme/footer.html:8 +msgid "Previous" +msgstr "Önceki" + +#. Build is a noun, not a verb +#: sphinx_rtd_theme/footer.html:29 +msgid "Build" +msgstr "Oluşturma" + +#. the phrase "revision" comes from Git, referring to a commit +#: sphinx_rtd_theme/footer.html:35 +msgid "Revision" +msgstr "Gözden geçirme" + +#: sphinx_rtd_theme/footer.html:40 +#, python-format +msgid "Last updated on %(last_updated)s." +msgstr "Son olarak %(last_updated)s tarihinde güncellendi." + +#. "theme" refers to a theme for Sphinx, which alters the appearance of the +#. generated documenation +#: sphinx_rtd_theme/footer.html:54 +msgid "theme" +msgstr "tema" + +#. this is always used as "provided by Read the Docs", and should not imply +#. Read the Docs is an author of the generated documentation. +#: sphinx_rtd_theme/footer.html:56 +#, python-format +msgid "provided by %(readthedocs_web)s" +msgstr "kullanılarak %(readthedocs_web)s tarafından sağlanmasıyla oluşturuldu" + +#: sphinx_rtd_theme/layout.html:85 +#, python-format +msgid "Search within %(docstitle)s" +msgstr "%(docstitle)s içinde ara" + +#: sphinx_rtd_theme/layout.html:93 +msgid "About these documents" +msgstr "Bu belgeler hakkında" + +#: sphinx_rtd_theme/layout.html:96 +msgid "Index" +msgstr "Dizin" + +#: sphinx_rtd_theme/layout.html:99 sphinx_rtd_theme/search.html:11 +msgid "Search" +msgstr "Arama" + +#: sphinx_rtd_theme/layout.html:102 +msgid "Copyright" +msgstr "Telif hakkı" + +#: sphinx_rtd_theme/layout.html:134 +msgid "Logo" +msgstr "Logo" + +#: sphinx_rtd_theme/search.html:31 +msgid "Please activate JavaScript to enable the search functionality." +msgstr "" +"Arama işlevselliğini etkinleştirmek için lütfen JavaScript'i etkinleştirin." + +#. Search is a noun, not a verb +#: sphinx_rtd_theme/search.html:39 +msgid "Search Results" +msgstr "Arama Sonuçları" + +#: sphinx_rtd_theme/search.html:41 +msgid "" +"Your search did not match any documents. Please make sure that all words are" +" spelled correctly and that you've selected enough categories." +msgstr "" +"Aramanız hiçbir belgeyle eşleşmedi. Lütfen tüm kelimelerin doğru " +"yazıldığından ve yeterli kategori seçtiğinizden emin olun." + +#: sphinx_rtd_theme/searchbox.html:4 +msgid "Search docs" +msgstr "Belgeleri arayın" + +#: sphinx_rtd_theme/versions.html:11 +msgid "Versions" +msgstr "Sürümler" + +#: sphinx_rtd_theme/versions.html:17 +msgid "Downloads" +msgstr "İndirmeler" + +#. The phrase "Read the Docs" is not translated +#: sphinx_rtd_theme/versions.html:24 +msgid "On Read the Docs" +msgstr "Read the Docs Üzerinde" + +#: sphinx_rtd_theme/versions.html:26 +msgid "Project Home" +msgstr "Proje Ana Sayfa" + +#: sphinx_rtd_theme/versions.html:29 +msgid "Builds" +msgstr "Oluşturmalar" + +#~ msgid "Free document hosting provided by" +#~ msgstr "Ücretsiz belge barındırmayı sağlayan" diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/zh_CN/LC_MESSAGES/sphinx.mo b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/zh_CN/LC_MESSAGES/sphinx.mo new file mode 100644 index 00000000..ada7f0a6 Binary files /dev/null and b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/zh_CN/LC_MESSAGES/sphinx.mo differ diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/zh_CN/LC_MESSAGES/sphinx.po b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/zh_CN/LC_MESSAGES/sphinx.po new file mode 100644 index 00000000..26dfb322 --- /dev/null +++ b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/locale/zh_CN/LC_MESSAGES/sphinx.po @@ -0,0 +1,150 @@ +# English translations for sphinx_rtd_theme. +# Copyright (C) 2019 ORGANIZATION +# This file is distributed under the same license as the sphinx_rtd_theme +# project. +# FIRST AUTHOR , 2019. +# +# Translators: +# Anthony , 2020 +# 王赛 , 2020 +# +msgid "" +msgstr "" +"Project-Id-Version: sphinx_rtd_theme 0.4.3.dev0\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2021-01-04 13:48-0800\n" +"PO-Revision-Date: 2019-07-16 21:44+0000\n" +"Last-Translator: 王赛 , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/readthedocs/teams/101354/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.8.0\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: sphinx_rtd_theme/breadcrumbs.html:45 sphinx_rtd_theme/breadcrumbs.html:47 +msgid "Edit on GitHub" +msgstr "在 GitHub 上修改" + +#: sphinx_rtd_theme/breadcrumbs.html:52 sphinx_rtd_theme/breadcrumbs.html:54 +msgid "Edit on Bitbucket" +msgstr "在 Bitbucket 上修改" + +#: sphinx_rtd_theme/breadcrumbs.html:59 sphinx_rtd_theme/breadcrumbs.html:61 +msgid "Edit on GitLab" +msgstr "在 GitLab 上修改" + +#: sphinx_rtd_theme/breadcrumbs.html:64 sphinx_rtd_theme/breadcrumbs.html:66 +msgid "View page source" +msgstr "查看页面源码" + +#: sphinx_rtd_theme/breadcrumbs.html:76 sphinx_rtd_theme/footer.html:5 +msgid "Next" +msgstr "下一页" + +#: sphinx_rtd_theme/breadcrumbs.html:79 sphinx_rtd_theme/footer.html:8 +msgid "Previous" +msgstr "上一页" + +#. Build is a noun, not a verb +#: sphinx_rtd_theme/footer.html:29 +msgid "Build" +msgstr "构建" + +#: sphinx_rtd_theme/footer.html:40 +#, python-format +msgid "Last updated on %(last_updated)s." +msgstr "最后更新时间 %(last_updated)s。" + +#. the variable "sphinx_web" is a link to the Sphinx project documentation +#. with +#. the text "Sphinx" +#: sphinx_rtd_theme/footer.html:52 +#, python-format +msgid "Built with %(sphinx_web)s using a" +msgstr "利用 %(sphinx_web)s 构建,使用了 " + +#. "theme" refers to a theme for Sphinx, which alters the appearance of the +#. generated documenation +#: sphinx_rtd_theme/footer.html:54 +msgid "theme" +msgstr "主题" + +#. this is always used as "provided by Read the Docs", and should not imply +#. Read the Docs is an author of the generated documentation. +#: sphinx_rtd_theme/footer.html:56 +#, python-format +msgid "provided by %(readthedocs_web)s" +msgstr "由 %(readthedocs_web)s开发" + +#: sphinx_rtd_theme/layout.html:85 +#, python-format +msgid "Search within %(docstitle)s" +msgstr "在 %(docstitle)s中搜索" + +#: sphinx_rtd_theme/layout.html:93 +msgid "About these documents" +msgstr "关于此文档" + +#: sphinx_rtd_theme/layout.html:96 +msgid "Index" +msgstr "索引" + +#: sphinx_rtd_theme/layout.html:99 sphinx_rtd_theme/search.html:11 +msgid "Search" +msgstr "搜索" + +#: sphinx_rtd_theme/layout.html:102 +msgid "Copyright" +msgstr "版权所有" + +#: sphinx_rtd_theme/layout.html:134 +msgid "Logo" +msgstr "Logo" + +#: sphinx_rtd_theme/search.html:31 +msgid "Please activate JavaScript to enable the search functionality." +msgstr "请启用 JavaScript 以便使用搜索功能" + +#. Search is a noun, not a verb +#: sphinx_rtd_theme/search.html:39 +msgid "Search Results" +msgstr "搜索结果" + +#: sphinx_rtd_theme/search.html:41 +msgid "" +"Your search did not match any documents. Please make sure that all words are" +" spelled correctly and that you've selected enough categories." +msgstr "您的搜索没有匹配到任何文档。请确保所有单词拼写正确,并选择了足够多的类别。" + +#: sphinx_rtd_theme/searchbox.html:4 +msgid "Search docs" +msgstr "在文档中搜索" + +#: sphinx_rtd_theme/versions.html:11 +msgid "Versions" +msgstr "版本列表" + +#: sphinx_rtd_theme/versions.html:17 +msgid "Downloads" +msgstr "下载链接" + +#. The phrase "Read the Docs" is not translated +#: sphinx_rtd_theme/versions.html:24 +msgid "On Read the Docs" +msgstr "托管于 Read the Docs" + +#: sphinx_rtd_theme/versions.html:26 +msgid "Project Home" +msgstr "项目首页" + +#: sphinx_rtd_theme/versions.html:29 +msgid "Builds" +msgstr "构建" + +#~ msgid "Docs" +#~ msgstr "文档" + +#~ msgid "Free document hosting provided by" +#~ msgstr "此文档免费托管于" diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/search.html b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/search.html new file mode 100644 index 00000000..e519e30a --- /dev/null +++ b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/search.html @@ -0,0 +1,56 @@ +{# + basic/search.html + ~~~~~~~~~~~~~~~~~ + + Template for the search page. + + :copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS. + :license: BSD, see https://github.com/sphinx-doc/sphinx/blob/master/LICENSE for details. +#} +{%- extends "layout.html" %} +{% set title = _('Search') %} +{% set display_vcs_links = False %} +{%- block scripts %} + {{ super() }} + + +{%- endblock %} +{% block footer %} + + {# this is used when loading the search index using $.ajax fails, + such as on Chrome for documents on localhost #} + + {{ super() }} +{% endblock %} +{% block body %} + + + {% if search_performed %} + {# Translators: Search is a noun, not a verb #} +

{{ _('Search Results') }}

+ {% if not search_results %} +

{{ _('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.') }}

+ {% endif %} + {% endif %} +
+ {% if search_results %} +
    + {% for href, caption, context in search_results %} +
  • + {{ caption }} +

    {{ context|e }}

    +
  • + {% endfor %} +
+ {% endif %} +
+{% endblock %} diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/searchbox.html b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/searchbox.html new file mode 100644 index 00000000..bc3ee5f0 --- /dev/null +++ b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/searchbox.html @@ -0,0 +1,9 @@ +{%- if 'singlehtml' not in builder %} +
+
+ + + +
+
+{%- endif %} diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/badge_only.css b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/badge_only.css new file mode 100644 index 00000000..e380325b --- /dev/null +++ b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/badge_only.css @@ -0,0 +1 @@ +.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} \ No newline at end of file diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Bold.woff b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Bold.woff new file mode 100644 index 00000000..6cb60000 Binary files /dev/null and b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Bold.woff differ diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Bold.woff2 b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Bold.woff2 new file mode 100644 index 00000000..7059e231 Binary files /dev/null and b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Bold.woff2 differ diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Regular.woff b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Regular.woff new file mode 100644 index 00000000..f815f63f Binary files /dev/null and b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Regular.woff differ diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Regular.woff2 b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Regular.woff2 new file mode 100644 index 00000000..f2c76e5b Binary files /dev/null and b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Regular.woff2 differ diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.eot b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.eot new file mode 100644 index 00000000..e9f60ca9 Binary files /dev/null and b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.eot differ diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.svg b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.svg new file mode 100644 index 00000000..855c845e --- /dev/null +++ b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.ttf b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.ttf new file mode 100644 index 00000000..35acda2f Binary files /dev/null and b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.ttf differ diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.woff b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.woff new file mode 100644 index 00000000..400014a4 Binary files /dev/null and b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.woff differ diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.woff2 b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.woff2 new file mode 100644 index 00000000..4d13fc60 Binary files /dev/null and b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.woff2 differ diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/lato-bold-italic.woff b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/lato-bold-italic.woff new file mode 100644 index 00000000..88ad05b9 Binary files /dev/null and b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/lato-bold-italic.woff differ diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/lato-bold-italic.woff2 b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/lato-bold-italic.woff2 new file mode 100644 index 00000000..c4e3d804 Binary files /dev/null and b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/lato-bold-italic.woff2 differ diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/lato-bold.woff b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/lato-bold.woff new file mode 100644 index 00000000..c6dff51f Binary files /dev/null and b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/lato-bold.woff differ diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/lato-bold.woff2 b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/lato-bold.woff2 new file mode 100644 index 00000000..bb195043 Binary files /dev/null and b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/lato-bold.woff2 differ diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/lato-normal-italic.woff b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/lato-normal-italic.woff new file mode 100644 index 00000000..76114bc0 Binary files /dev/null and b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/lato-normal-italic.woff differ diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/lato-normal-italic.woff2 b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/lato-normal-italic.woff2 new file mode 100644 index 00000000..3404f37e Binary files /dev/null and b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/lato-normal-italic.woff2 differ diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/lato-normal.woff b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/lato-normal.woff new file mode 100644 index 00000000..ae1307ff Binary files /dev/null and b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/lato-normal.woff differ diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/lato-normal.woff2 b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/lato-normal.woff2 new file mode 100644 index 00000000..3bf98433 Binary files /dev/null and b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/fonts/lato-normal.woff2 differ diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/theme.css b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/theme.css new file mode 100644 index 00000000..8cd4f101 --- /dev/null +++ b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/css/theme.css @@ -0,0 +1,4 @@ +html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a,.wy-menu-vertical li.current>a span.toctree-expand:before,.wy-menu-vertical li.on a,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li span.toctree-expand:before,.wy-nav-top a,.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li span.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p.caption .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a span.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a span.fa-pull-left.toctree-expand,.wy-menu-vertical li span.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p.caption .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a span.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a span.fa-pull-right.toctree-expand,.wy-menu-vertical li span.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p.caption .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a span.pull-left.toctree-expand,.wy-menu-vertical li.on a span.pull-left.toctree-expand,.wy-menu-vertical li span.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p.caption .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a span.pull-right.toctree-expand,.wy-menu-vertical li.on a span.pull-right.toctree-expand,.wy-menu-vertical li span.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li span.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li span.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li span.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li a span.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li span.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p.caption .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a span.toctree-expand,.btn .wy-menu-vertical li.on a span.toctree-expand,.btn .wy-menu-vertical li span.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p.caption .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a span.toctree-expand,.nav .wy-menu-vertical li.on a span.toctree-expand,.nav .wy-menu-vertical li span.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p.caption .btn .headerlink,.rst-content p.caption .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn span.toctree-expand,.wy-menu-vertical li.current>a .btn span.toctree-expand,.wy-menu-vertical li.current>a .nav span.toctree-expand,.wy-menu-vertical li .nav span.toctree-expand,.wy-menu-vertical li.on a .btn span.toctree-expand,.wy-menu-vertical li.on a .nav span.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p.caption .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li span.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p.caption .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li span.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p.caption .btn .fa-large.headerlink,.rst-content p.caption .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn span.fa-large.toctree-expand,.wy-menu-vertical li .nav span.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p.caption .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li span.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p.caption .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li span.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p.caption .btn .fa-spin.headerlink,.rst-content p.caption .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn span.fa-spin.toctree-expand,.wy-menu-vertical li .nav span.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p.caption .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li span.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p.caption .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li span.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p.caption .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li span.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p.caption .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini span.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol li,.rst-content ol.arabic li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content ol.arabic li p:last-child,.rst-content ol.arabic li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol li ul li,.rst-content ol.arabic li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs li{display:inline-block}.wy-breadcrumbs li.wy-breadcrumbs-aside{float:right}.wy-breadcrumbs li a{display:inline-block;padding:5px}.wy-breadcrumbs li a:first-child{padding-left:0}.rst-content .wy-breadcrumbs li tt,.wy-breadcrumbs li .rst-content tt,.wy-breadcrumbs li code{padding:5px;border:none;background:none}.rst-content .wy-breadcrumbs li tt.literal,.wy-breadcrumbs li .rst-content tt.literal,.wy-breadcrumbs li code.literal{color:#404040}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li span.toctree-expand{display:block;float:left;margin-left:-1.2em;font-size:.8em;line-height:1.6em;color:#4d4d4d}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover span.toctree-expand,.wy-menu-vertical li.on a:hover span.toctree-expand{color:grey}.wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand{display:block;font-size:.8em;line-height:1.6em;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover span.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 span.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 span.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover span.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active span.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p.caption .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p.caption .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version span.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content img{max-width:100%;height:auto}.rst-content div.figure{margin-bottom:24px}.rst-content div.figure p.caption{font-style:italic}.rst-content div.figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp{user-select:none;pointer-events:none}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink{visibility:hidden;font-size:14px}.rst-content .code-block-caption .headerlink:after,.rst-content .toctree-wrapper>p.caption .headerlink:after,.rst-content dl dt .headerlink:after,.rst-content h1 .headerlink:after,.rst-content h2 .headerlink:after,.rst-content h3 .headerlink:after,.rst-content h4 .headerlink:after,.rst-content h5 .headerlink:after,.rst-content h6 .headerlink:after,.rst-content p.caption .headerlink:after,.rst-content table>caption .headerlink:after{content:"\f0c1";font-family:FontAwesome}.rst-content .code-block-caption:hover .headerlink:after,.rst-content .toctree-wrapper>p.caption:hover .headerlink:after,.rst-content dl dt:hover .headerlink:after,.rst-content h1:hover .headerlink:after,.rst-content h2:hover .headerlink:after,.rst-content h3:hover .headerlink:after,.rst-content h4:hover .headerlink:after,.rst-content h5:hover .headerlink:after,.rst-content h6:hover .headerlink:after,.rst-content p.caption:hover .headerlink:after,.rst-content table>caption:hover .headerlink:after{visibility:visible}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .hlist{width:100%}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl dt span.classifier:before{content:" : "}html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.field-list>dt:after,html.writer-html5 .rst-content dl.footnote>dt:after{content:":"}html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.footnote>dt>span.brackets{margin-right:.5rem}html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{font-style:italic}html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.footnote>dd p,html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{font-size:inherit;line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dl:not(.field-list)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dl:not(.field-list)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code,html.writer-html4 .rst-content dl:not(.docutils) tt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/js/badge_only.js b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/js/badge_only.js new file mode 100644 index 00000000..526d7234 --- /dev/null +++ b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/js/badge_only.js @@ -0,0 +1 @@ +!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=4)}({4:function(e,t,r){}}); \ No newline at end of file diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/js/html5shiv-printshiv.min.js b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/js/html5shiv-printshiv.min.js new file mode 100644 index 00000000..2b43bd06 --- /dev/null +++ b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/js/html5shiv-printshiv.min.js @@ -0,0 +1,4 @@ +/** +* @preserve HTML5 Shiv 3.7.3-pre | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed +*/ +!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/js/html5shiv.min.js b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/js/html5shiv.min.js new file mode 100644 index 00000000..cd1c674f --- /dev/null +++ b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/js/html5shiv.min.js @@ -0,0 +1,4 @@ +/** +* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed +*/ +!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/js/theme.js b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/js/theme.js new file mode 100644 index 00000000..839d07e2 --- /dev/null +++ b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/sphinx_rtd_theme/static/js/theme.js @@ -0,0 +1 @@ +!function(n){var e={};function t(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return n[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=n,t.c=e,t.d=function(n,e,i){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:i})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var o in n)t.d(i,o,function(e){return n[e]}.bind(null,o));return i},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=0)}([function(n,e,t){t(1),n.exports=t(3)},function(n,e,t){(function(){var e="undefined"!=typeof window?window.jQuery:t(2);n.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(n){var t=this;void 0===n&&(n=!0),t.isRunning||(t.isRunning=!0,e((function(e){t.init(e),t.reset(),t.win.on("hashchange",t.reset),n&&t.win.on("scroll",(function(){t.linkScroll||t.winScroll||(t.winScroll=!0,requestAnimationFrame((function(){t.onScroll()})))})),t.win.on("resize",(function(){t.winResize||(t.winResize=!0,requestAnimationFrame((function(){t.onResize()})))})),t.onResize()})))},enableSticky:function(){this.enable(!0)},init:function(n){n(document);var e=this;this.navBar=n("div.wy-side-scroll:first"),this.win=n(window),n(document).on("click","[data-toggle='wy-nav-top']",(function(){n("[data-toggle='wy-nav-shift']").toggleClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift")})).on("click",".wy-menu-vertical .current ul li a",(function(){var t=n(this);n("[data-toggle='wy-nav-shift']").removeClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift"),e.toggleCurrent(t),e.hashChange()})).on("click","[data-toggle='rst-current-version']",(function(){n("[data-toggle='rst-versions']").toggleClass("shift-up")})),n("table.docutils:not(.field-list,.footnote,.citation)").wrap("
"),n("table.docutils.footnote").wrap("
"),n("table.docutils.citation").wrap("
"),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n(''),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}t.length>0&&($(".wy-menu-vertical .current").removeClass("current"),t.addClass("current"),t.closest("li.toctree-l1").addClass("current"),t.closest("li.toctree-l1").parent().addClass("current"),t.closest("li.toctree-l1").addClass("current"),t.closest("li.toctree-l2").addClass("current"),t.closest("li.toctree-l3").addClass("current"),t.closest("li.toctree-l4").addClass("current"),t.closest("li.toctree-l5").addClass("current"),t[0].scrollIntoView())}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current"),e.siblings().find("li.current").removeClass("current"),e.find("> ul li.current").removeClass("current"),e.toggleClass("current")}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t + + Read the Docs + v: {{ current_version }} + + +
+
+
{{ _('Versions') }}
+ {% for slug, url in versions %} +
{{ slug }}
+ {% endfor %} +
+
+
{{ _('Downloads') }}
+ {% for type, url in downloads %} +
{{ type }}
+ {% endfor %} +
+
+ {# Translators: The phrase "Read the Docs" is not translated #} +
{{ _('On Read the Docs') }}
+
+ {{ _('Project Home') }} +
+
+ {{ _('Builds') }} +
+
+
+ +{% endif %} diff --git a/Sources/GuideSphinx/Orchestrator.rst b/Sources/GuideSphinx/Orchestrator.rst deleted file mode 100644 index dbae85b5..00000000 --- a/Sources/GuideSphinx/Orchestrator.rst +++ /dev/null @@ -1,26 +0,0 @@ -.. pyOpenRPA documentation master file, created by - sphinx-quickstart on Sat Dec 19 23:59:00 2020. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - -Welcome to pyOpenRPA's documentation! -===================================== - -.. toctree:: - :maxdepth: 2 - :caption: Contents: - - - -Indices and tables -===================================== - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` - - -pyOpenRPA Orchestrator -===================================== -.. automodule:: pyOpenRPA.Orchestrator.__Orchestrator__ - :members: diff --git a/Sources/GuideSphinx/Orchestrator/HowToStart.rst b/Sources/GuideSphinx/Orchestrator/HowToStart.rst new file mode 100644 index 00000000..e704cc56 --- /dev/null +++ b/Sources/GuideSphinx/Orchestrator/HowToStart.rst @@ -0,0 +1,9 @@ +************************ +How to start +************************ + +Start configuration example + +.. include:: ../../../Orchestrator/OrchestratorSettings.py + :literal: + \ No newline at end of file diff --git a/Sources/GuideSphinx/Orchestrator/Orchestrator.rst b/Sources/GuideSphinx/Orchestrator/Orchestrator.rst new file mode 100644 index 00000000..b94fc25c --- /dev/null +++ b/Sources/GuideSphinx/Orchestrator/Orchestrator.rst @@ -0,0 +1,81 @@ +************************ +Description +************************ + +pyOpenRPA Orchestrator is the executable process. + +The features of the orchestrator is: +- Centralized/decentralized user control interface (applicable and for business users and for technical users). Web based, support desktop, tablet, phone. +- Automatized robots control (customized algorithms, robots scheduling) +- Source code mega flexibility: Light Orchestrator architecture is good for own customization + +Global settings dict concept +################################## +pyOpenRPA project is complex tool which consist of several executable modules such as Robot, Orchestrator, Studio, + +Because of module compexity, we use 1 init arg - inGSettings +inGSettings is a complex dictionary which has all reqired parameters for the module execution. + +The description of the GSettings you can find in executable module details. + + +Orchestrator how to configure +################################## + + +To init pyOpenRPA Orchestrator instance use script: + +from pyOpenRPA import Orchestrator # Import orchestrator main +gSettings = SettingsTemplate.Create(inModeStr="BASIC") # Create GSettings with basic configuration +Orchestrator.Orchestrator(inGSettings=gSettings) # Call the orchestrator def + +gSettings structure + +:ref:`gSettingsTemplate`. + + + +Orchestrator architecture +################################## +Orchestrator has several source code components: +- User/robot activity consolidated queue single thread (Processor) +- User/robot activity asynchonus many threads (Processor) +- Scheduler single thread (main) +- RDP keep active many thread +- Autocleaner single thread +- GUI keep active single thread +- HTTP web server single thread (create user socket threads) +- + +Below you can find more information about all of the component. + +Component Processor +################################## +Sync - Append activity list to consolidated processor queue. Execution goes sequency by the activity list order + +Async - Create New thread to execute the activity list + +- Activity list +Liast of the activity item + +- Activity item +Activity item is universal mechanism to execute different algorythms from any sources. +The core feature of the Activity is to call python defs with args and kwargs. +If you need to init do some activity you can write some python def, then create Activity item with current def. +ATTENTION: In some cases (such as web transmition), when you can't transmit python def as object you can use symbolic names for python defs. It is apply you to init all of you want from the web UI. + +?Why i cant transmit python def from the web +Because the WEB space is not the Python executable space. Interaction between it spaces create by JSON protocol. So, we know than JSON apply int, float, str, bool, None, list, dict - that is all. +{ + "Def":"DefAliasTest", # def link or def alias (look gSettings["Processor"]["AliasDefDict"]) + "ArgList":[1,2,3], # Args list + "ArgDict":{"ttt":1,"222":2,"dsd":3}, # Args dictionary + "ArgGSettings": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList) + "ArgLogger": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList) +}# Pay attention! Do not left comma symbol after the end of the dict - it can be interpretated like a turple.. + + +pyOpenRPA Orchestrator +################################## +.. automodule:: pyOpenRPA.Orchestrator.__Orchestrator__ + :members: \ No newline at end of file diff --git a/Sources/GuideSphinx/Orchestrator/gSettingsTemplate.rst b/Sources/GuideSphinx/Orchestrator/gSettingsTemplate.rst new file mode 100644 index 00000000..a99645f5 --- /dev/null +++ b/Sources/GuideSphinx/Orchestrator/gSettingsTemplate.rst @@ -0,0 +1,9 @@ +.. _gSettingsTemplate: +************************ +gSettings Template +************************ + +gSettings structure + +.. include:: ../../pyOpenRPA/Orchestrator/SettingsTemplate.py + :literal: \ No newline at end of file diff --git a/Sources/GuideSphinx/Robot/Robot.rst b/Sources/GuideSphinx/Robot/Robot.rst new file mode 100644 index 00000000..f2017b64 --- /dev/null +++ b/Sources/GuideSphinx/Robot/Robot.rst @@ -0,0 +1,11 @@ +************************ +Description +************************ + +pyOpenRPA Robot is the python package. + + +pyOpenRPA Robot +################################## +.. automodule:: pyOpenRPA.Robot.UIDesktop + :members: \ No newline at end of file diff --git a/Sources/GuideSphinx/Studio/Studio.rst b/Sources/GuideSphinx/Studio/Studio.rst new file mode 100644 index 00000000..3f4cf4e0 --- /dev/null +++ b/Sources/GuideSphinx/Studio/Studio.rst @@ -0,0 +1,5 @@ +************************ +Description +************************ + +pyOpenRPA Studio is the executable process. diff --git a/Sources/GuideSphinx/conf.py b/Sources/GuideSphinx/conf.py index 3e578d51..c2a7a4b2 100644 --- a/Sources/GuideSphinx/conf.py +++ b/Sources/GuideSphinx/conf.py @@ -12,6 +12,7 @@ # import os import sys +import sphinx_rtd_theme sys.path.insert(0, os.path.abspath(r'..')) @@ -30,7 +31,7 @@ release = 'v1.2.0' # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = ['sphinx.ext.todo', 'sphinx.ext.viewcode', 'sphinx.ext.autodoc'] +extensions = ['sphinx.ext.todo', 'sphinx.ext.viewcode', 'sphinx.ext.autodoc', "sphinx_rtd_theme",] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] @@ -47,7 +48,7 @@ exclude_patterns = [] # a list of builtin themes. # #html_theme = 'alabaster' -html_theme = "furo" +html_theme = "sphinx_rtd_theme" # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, diff --git a/Sources/GuideSphinx/index.rst b/Sources/GuideSphinx/index.rst index 40c44ce8..d91941ab 100644 --- a/Sources/GuideSphinx/index.rst +++ b/Sources/GuideSphinx/index.rst @@ -8,101 +8,32 @@ Welcome to pyOpenRPA's documentation! .. toctree:: :maxdepth: 2 - :caption: Contents: + :caption: GENERAL :glob: :titlesonly: - Orchestrator + * - -Indices and tables -===================================== - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` - - -pyOpenRPA Orchestrator -===================================== -.. automodule:: pyOpenRPA.Orchestrator.__Orchestrator__ - :members: - +.. toctree:: + :maxdepth: 2 + :caption: ROBOT + :glob: + :titlesonly: + Robot/* +.. toctree:: + :maxdepth: 2 + :caption: STUDIO + :glob: + :titlesonly: + Studio/* + +.. toctree:: + :maxdepth: 2 + :caption: ORCHESTRATOR + :glob: + :titlesonly: -Orchestrator description -========================= - -pyOpenRPA Orchestrator is the executable process. - -The features of the orchestrator is: -- Centralized/decentralized user control interface (applicable and for business users and for technical users). Web based, support desktop, tablet, phone. -- Automatized robots control (customized algorithms, robots scheduling) -- Source code mega flexibility: Light Orchestrator architecture is good for own customization - -Global settings dict concept -=============================== -pyOpenRPA project is complex tool which consist of several executable modules such as Robot, Orchestrator, Studio, - -Because of module compexity, we use 1 init arg - inGSettings -inGSettings is a complex dictionary which has all reqired parameters for the module execution. - -The description of the GSettings you can find in executable module details. - - -Orchestrator how to configure -============================== - - -To init pyOpenRPA Orchestrator instance use script: - -from pyOpenRPA import Orchestrator # Import orchestrator main -gSettings = SettingsTemplate.Create(inModeStr="BASIC") # Create GSettings with basic configuration -Orchestrator.Orchestrator(inGSettings=gSettings) # Call the orchestrator def - -gSettings structure !LINK! - - - -Orchestrator architecture -============================ -Orchestrator has several source code components: -- User/robot activity consolidated queue single thread (Processor) -- User/robot activity asynchonus many threads (Processor) -- Scheduler single thread (main) -- RDP keep active many thread -- Autocleaner single thread -- GUI keep active single thread -- HTTP web server single thread (create user socket threads) -- - -Below you can find more information about all of the component. - -Component Processor -========================= -Sync - Append activity list to consolidated processor queue. Execution goes sequency by the activity list order - -Async - Create New thread to execute the activity list - -- Activity list -Liast of the activity item - -- Activity item -Activity item is universal mechanism to execute different algorythms from any sources. -The core feature of the Activity is to call python defs with args and kwargs. -If you need to init do some activity you can write some python def, then create Activity item with current def. -ATTENTION: In some cases (such as web transmition), when you can't transmit python def as object you can use symbolic names for python defs. It is apply you to init all of you want from the web UI. - -?Why i cant transmit python def from the web -Because the WEB space is not the Python executable space. Interaction between it spaces create by JSON protocol. So, we know than JSON apply int, float, str, bool, None, list, dict - that is all. -{ - "Def":"DefAliasTest", # def link or def alias (look gSettings["Processor"]["AliasDefDict"]) - "ArgList":[1,2,3], # Args list - "ArgDict":{"ttt":1,"222":2,"dsd":3}, # Args dictionary - "ArgGSettings": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList) - "ArgLogger": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList) -}# Pay attention! Do not left comma symbol after the end of the dict - it can be interpretated like a turple.. - - + Orchestrator/* \ No newline at end of file diff --git a/Sources/GuideSphinx/make_ENG_Guide.bat b/Sources/GuideSphinx/make_ENG_Guide.bat index 5b200958..4797fd2c 100644 --- a/Sources/GuideSphinx/make_ENG_Guide.bat +++ b/Sources/GuideSphinx/make_ENG_Guide.bat @@ -1,5 +1,9 @@ cd %~dp0 @ECHO OFF +RD /S /Q "%~dp0..\..\Wiki\ENG_Guide\doctrees" +RD /S /Q "%~dp0..\..\Wiki\ENG_Guide\html" +RD /S /Q "%~dp0..\..\Wiki\ENG_Guide\markdown" + set PATH=%PATH%;%~dp0..\..\Resources\WPy64-3720\python-3.7.2.amd64\Scripts set PYTHONPATH=%PYTHONPATH%;%~dp0..\..\Resources\WPy64-3720\python-3.7.2.amd64\Scripts pushd %~dp0 @@ -12,8 +16,6 @@ if "%SPHINXBUILD%" == "" ( set SOURCEDIR=%~dp0 set BUILDDIR=..\..\Wiki\ENG_Guide -if "%1" == "" goto help - %SPHINXBUILD% >NUL 2>NUL if errorlevel 9009 ( echo. @@ -27,7 +29,7 @@ if errorlevel 9009 ( exit /b 1 ) -%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +%SPHINXBUILD% -M html %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% %SPHINXBUILD% -M markdown %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% goto end diff --git a/Wiki/ENG_Guide/doctrees/Orchestrator.doctree b/Wiki/ENG_Guide/doctrees/Orchestrator.doctree deleted file mode 100644 index 4e328dde..00000000 Binary files a/Wiki/ENG_Guide/doctrees/Orchestrator.doctree and /dev/null differ diff --git a/Wiki/ENG_Guide/doctrees/Orchestrator/HowToStart.doctree b/Wiki/ENG_Guide/doctrees/Orchestrator/HowToStart.doctree new file mode 100644 index 00000000..24117cde Binary files /dev/null and b/Wiki/ENG_Guide/doctrees/Orchestrator/HowToStart.doctree differ diff --git a/Wiki/ENG_Guide/doctrees/Orchestrator/Orchestrator.doctree b/Wiki/ENG_Guide/doctrees/Orchestrator/Orchestrator.doctree new file mode 100644 index 00000000..bda66b89 Binary files /dev/null and b/Wiki/ENG_Guide/doctrees/Orchestrator/Orchestrator.doctree differ diff --git a/Wiki/ENG_Guide/doctrees/Orchestrator/gSettingsTemplate.doctree b/Wiki/ENG_Guide/doctrees/Orchestrator/gSettingsTemplate.doctree new file mode 100644 index 00000000..24801751 Binary files /dev/null and b/Wiki/ENG_Guide/doctrees/Orchestrator/gSettingsTemplate.doctree differ diff --git a/Wiki/ENG_Guide/doctrees/Robot/Robot.doctree b/Wiki/ENG_Guide/doctrees/Robot/Robot.doctree new file mode 100644 index 00000000..36898079 Binary files /dev/null and b/Wiki/ENG_Guide/doctrees/Robot/Robot.doctree differ diff --git a/Wiki/ENG_Guide/doctrees/Studio/Studio.doctree b/Wiki/ENG_Guide/doctrees/Studio/Studio.doctree new file mode 100644 index 00000000..a65ed738 Binary files /dev/null and b/Wiki/ENG_Guide/doctrees/Studio/Studio.doctree differ diff --git a/Wiki/ENG_Guide/doctrees/environment.pickle b/Wiki/ENG_Guide/doctrees/environment.pickle index cb9306ab..4fe8feec 100644 Binary files a/Wiki/ENG_Guide/doctrees/environment.pickle and b/Wiki/ENG_Guide/doctrees/environment.pickle differ diff --git a/Wiki/ENG_Guide/doctrees/index.doctree b/Wiki/ENG_Guide/doctrees/index.doctree index 89bb1f61..2b1eded4 100644 Binary files a/Wiki/ENG_Guide/doctrees/index.doctree and b/Wiki/ENG_Guide/doctrees/index.doctree differ diff --git a/Wiki/ENG_Guide/html/.buildinfo b/Wiki/ENG_Guide/html/.buildinfo index 78249a26..5f28f966 100644 --- a/Wiki/ENG_Guide/html/.buildinfo +++ b/Wiki/ENG_Guide/html/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 9f06a687c8e45b7b9c0f1fdb96244db7 +config: 428b1a8b711af25fb408c9d4784014f7 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/Wiki/ENG_Guide/html/Orchestrator/HowToStart.html b/Wiki/ENG_Guide/html/Orchestrator/HowToStart.html new file mode 100644 index 00000000..8fb5f52d --- /dev/null +++ b/Wiki/ENG_Guide/html/Orchestrator/HowToStart.html @@ -0,0 +1,292 @@ + + + + + + + + + + How to start — pyOpenRPA v1.2.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

How to start

+

Start configuration example

+
import psutil, datetime, logging, os, sys # stdout from logging
+
+# Config settings
+lPyOpenRPASourceFolderPathStr = r"..\Sources" # Path for test pyOpenRPA package
+
+# INFO Relative/Absolute import see below - after settings init
+
+# Template for import CP - Control Panels
+# ATTENTION - Pay attention to CP names! Orchestrator is one for the all control panels per one machine
+
+## !!! For Absolute import !!!
+# sys.path.insert(0,os.path.abspath(os.path.join(r"..\ROBOT\Builds")))
+# import pyRobot_CP
+# pyRobot_CP.SettingsUpdate(inGSettings=gSettings)
+
+## !!! For Relative import !!!
+# sys.path.insert(0,os.path.abspath(os.path.join(r"..\ROBOT\Builds")))
+# from pyRobot_CP import ControlPanel
+# ControlPanel.SettingsUpdate(inGSettings=gSettings)
+
+# Operations
+if lPyOpenRPASourceFolderPathStr != "": sys.path.insert(0,os.path.abspath(os.path.join(lPyOpenRPASourceFolderPathStr))) # Path for test pyOpenRPA package
+# Start import after config the pyOpenRPA folder
+from pyOpenRPA.Orchestrator import SettingsTemplate # Import functionallity
+
+
+if __name__ == "__main__": # New init way - allow run as module -m PyOpenRPA.Orchestrator
+    from pyOpenRPA import Orchestrator  # Import orchestrator main
+    gSettings = SettingsTemplate.Create(inModeStr="BASIC") # Create GSettings with basic configuration
+
+    # TEST Add User ND - Add Login ND to superuser of the Orchestrator
+    lUACClientDict = SettingsTemplate.__UACClientAdminCreate__()
+    # del lUACClientDict["pyOpenRPADict"]["AdminDict"]["LogViewerBool"]
+    # del lUACClientDict["pyOpenRPADict"]["AdminDict"]["CMDInputBool"]
+    # del lUACClientDict["pyOpenRPADict"]["AdminDict"]["ScreenshotViewerBool"]
+    # del lUACClientDict["pyOpenRPADict"]["AdminDict"]["RestartOrchestratorBool"]
+    # del lUACClientDict["pyOpenRPADict"]["AdminDict"]["RestartOrchestratorGITPullBool"]
+    # del lUACClientDict["pyOpenRPADict"]["AdminDict"]["RestartPCBool"]
+    # del lUACClientDict["pyOpenRPADict"]["RDPKeyDict"]
+    # del lUACClientDict["pyOpenRPADict"]["AgentKeyDict"]
+    # del lUACClientDict["pyOpenRPADict"]["CPKeyDict"]
+    #lUACClientDict["pyOpenRPADict"]["CPKeyDict"]["VersionCheck"]=True
+    #lUACClientDict["pyOpenRPADict"]["CPKeyDict"]["TEST"]=True
+    #lUACClientDict["pyOpenRPADict"]["AgentKeyDict"]["DESKTOP----;ND"]=True
+    Orchestrator.UACUpdate(inGSettings=gSettings, inADLoginStr="ND", inADStr="", inADIsDefaultBool=True, inURLList=[], inRoleHierarchyAllowedDict=lUACClientDict)
+    # TEST Add User IMaslov - Add Login IMaslov to superuser of the Orchestrator
+    Orchestrator.UACUpdate(inGSettings=gSettings, inADLoginStr="IMaslov", inADStr="", inADIsDefaultBool=True, inURLList=[])
+    # TEST Add Supertoken for the all access between robots
+    Orchestrator.UACSuperTokenUpdate(inGSettings=gSettings, inSuperTokenStr="1992-04-03-0643-ru-b4ff-openrpa52zzz")
+
+    ## !!! For Relative import !!! CP Version Check
+    try:
+        sys.path.insert(0,os.path.abspath(os.path.join(r"")))
+        from ControlPanel import CP_VersionCheck
+        CP_VersionCheck.SettingsUpdate(inGSettings=gSettings)
+    except Exception as e:
+        gSettings["Logger"].exception(f"Exception when init CP. See below.")
+
+    try:
+        from ControlPanel import CP_Test
+        CP_Test.SettingsUpdate(inGSettings=gSettings)
+    except Exception as e:
+        gSettings["Logger"].exception(f"Exception when init CP. See below.")
+
+    # Call the orchestrator def
+    Orchestrator.Orchestrator(inGSettings=gSettings)
+
+else:
+    print("!WARNING! Current orchestrator settings do not support old type of the Orchestrator start. Use new Orchestrator type start (see v1.2.0)")
+
+
+
+
+ + +
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + \ No newline at end of file diff --git a/Wiki/ENG_Guide/html/Orchestrator.html b/Wiki/ENG_Guide/html/Orchestrator/Orchestrator.html similarity index 70% rename from Wiki/ENG_Guide/html/Orchestrator.html rename to Wiki/ENG_Guide/html/Orchestrator/Orchestrator.html index 550e7055..577c78ce 100644 --- a/Wiki/ENG_Guide/html/Orchestrator.html +++ b/Wiki/ENG_Guide/html/Orchestrator/Orchestrator.html @@ -1,148 +1,237 @@ - - - - - - - Welcome to pyOpenRPA’s documentation! - pyOpenRPA v1.2.0 documentation - - - - - - - - - - - - - - - - - Contents - - - - - - - - - Menu - - - - - - - - Expand - - - - - - - - - - - - -
-
-
- -
- -
- -
-
- -
-
-
- -
-

Welcome to pyOpenRPA’s documentation!

-
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Description

+

pyOpenRPA Orchestrator is the executable process.

+

The features of the orchestrator is: +- Centralized/decentralized user control interface (applicable and for business users and for technical users). Web based, support desktop, tablet, phone. +- Automatized robots control (customized algorithms, robots scheduling) +- Source code mega flexibility: Light Orchestrator architecture is good for own customization

+
+

Global settings dict concept

+

pyOpenRPA project is complex tool which consist of several executable modules such as Robot, Orchestrator, Studio,

+

Because of module compexity, we use 1 init arg - inGSettings +inGSettings is a complex dictionary which has all reqired parameters for the module execution.

+

The description of the GSettings you can find in executable module details.

+
+

Orchestrator how to configure

+

To init pyOpenRPA Orchestrator instance use script:

+

from pyOpenRPA import Orchestrator # Import orchestrator main +gSettings = SettingsTemplate.Create(inModeStr=”BASIC”) # Create GSettings with basic configuration +Orchestrator.Orchestrator(inGSettings=gSettings) # Call the orchestrator def

+

gSettings structure

+

gSettingsTemplate.

-
-

Indices and tables

+
+

Orchestrator architecture

+

Orchestrator has several source code components: +- User/robot activity consolidated queue single thread (Processor) +- User/robot activity asynchonus many threads (Processor) +- Scheduler single thread (main) +- RDP keep active many thread +- Autocleaner single thread +- GUI keep active single thread +- HTTP web server single thread (create user socket threads) +-

+

Below you can find more information about all of the component.

+
+
+

Component Processor

+

Sync - Append activity list to consolidated processor queue. Execution goes sequency by the activity list order

+

Async - Create New thread to execute the activity list

+
    +
  • Activity list

  • +
+

Liast of the activity item

+

Activity item is universal mechanism to execute different algorythms from any sources. +The core feature of the Activity is to call python defs with args and kwargs. +If you need to init do some activity you can write some python def, then create Activity item with current def. +ATTENTION: In some cases (such as web transmition), when you can’t transmit python def as object you can use symbolic names for python defs. It is apply you to init all of you want from the web UI.

+

?Why i cant transmit python def from the web +Because the WEB space is not the Python executable space. Interaction between it spaces create by JSON protocol. So, we know than JSON apply int, float, str, bool, None, list, dict - that is all. +{

+
+

“Def”:”DefAliasTest”, # def link or def alias (look gSettings[“Processor”][“AliasDefDict”]) +“ArgList”:[1,2,3], # Args list +“ArgDict”:{“ttt”:1,”222”:2,”dsd”:3}, # Args dictionary +“ArgGSettings”: None # Name of GSettings attribute: str (ArgDict) or index (for ArgList) +“ArgLogger”: None # Name of GSettings attribute: str (ArgDict) or index (for ArgList)

+
+

}# Pay attention! Do not left comma symbol after the end of the dict - it can be interpretated like a turple..

-

pyOpenRPA Orchestrator

+

pyOpenRPA Orchestrator

-pyOpenRPA.Orchestrator.__Orchestrator__.AgentActivityItemAdd(inGSettings, inHostNameStr, inUserStr, inActivityItemDict)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.AgentActivityItemAdd(inGSettings, inHostNameStr, inUserStr, inActivityItemDict)[source]

Add activity in AgentDict. Check if item is created

Parameters
@@ -158,9 +247,10 @@
+
-pyOpenRPA.Orchestrator.__Orchestrator__.AgentOSCMD(inGSettings, inHostNameStr, inUserStr, inCMDStr, inRunAsyncBool=True)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.AgentOSCMD(inGSettings, inHostNameStr, inUserStr, inCMDStr, inRunAsyncBool=True)[source]

pyOpenRPA.Agent: Send CMD to OS. Result return to log + Orchestrator by the A2O connection def OSCMD(inCMDStr, inRunAsyncBool=True, inGSettings=None): Send to agent activity item to OSCMD

@@ -176,9 +266,10 @@ Send to agent activity item to OSCMD

+
-pyOpenRPA.Orchestrator.__Orchestrator__.AgentOSFileBinaryDataBase64StrCreate(inGSettings, inHostNameStr, inUserStr, inFilePathStr, inFileDataBase64Str)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.AgentOSFileBinaryDataBase64StrCreate(inGSettings, inHostNameStr, inUserStr, inFilePathStr, inFileDataBase64Str)[source]

pyOpenRPA.Agent: Create binary file by the base64 string (safe for JSON transmission) def OSFileBinaryDataBase64StrCreate(inFilePathStr, inFileDataBase64Str,inGSettings = None): Send binary file to Agent (base64 string)

@@ -194,9 +285,10 @@ Send binary file to Agent (base64 string)

+
-pyOpenRPA.Orchestrator.__Orchestrator__.AgentOSFileBinaryDataBytesCreate(inGSettings, inHostNameStr, inUserStr, inFilePathStr, inFileDataBytes)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.AgentOSFileBinaryDataBytesCreate(inGSettings, inHostNameStr, inUserStr, inFilePathStr, inFileDataBytes)[source]

pyOpenRPA.Agent: Create binary file by the base64 string (safe for JSON transmition) def OSFileBinaryDataBase64StrCreate(inFilePathStr, inFileDataBase64Str,inGSettings = None): Send binary file to Agent (Bytes)

@@ -212,9 +304,10 @@ Send binary file to Agent (Bytes)

+
-pyOpenRPA.Orchestrator.__Orchestrator__.AgentOSFileTextDataStrCreate(inGSettings, inHostNameStr, inUserStr, inFilePathStr, inFileDataStr, inEncodingStr='utf-8')[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.AgentOSFileTextDataStrCreate(inGSettings, inHostNameStr, inUserStr, inFilePathStr, inFileDataStr, inEncodingStr='utf-8')[source]

pyOpenRPA.Agent: Create text file by the string def OSFileTextDataStrCreate(inFilePathStr, inFileDataStr, inEncodingStr = “utf-8”,inGSettings = None): Create Activity Item for the agent

@@ -231,9 +324,10 @@ Create Activity Item for the agent

+
-pyOpenRPA.Orchestrator.__Orchestrator__.GSettingsAutocleaner(inGSettings)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.GSettingsAutocleaner(inGSettings)[source]

Interval gsettings auto cleaner

Parameters
@@ -244,9 +338,10 @@ Create Activity Item for the agent

+
-pyOpenRPA.Orchestrator.__Orchestrator__.GSettingsKeyListValueAppend(inGSettings, inValue, inKeyList=None)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.GSettingsKeyListValueAppend(inGSettings, inValue, inKeyList=None)[source]

Append value in GSettings by the key list

Parameters
@@ -261,9 +356,10 @@ Create Activity Item for the agent

+
-pyOpenRPA.Orchestrator.__Orchestrator__.GSettingsKeyListValueGet(inGSettings, inKeyList=None)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.GSettingsKeyListValueGet(inGSettings, inKeyList=None)[source]

Get the value from the GSettings by the key list

Parameters
@@ -277,9 +373,10 @@ Create Activity Item for the agent

+
-pyOpenRPA.Orchestrator.__Orchestrator__.GSettingsKeyListValueOperatorPlus(inGSettings, inValue, inKeyList=None)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.GSettingsKeyListValueOperatorPlus(inGSettings, inValue, inKeyList=None)[source]

Operator plus value in GSettings by the key list

Parameters
@@ -294,9 +391,10 @@ Create Activity Item for the agent

+
-pyOpenRPA.Orchestrator.__Orchestrator__.GSettingsKeyListValueSet(inGSettings, inValue, inKeyList=None)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.GSettingsKeyListValueSet(inGSettings, inValue, inKeyList=None)[source]

Set value in GSettings by the key list

Parameters
@@ -311,9 +409,10 @@ Create Activity Item for the agent

+
-pyOpenRPA.Orchestrator.__Orchestrator__.OSCMD(inCMDStr, inRunAsyncBool=True, inLogger=None)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.OSCMD(inCMDStr, inRunAsyncBool=True, inLogger=None)[source]

OS send command in shell locally

Parameters
@@ -328,9 +427,10 @@ Create Activity Item for the agent

+
-pyOpenRPA.Orchestrator.__Orchestrator__.OSCredentialsVerify(inUserStr, inPasswordStr, inDomainStr='')[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.OSCredentialsVerify(inUserStr, inPasswordStr, inDomainStr='')[source]

Verify user credentials in windows. Return bool

Parameters
@@ -345,9 +445,10 @@ Create Activity Item for the agent

+
-pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorRestart(inGSettings=None)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorRestart(inGSettings=None)[source]

Orchestrator restart

Parameters
@@ -355,9 +456,10 @@ Create Activity Item for the agent

+
-pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorSessionSave(inGSettings=None)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorSessionSave(inGSettings=None)[source]

Orchestrator session save in file _SessionLast_RDPList.json (encoding = “utf-8”)

Parameters
@@ -368,9 +470,10 @@ Create Activity Item for the agent

+
-pyOpenRPA.Orchestrator.__Orchestrator__.ProcessIsStarted(inProcessNameWOExeStr)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.ProcessIsStarted(inProcessNameWOExeStr)[source]

Check if there is any running process that contains the given name processName.

Parameters
@@ -381,9 +484,10 @@ Create Activity Item for the agent

+
-pyOpenRPA.Orchestrator.__Orchestrator__.ProcessListGet(inProcessNameWOExeList=None)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.ProcessListGet(inProcessNameWOExeList=None)[source]

Check activity of the list of processes

Parameters
@@ -394,9 +498,10 @@ Create Activity Item for the agent

+
-pyOpenRPA.Orchestrator.__Orchestrator__.ProcessStart(inPathStr, inArgList, inStopProcessNameWOExeStr=None)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.ProcessStart(inPathStr, inArgList, inStopProcessNameWOExeStr=None)[source]

Start process locally [optional: if task name is not started]

Parameters
@@ -408,9 +513,10 @@ Create Activity Item for the agent

+
-pyOpenRPA.Orchestrator.__Orchestrator__.ProcessStop(inProcessNameWOExeStr, inCloseForceBool, inUserNameStr='%username%')[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.ProcessStop(inProcessNameWOExeStr, inCloseForceBool, inUserNameStr='%username%')[source]

Stop process

Parameters
@@ -425,9 +531,10 @@ Create Activity Item for the agent

+
-pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorActivityItemAppend(inGSettings, inDef, inArgList=None, inArgDict=None, inArgGSettingsStr=None, inArgLoggerStr=None)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorActivityItemAppend(inGSettings, inDef, inArgList=None, inArgDict=None, inArgGSettingsStr=None, inArgLoggerStr=None)[source]

Add Activity item in Processor list

Parameters
@@ -442,9 +549,10 @@ Create Activity Item for the agent

+
-pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorActivityItemCreate(inDef, inArgList=None, inArgDict=None, inArgGSettingsStr=None, inArgLoggerStr=None)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorActivityItemCreate(inDef, inArgList=None, inArgDict=None, inArgGSettingsStr=None, inArgLoggerStr=None)[source]

Create ActivityItem

Parameters
@@ -461,9 +569,10 @@ Create Activity Item for the agent

+
-pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorAliasDefCreate(inGSettings, inDef, inAliasStr=None)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorAliasDefCreate(inGSettings, inDef, inAliasStr=None)[source]

Create alias for def (can be used in ActivityItem in field Def)

Parameters
@@ -478,9 +587,10 @@ Create Activity Item for the agent

+
-pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorAliasDefUpdate(inGSettings, inDef, inAliasStr)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorAliasDefUpdate(inGSettings, inDef, inAliasStr)[source]

Update alias for def (can be used in ActivityItem in field Def)

Parameters
@@ -495,9 +605,10 @@ Create Activity Item for the agent

+
-pyOpenRPA.Orchestrator.__Orchestrator__.PythonStart(inModulePathStr, inDefNameStr, inArgList=None, inArgDict=None, inLogger=None)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.PythonStart(inModulePathStr, inDefNameStr, inArgList=None, inArgDict=None, inLogger=None)[source]

Python import module and start def

Parameters
@@ -514,9 +625,10 @@ Create Activity Item for the agent

+
-pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionCMDRun(inGSettings, inRDPSessionKeyStr, inCMDStr, inModeStr='CROSSCHECK')[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionCMDRun(inGSettings, inRDPSessionKeyStr, inCMDStr, inModeStr='CROSSCHECK')[source]

Send command in RDP session

Parameters
@@ -532,9 +644,10 @@ Create Activity Item for the agent

+
-pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionConnect(inGSettings, inRDPSessionKeyStr, inRDPTemplateDict=None, inHostStr=None, inPortStr=None, inLoginStr=None, inPasswordStr=None)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionConnect(inGSettings, inRDPSessionKeyStr, inRDPTemplateDict=None, inHostStr=None, inPortStr=None, inLoginStr=None, inPasswordStr=None)[source]
Create new RDPSession in RobotRDPActive. Attention - activity will be ignored if key is exists

2 way of the use

@@ -558,9 +671,10 @@ Var 2 (Backward compatibility): inGSettings, inRDPSessionKeyStr, inHostStr, inP
+
-pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionDisconnect(inGSettings, inRDPSessionKeyStr, inBreakTriggerProcessWOExeList=None)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionDisconnect(inGSettings, inRDPSessionKeyStr, inBreakTriggerProcessWOExeList=None)[source]

Disconnect the RDP session

Parameters
@@ -575,9 +689,10 @@ Var 2 (Backward compatibility): inGSettings, inRDPSessionKeyStr, inHostStr, inP
+
-pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionDublicatesResolve(inGSettings)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionDublicatesResolve(inGSettings)[source]

Search dublicates in GSettings RDPlist !def is developing!

@@ -589,9 +704,10 @@ Var 2 (Backward compatibility): inGSettings, inRDPSessionKeyStr, inHostStr, inP
+
-pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionFileStoredRecieve(inGSettings, inRDPSessionKeyStr, inRDPFilePathStr, inHostFilePathStr)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionFileStoredRecieve(inGSettings, inRDPSessionKeyStr, inRDPFilePathStr, inHostFilePathStr)[source]

Receive file from Session RDP to Host using shared drive in RDP

Parameters
@@ -607,9 +723,10 @@ Var 2 (Backward compatibility): inGSettings, inRDPSessionKeyStr, inHostStr, inP
+
-pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionFileStoredSend(inGSettings, inRDPSessionKeyStr, inHostFilePathStr, inRDPFilePathStr)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionFileStoredSend(inGSettings, inRDPSessionKeyStr, inHostFilePathStr, inRDPFilePathStr)[source]

Send file from Host to Session RDP using shared drive in RDP

Parameters
@@ -625,9 +742,10 @@ Var 2 (Backward compatibility): inGSettings, inRDPSessionKeyStr, inHostStr, inP
+
-pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionLogoff(inGSettings, inRDPSessionKeyStr, inBreakTriggerProcessWOExeList=None)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionLogoff(inGSettings, inRDPSessionKeyStr, inBreakTriggerProcessWOExeList=None)[source]

Logoff the RDP session

Parameters
@@ -642,9 +760,10 @@ Var 2 (Backward compatibility): inGSettings, inRDPSessionKeyStr, inHostStr, inP
+
-pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionMonitorStop(inGSettings, inRDPSessionKeyStr)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionMonitorStop(inGSettings, inRDPSessionKeyStr)[source]

Stop track the RDP session. Current def dont kill RDP session - only stop to track it (it can give )

Parameters
@@ -658,9 +777,10 @@ Var 2 (Backward compatibility): inGSettings, inRDPSessionKeyStr, inHostStr, inP
+
-pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionProcessStartIfNotRunning(inGSettings, inRDPSessionKeyStr, inProcessNameWEXEStr, inFilePathStr, inFlagGetAbsPathBool=True)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionProcessStartIfNotRunning(inGSettings, inRDPSessionKeyStr, inProcessNameWEXEStr, inFilePathStr, inFlagGetAbsPathBool=True)[source]

Start process if it is not running

Parameters
@@ -677,9 +797,10 @@ Var 2 (Backward compatibility): inGSettings, inRDPSessionKeyStr, inHostStr, inP
+
-pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionProcessStop(inGSettings, inRDPSessionKeyStr, inProcessNameWEXEStr, inFlagForceCloseBool)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionProcessStop(inGSettings, inRDPSessionKeyStr, inProcessNameWEXEStr, inFlagForceCloseBool)[source]

Create CMD str to stop process

Parameters
@@ -695,9 +816,10 @@ Var 2 (Backward compatibility): inGSettings, inRDPSessionKeyStr, inHostStr, inP
+
-pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionReconnect(inGSettings, inRDPSessionKeyStr, inRDPTemplateDict=None)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionReconnect(inGSettings, inRDPSessionKeyStr, inRDPTemplateDict=None)[source]

RDP Session reconnect

Parameters
@@ -712,9 +834,10 @@ Var 2 (Backward compatibility): inGSettings, inRDPSessionKeyStr, inHostStr, inP
+
-pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionResponsibilityCheck(inGSettings, inRDPSessionKeyStr)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionResponsibilityCheck(inGSettings, inRDPSessionKeyStr)[source]

Check RDP Session responsibility TODO NEED DEV + TEST

Parameters
@@ -728,9 +851,10 @@ Var 2 (Backward compatibility): inGSettings, inRDPSessionKeyStr, inHostStr, inP
+
-pyOpenRPA.Orchestrator.__Orchestrator__.RDPTemplateCreate(inLoginStr, inPasswordStr, inHostStr='127.0.0.1', inPortInt=3389, inWidthPXInt=1680, inHeightPXInt=1050, inUseBothMonitorBool=False, inDepthBitInt=32, inSharedDriveList=None)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.RDPTemplateCreate(inLoginStr, inPasswordStr, inHostStr='127.0.0.1', inPortInt=3389, inWidthPXInt=1680, inHeightPXInt=1050, inUseBothMonitorBool=False, inDepthBitInt=32, inSharedDriveList=None)[source]

Create some RDP template dict to use it when connect/reconnect

Parameters
@@ -751,9 +875,10 @@ Var 2 (Backward compatibility): inGSettings, inRDPSessionKeyStr, inHostStr, inP
+
-pyOpenRPA.Orchestrator.__Orchestrator__.SchedulerActivityTimeAddWeekly(inGSettings, inTimeHHMMStr='23:55:', inWeekdayList=None, inActivityList=None)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.SchedulerActivityTimeAddWeekly(inGSettings, inTimeHHMMStr='23:55:', inWeekdayList=None, inActivityList=None)[source]

Add activity in time weekly

Parameters
@@ -769,9 +894,10 @@ Var 2 (Backward compatibility): inGSettings, inRDPSessionKeyStr, inHostStr, inP
+
-pyOpenRPA.Orchestrator.__Orchestrator__.UACKeyListCheck(inRequest, inRoleKeyList) → bool[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.UACKeyListCheck(inRequest, inRoleKeyList) → bool[source]

Check is client is has access for the key list

Parameters
@@ -785,9 +911,10 @@ Var 2 (Backward compatibility): inGSettings, inRDPSessionKeyStr, inHostStr, inP
+
-pyOpenRPA.Orchestrator.__Orchestrator__.UACSuperTokenUpdate(inGSettings, inSuperTokenStr)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.UACSuperTokenUpdate(inGSettings, inSuperTokenStr)[source]

Add supertoken for the all access (it is need for the robot communication without human)

Parameters
@@ -798,9 +925,10 @@ Var 2 (Backward compatibility): inGSettings, inRDPSessionKeyStr, inHostStr, inP
+
-pyOpenRPA.Orchestrator.__Orchestrator__.UACUpdate(inGSettings, inADLoginStr, inADStr='', inADIsDefaultBool=True, inURLList=None, inRoleHierarchyAllowedDict=None)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.UACUpdate(inGSettings, inADLoginStr, inADStr='', inADIsDefaultBool=True, inURLList=None, inRoleHierarchyAllowedDict=None)[source]

Update user access (UAC)

Parameters
@@ -815,9 +943,10 @@ Var 2 (Backward compatibility): inGSettings, inRDPSessionKeyStr, inHostStr, inP
+
-pyOpenRPA.Orchestrator.__Orchestrator__.WebCPUpdate(inGSettings, inCPKeyStr, inHTMLRenderDef=None, inJSONGeneratorDef=None, inJSInitGeneratorDef=None)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.WebCPUpdate(inGSettings, inCPKeyStr, inHTMLRenderDef=None, inJSONGeneratorDef=None, inJSInitGeneratorDef=None)[source]

Add control panel HTML, JSON generator or JS when page init

Parameters
@@ -831,9 +960,10 @@ Var 2 (Backward compatibility): inGSettings, inRDPSessionKeyStr, inHostStr, inP
+
-pyOpenRPA.Orchestrator.__Orchestrator__.WebURLConnectDef(inGSettings, inMethodStr, inURLStr, inMatchTypeStr, inDef, inContentTypeStr='application/octet-stream')[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.WebURLConnectDef(inGSettings, inMethodStr, inURLStr, inMatchTypeStr, inDef, inContentTypeStr='application/octet-stream')[source]
Connect URL to DEF

“inMethodStr”:”GET|POST”, @@ -857,9 +987,10 @@ Var 2 (Backward compatibility): inGSettings, inRDPSessionKeyStr, inHostStr, inP

+
-pyOpenRPA.Orchestrator.__Orchestrator__.WebURLConnectFile(inGSettings, inMethodStr, inURLStr, inMatchTypeStr, inFilePathStr, inContentTypeStr='application/octet-stream')[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.WebURLConnectFile(inGSettings, inMethodStr, inURLStr, inMatchTypeStr, inFilePathStr, inContentTypeStr='application/octet-stream')[source]
Connect URL to File

“inMethodStr”:”GET|POST”, “inURLStr”: “/index”, #URL of the request @@ -880,9 +1011,10 @@ Var 2 (Backward compatibility): inGSettings, inRDPSessionKeyStr, inHostStr, inP

+
-pyOpenRPA.Orchestrator.__Orchestrator__.WebURLConnectFolder(inGSettings, inMethodStr, inURLStr, inMatchTypeStr, inFolderPathStr)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.WebURLConnectFolder(inGSettings, inMethodStr, inURLStr, inMatchTypeStr, inFolderPathStr)[source]
Connect URL to Folder

“inMethodStr”:”GET|POST”, “inURLStr”: “/Folder/”, #URL of the request @@ -902,9 +1034,10 @@ Var 2 (Backward compatibility): inGSettings, inRDPSessionKeyStr, inHostStr, inP

+
-pyOpenRPA.Orchestrator.__Orchestrator__.WebUserInfoGet(inRequest)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.WebUserInfoGet(inRequest)[source]

Return User info about request

Parameters
@@ -915,9 +1048,10 @@ Var 2 (Backward compatibility): inGSettings, inRDPSessionKeyStr, inHostStr, inP
+
-pyOpenRPA.Orchestrator.__Orchestrator__.WebUserIsSuperToken(inRequest, inGSettings)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.WebUserIsSuperToken(inRequest, inGSettings)[source]

Return bool if request is authentificated with supetoken (token which is never expires)

Parameters
@@ -931,9 +1065,10 @@ Var 2 (Backward compatibility): inGSettings, inRDPSessionKeyStr, inHostStr, inP
+
-pyOpenRPA.Orchestrator.__Orchestrator__.WebUserUACHierarchyGet(inRequest)[source]
+pyOpenRPA.Orchestrator.__Orchestrator__.WebUserUACHierarchyGet(inRequest)[source]

Return User UAC Hierarchy DICT Return {…}

Parameters
@@ -944,56 +1079,56 @@ Var 2 (Backward compatibility): inGSettings, inRDPSessionKeyStr, inHostStr, inP
+ +
-
- +
+ +
+ - - - - - - + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Wiki/ENG_Guide/html/Orchestrator/gSettingsTemplate.html b/Wiki/ENG_Guide/html/Orchestrator/gSettingsTemplate.html new file mode 100644 index 00000000..89709151 --- /dev/null +++ b/Wiki/ENG_Guide/html/Orchestrator/gSettingsTemplate.html @@ -0,0 +1,584 @@ + + + + + + + + + + gSettings Template — pyOpenRPA v1.2.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

gSettings Template

+

gSettings structure

+
import os, logging, datetime, sys
+
+# Technical def - return GSettings structure with examples
+def __Create__():
+    return {
+        "VersionStr": None, # Will be filled in orchestrator,
+        "Autocleaner": {
+            # Some gurbage is collecting in g settings. So you can configure autocleaner to periodically clear gSettings
+            "IntervalSecFloat": 600.0,  # Sec float to periodically clear gsettings
+        },
+        "Client": {  # Settings about client web orchestrator
+            "Session": {
+                # Settings about web session. Session algorythms works only for special requests (URL in ServerSettings)
+                "LifetimeSecFloat": 600.0,
+                # Client Session lifetime in seconds. after this time server will forget about this client session
+                "LifetimeRequestSecFloat": 120.0,  # 1 client request lifetime in server in seconds
+                "ControlPanelRefreshIntervalSecFloat": 1.5,  # Interval to refresh control panels for session,
+                "TechnicalSessionGUIDCache": {  # TEchnical cache. Fills when web browser is requesting
+                    # "SessionGUIDStr":{ # Session with some GUID str. On client session guid stored in cookie "SessionGUIDStr"
+                    #    "InitDatetime": None, # Datetime when session GUID was created
+                    #    "DatasetLast": {
+                    #        "ControlPanel": {
+                    #            "Data": None, # Struct to check with new iterations. None if starts
+                    #            "ReturnBool": False # flag to return, close request and return data as json
+                    #        }
+                    #    },
+                    #    "ClientRequestHandler": None, # Last client request handler
+                    #    "UserADStr": None, # User, who connect. None if user is not exists
+                    #    "DomainADStr": None, # Domain of the user who connect. None if user is not exists
+                    # }
+                },
+            },
+            # # # # # # Client... # # # # # # # #
+            "DumpLogListRefreshIntervalSecFloat": 3.0,  # Duration between updates for the Client
+            "DumpLogListCountInt": 100,  # Set the max row for the dump
+            "DumpLogList": [],  # Will be filled automatically
+            "DumpLogListHashStr": None,  # Will be filled automatically
+            # # # # # # # # # # # # # # # # # #
+        },
+        "ServerDict": {
+            "WorkingDirectoryPathStr": None,  # Will be filled automatically
+            "RequestTimeoutSecFloat": 300,  # Time to handle request in seconds
+            "ListenPort_": "Порт, по которому можно подключиться к демону",
+            "ListenPort": 80,
+            "ListenURLList": [
+                {
+                    "Description": "Local machine test",
+                    "URL_": "Сетевое расположение сервера демона",
+                    "URL": ""
+                }
+            ],
+            "AccessUsers": {  # Default - all URL is blocked
+                "FlagCredentialsAsk": True,  # Turn on Authentication
+                "RuleDomainUserDict": {
+                    # ("DOMAIN", "USER"): { !!!!! only in upper case !!!!
+                    #    "MethodMatchURLBeforeList": [
+                    #       {
+                    #           "Method":"GET|POST",
+                    #           "MatchType":"BeginWith|Contains|Equal|EqualCase",
+                    #           "URL":"",
+                    #           "FlagAccessDefRequestGlobalAuthenticate": None, #Return bool
+                    #           "FlagAccess": True
+                    #        }
+                    #    ],
+                    #    "ControlPanelKeyAllowedList":[], # If empty - all is allowed
+                    #    "RoleHierarchyAllowedDict": {
+                    #       "Orchestrator":{
+                    #           "Controls": {
+                    #               "RestartOrchestrator": {}, # Feature to restart orchestrator on virtual machine
+                    #               "LookMachineScreenshots": {} # Feature to look machina screenshots
+                    #          },
+                    #           "RDPActive": { # Robot RDP active module
+                    #               "ListRead": {} # Access to read RDP session list
+                    #            }
+                    #        }
+                    #      }
+                    #   }
+                },
+                "RuleMethodMatchURLBeforeList": [  # General MethodMatchURL list (no domain/user)
+                    #       {
+                    #           "Method":"GET|POST",
+                    #           "MatchType":"BeginWith|Contains|Equal|EqualCase",
+                    #           "URL":"",
+                    #           "FlagAccessDefRequestGlobalAuthenticate": None, #Return bool
+                    #           "FlagAccess": True
+                    #        }
+                ],
+                "AuthTokensDict": {
+                    # "<AuthToken>":{"User":"", "Domain":"", "TokenDatetime":<Datetime>, "FlagDoNotExpire":True}
+                }
+            },
+            "URLList": [  # List of available URLs with the orchestrator server
+                # {
+                #    "Method":"GET|POST",
+                #    "URL": "/index", #URL of the request
+                #    "MatchType": "", #"BeginWith|Contains|Equal|EqualCase",
+                #    "ResponseFilePath": "", #Absolute or relative path
+                #    "ResponseFolderPath": "", #Absolute or relative path
+                #    "ResponseContentType": "", #HTTP Content-type
+                #    "ResponseDefRequestGlobal": None #Function with str result
+                # }
+                {
+                    "Method": "GET",
+                    "URL": "/test/",  # URL of the request
+                    "MatchType": "BeginWith",  # "BeginWith|Contains|Equal|EqualCase",
+                    # "ResponseFilePath": "", #Absolute or relative path
+                    "ResponseFolderPath": "C:\Abs\Archive\scopeSrcUL\OpenRPA\Orchestrator\Settings",
+                    # Absolute or relative path
+                    # "ResponseContentType": "", #HTTP Content-type
+                    # "ResponseDefRequestGlobal": None #Function with str result
+                }
+            ],
+
+        },
+        "OrchestratorStart": {
+            "DefSettingsUpdatePathList": [],
+            # List of the .py files which should be loaded before init the algorythms
+            "ActivityList": [
+                # {
+                #    "Type": "ProcessStop", #Activity type
+                #    "Name": "OpenRPARobotDaemon.exe", #Process name
+                #    "FlagForce": True, #Force process close
+                #    "User": "%username%" #Empty, user or %username%
+                # },
+                # {
+                #     "Type": "ProcessStartIfTurnedOff", #Activity type
+                #     "CheckTaskName": "notepad.exe", #Python function module name
+                #     "Path": "notepad", #Python function name
+                #     "ArgList": [] #Input python function args
+                # },
+                # {
+                #     "Type": "RDPSessionConnect", #Activity type - start/connect RDP Session
+                #     "RDPSessionKeyStr": "notepad.exe", #Python function module name
+                #     "RDPConfigurationDict": {}
+                # },
+                # {
+                #     "Type": "RDPSessionLogoff", #Activity type - logoff RDP Session
+                #     "RDPSessionKeyStr": "notepad.exe", #Python function module name
+                # },
+                # {
+                #     "Type": "RDPSessionDisconnect", #Activity type - disconnect the RDP Session without logoff
+                #     "RDPSessionKeyStr": "notepad.exe", #Python function module name
+                # },
+                # {
+                #     "Type": "RDPSessionFileSend", #Activity type - send file to RDP session
+                #     ...
+                # },
+                # {
+                #     "Type": "RDPSessionFileRecieve", #Activity type - recieve file from rdp session
+                #     ...
+                # },
+                # {
+                #     "Type": "RDPSessionProcessStart", #Activity type -
+                #     ...
+                # },
+            ]
+        },
+        "SchedulerDict": {
+            "CheckIntervalSecFloat": 5.0,  # Check interval in seconds
+            "ActivityTimeList": [
+                # {
+                #    "TimeHH:MMStr": "22:23",  # Time [HH:MM] to trigger activity
+                #    "WeekdayList": [0, 1, 2, 3, 4, 5, 6], #List of the weekday index when activity is applicable, Default [0,1,2,3,4,5,6]
+                #    "ActivityList": [
+                    #    {
+                    #        "Type": "ProcessStart",  # Activity type
+                    #        "Path": "start",  # Executable file path
+                    #        "ArgList": ["cmd.exe", "/c", "PIPUpgrade.cmd"]  # List of the arguments
+                    #    }
+                #    ],
+                #    "GUID": None # Will be filled in Orchestrator automatically - is needed for detect activity completion
+                # },
+            ],
+        },
+        "ProcessorDict": {  # Has been changed. New general processor (one threaded) v.1.2.0
+            "ActivityList": [  # List of the activities
+                # {
+                #    "Def":"DefAliasTest", # def link or def alias (look gSettings["Processor"]["AliasDefDict"])
+                #    "ArgList":[1,2,3], # Args list
+                #    "ArgDict":{"ttt":1,"222":2,"dsd":3} # Args dictionary
+                #    "ArgGSettings": # Name of GSettings attribute: str (ArgDict) or index (for ArgList)
+                #    "ArgLogger": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList)
+                # },
+            ],
+            "AliasDefDict": {},  # Storage for def with Str alias. To use it see pyOpenRPA.Orchestrator.ControlPanel
+            "CheckIntervalSecFloat": 1.0,  # Interval for check gSettings in ProcessorDict > ActivityList
+            "ExecuteBool": True,  # Flag to execute thread processor
+            "ThreadIdInt": None # Technical field - will be setup when processor init
+        },
+        "ControlPanelDict": { # Old structure > CPDict
+            "RefreshSeconds": 5,  # deprecated parameter
+            "RobotList": [
+                #{
+                #    "RenderFunction": RenderRobotR01,
+                #    "KeyStr": "TestControlPanelKey"
+                #}
+            ]
+        },
+        "CPDict": {
+            # "CPKey": {"HTMLRenderDef":None, "JSONGeneratorDef":None, "JSInitGeneratorDef":None}
+        },
+        # # # # # # # # # # # # # #
+        "RobotRDPActive": {
+            "RDPList": {
+                # "RDPSessionKey":{
+                #    "Host": "77.77.22.22",  # Host address
+                #    "Port": "3389",  # RDP Port
+                #    "Login": "test",  # Login
+                #    "Password": "test",  # Password
+                #    "Screen": {
+                #        "Width": 1680,  # Width of the remote desktop in pixels
+                #        "Height": 1050,  # Height of the remote desktop in pixels
+                #        # "640x480" or "1680x1050" or "FullScreen". If Resolution not exists set full screen
+                #        "FlagUseAllMonitors": False,  # True or False
+                #        "DepthBit": "32"  # "32" or "24" or "16" or "15"
+                #    },
+                #    "SharedDriveList": ["c"],  # List of the Root sesion hard drives
+                #    ###### Will updated in program ############
+                #    "SessionHex": "",  # Hex is created when robot runs
+                #    "SessionIsWindowExistBool": False, # Flag if the RDP window is exist, old name "FlagSessionIsActive". Check every n seconds
+                #    "SessionIsWindowResponsibleBool": False, # Flag if RDP window is responsible (recieve commands). Check every nn seconds. If window is Responsible - window is Exist too
+                #    "SessionIsIgnoredBool": False # Flag to ignore RDP window False - dont ignore, True - ignore
+                # }
+            },
+            "ResponsibilityCheckIntervalSec": None,
+            # Seconds interval when Robot check the RDP responsibility. if None - dont check
+            "FullScreenRDPSessionKeyStr": None,
+            # RDPSessionKeyStr of the current session which is full screened, None is no session in fullscreen
+            "ActivityList": [
+                # Technical Activity list for RobotRDPActive thread - equal to Main activity list, apply only RDP activity
+                # {
+                #    "DefNameStr":"test", # Function name in RobotRDPActive.Processor
+                #    "ArgList":[1,2,3], # Args list
+                #    "ArgDict":{"ttt":1,"222":2,"dsd":3} # Args dictionary
+                # },
+                # {
+                #    "DefNameStr": "RDPSessionConnect",  # Function name in RobotRDPActive.Processor
+                #    "ArgList": [],  # Args list
+                #    "ArgDict": {"inRDPSessionKeyStr": "TestRDP", "inHostStr": "77.44.33.22", "inPortStr": "3389",
+                #                "inLoginStr": "login", "inPasswordStr": "pass"}  # Args dictionary
+                # },
+                # {
+                #    "DefNameStr": "RDPSessionDisconnect",  # Disconnect the RDP session without logoff. Function name in RobotRDPActive.Processor
+                #    "ArgList": [],  # Args list
+                #    "ArgDict": {"inRDPSessionKeyStr": "TestRDP"}
+                # },
+                # {
+                #    "DefNameStr": "RDPSessionReconnect",  # Disconnect the RDP session without logoff. Function name in RobotRDPActive.Processor
+                #    "ArgList": [],  # Args list
+                #    "ArgDict": {"inRDPSessionKeyStr": "TestRDP"}
+                # }
+            ]
+        },
+        # # # # # # # # # # # # # #
+        "FileManager": {
+            "FileURLFilePathDict_help": "https://localhost:8081/filemanager/<file URL>. All FileURL s must be set in lowercase",
+            "FileURLFilePathDict": {
+                #"r01/report.xlsx": "C:\\RPA\\R01_IntegrationOrderOut\\Data\\Reestr_otgruzok.xlsx"
+            }
+        },
+        "Logger": logging.getLogger("Orchestrator"),
+        "Storage": {
+            "Robot_R01_help": "Robot data storage in orchestrator env",
+            "Robot_R01": {},
+            "R01_OrchestratorToRobot": {"Test2": "Test2"}
+        },
+        "AgentDict": { # Will be filled when program runs
+            #("HostNameUpperStr", "UserUpperStr"): { "IsListenBool": True, "QueueList": [] }
+        }
+    }
+
+# Create full configuration for
+def __AgentDictItemCreate__():
+    return {"IsListenBool":False, "ConnectionCountInt":0, "ConnectionFirstQueueItemCountInt":0, "ActivityList":[]}
+# Create full configuration for
+def __UACClientAdminCreate__():
+    lResultDict = {
+        "pyOpenRPADict":{
+            "CPKeyDict":{ # Empty dict - all access
+                # "CPKeyStr"{
+                # }
+            },
+            "RDPKeyDict":{ # Empty dict - all access
+                #"RDPKeyStr"{
+                #   "FullscreenBool": True,
+                #   "IgnoreBool":True,
+                #   "ReconnectBool": True
+                #   "NothingBool": True # USe option if you dont want to give some access to the RDP controls
+                # }
+            },
+            "AgentKeyDict": { # Empty dict - all access
+                # "AgentKeyStr"{
+                # }
+            },
+            "AdminDict":{ # Empty dict - all access
+                "LogViewerBool":True, # Show log viewer on the web page
+                "CMDInputBool":True, # Execute CMD on the server side and result to the logs
+                "ScreenshotViewerBool":True, # Show button to look screenshots
+                "RestartOrchestratorBool": True, # Restart orchestrator activity
+                "RestartOrchestratorGITPullBool": True, # Turn off (RDP remember) orc + git pull + Turn on (rdp remember)
+                "RestartPCBool": True, # Send CMD to restart pc
+                "NothingBool":True # USe option if you dont want to give some access to the RDP controls
+            },
+            "ActivityDict": { # Empty dict - all access
+                "ActivityListExecuteBool": True,  # Execute activity at the current thread
+                "ActivityListAppendProcessorQueueBool": True  # Append activity to the processor queue
+            }
+        }
+
+    }
+    return lResultDict
+
+
+# Init the log dump to WEB
+# import pdb; pdb.set_trace()
+############################################
+def LoggerDumpLogHandlerAdd(inLogger, inGSettingsClientDict):
+    lL = inLogger
+    if len(lL.handlers) == 0:
+        mRobotLoggerFormatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
+    else:
+        mRobotLoggerFormatter = lL.handlers[0].formatter
+    mHandlerDumpLogList = LoggerHandlerDumpLogList.LoggerHandlerDumpLogList(inDict=inGSettingsClientDict,
+        inKeyStr="DumpLogList", inHashKeyStr="DumpLogListHashStr", inRowCountInt=inGSettingsClientDict[
+                                                                                "DumpLogListCountInt"])
+    mHandlerDumpLogList.setFormatter(mRobotLoggerFormatter)
+    lL.addHandler(mHandlerDumpLogList)
+
+# inModeStr:
+#   "BASIC" - create standart configuration
+from pyOpenRPA.Orchestrator.Utils import LoggerHandlerDumpLogList
+def Create(inModeStr="BASIC"):
+    if inModeStr=="BASIC":
+        lResult = __Create__() # Create settings
+        # Создать файл логирования
+        # add filemode="w" to overwrite
+        if not os.path.exists("Reports"):
+            os.makedirs("Reports")
+        ##########################
+        # Подготовка логгера Robot
+        #########################
+        mRobotLogger = lResult["Logger"]
+        mRobotLogger.setLevel(logging.INFO)
+        # create the logging file handler
+        mRobotLoggerFH = logging.FileHandler(
+            "Reports\\" + datetime.datetime.now().strftime("%Y_%m_%d") + ".log")
+        mRobotLoggerFormatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
+        mRobotLoggerFH.setFormatter(mRobotLoggerFormatter)
+        # add handler to logger object
+        mRobotLogger.addHandler(mRobotLoggerFH)
+        ####################Add console output
+        handler = logging.StreamHandler(sys.stdout)
+        handler.setFormatter(mRobotLoggerFormatter)
+        mRobotLogger.addHandler(handler)
+        ############################################
+        LoggerDumpLogHandlerAdd(inLogger=mRobotLogger, inGSettingsClientDict=lResult["Client"])
+        #mHandlerDumpLogList = LoggerHandlerDumpLogList.LoggerHandlerDumpLogList(inDict=lResult["Client"],
+        #                                                                        inKeyStr="DumpLogList",
+        #                                                                        inHashKeyStr="DumpLogListHashStr",
+        #                                                                        inRowCountInt=lResult["Client"][
+        #                                                                            "DumpLogListCountInt"])
+        #mHandlerDumpLogList.setFormatter(mRobotLoggerFormatter)
+        #mRobotLogger.addHandler(mHandlerDumpLogList)
+    return lResult # return the result dict
+
+
+
+ + +
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + \ No newline at end of file diff --git a/Wiki/ENG_Guide/html/Robot/Robot.html b/Wiki/ENG_Guide/html/Robot/Robot.html new file mode 100644 index 00000000..b70778d7 --- /dev/null +++ b/Wiki/ENG_Guide/html/Robot/Robot.html @@ -0,0 +1,223 @@ + + + + + + + + + + Description — pyOpenRPA v1.2.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Description

+

pyOpenRPA Robot is the python package.

+
+

pyOpenRPA Robot

+
+
+ + +
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + \ No newline at end of file diff --git a/Wiki/ENG_Guide/html/Studio/Studio.html b/Wiki/ENG_Guide/html/Studio/Studio.html new file mode 100644 index 00000000..fdf370a5 --- /dev/null +++ b/Wiki/ENG_Guide/html/Studio/Studio.html @@ -0,0 +1,220 @@ + + + + + + + + + + Description — pyOpenRPA v1.2.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Description

+

pyOpenRPA Studio is the executable process.

+
+ + +
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + \ No newline at end of file diff --git a/Wiki/ENG_Guide/html/_modules/index.html b/Wiki/ENG_Guide/html/_modules/index.html index d00f19cc..30ee0c8b 100644 --- a/Wiki/ENG_Guide/html/_modules/index.html +++ b/Wiki/ENG_Guide/html/_modules/index.html @@ -1,158 +1,208 @@ - - - - - - - Overview: module code - pyOpenRPA v1.2.0 documentation - - - - - - - - - - - - - - - - - Contents - - - - - - - - - Menu - - - - - - - - Expand - - - - - - - - - - - - -
-
-
- -
- -
- -
-
- -
-
- - -
-
+ + +
+ - - + + + +
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
    + +
  • »
  • + +
  • Overview: module code
  • + + +
  • + +
  • + +
+ + +
- +
+
+ +

All modules for which code is available

+ + +
+ +
+
+ +
+ +
+

+ © Copyright 2020, Ivan Maslov. + +

+
+ + + + Built with Sphinx using a + + theme + + provided by Read the Docs. + +
+
+
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/Wiki/ENG_Guide/html/_modules/pyOpenRPA/Orchestrator/__Orchestrator__.html b/Wiki/ENG_Guide/html/_modules/pyOpenRPA/Orchestrator/__Orchestrator__.html index c3413c96..33199616 100644 --- a/Wiki/ENG_Guide/html/_modules/pyOpenRPA/Orchestrator/__Orchestrator__.html +++ b/Wiki/ENG_Guide/html/_modules/pyOpenRPA/Orchestrator/__Orchestrator__.html @@ -1,131 +1,166 @@ - - - - - - - pyOpenRPA.Orchestrator.__Orchestrator__ - pyOpenRPA v1.2.0 documentation - - - - - - - - - - - - - - - - - Contents - - - - - - - - - Menu - - - - - - - - Expand - - - - - - - - - - - - -
-
-
- -
- -
- -
-
- -
-
-
- -

Source code for pyOpenRPA.Orchestrator.__Orchestrator__

+      
+
+
+      
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
    + +
  • »
  • + +
  • Module code »
  • + +
  • pyOpenRPA.Orchestrator.__Orchestrator__
  • + + +
  • + +
  • + +
+ + +
+
+
+
+ +

Source code for pyOpenRPA.Orchestrator.__Orchestrator__

 import subprocess, json, psutil, time, os, win32security, sys, base64, logging, ctypes #Get input argument
 from . import Server
 from . import Timer
@@ -136,7 +171,7 @@
 
 # ATTENTION! HERE IS NO Relative import because it will be imported dynamically
 # All function check the flag SessionIsWindowResponsibleBool == True else no cammand is processed
-# All functions can return None, Bool or Dict { "IsSuccessful": True }
+# All functions can return None, Bool or Dict { "IsSuccessful": True }
 from .RobotRDPActive import CMDStr # Create CMD Strings
 from .RobotRDPActive import Connector # RDP API
 
@@ -155,8 +190,8 @@
 
 # AGENT DEFS
 
-
[docs]def AgentActivityItemAdd(inGSettings, inHostNameStr, inUserStr, inActivityItemDict): - """ +
[docs]def AgentActivityItemAdd(inGSettings, inHostNameStr, inUserStr, inActivityItemDict): + """ Add activity in AgentDict. Check if item is created :param inGSettings: Global settings dict (singleton) @@ -164,16 +199,16 @@ :param inUserStr: User login, where agent is based :param inActivityItemDict: ActivityItem :return: sad - """ + """ lAgentDictItemKeyTurple = (inHostNameStr.upper(),inUserStr.upper()) - if lAgentDictItemKeyTurple not in inGSettings["AgentDict"]: - inGSettings["AgentDict"][lAgentDictItemKeyTurple] = SettingsTemplate.__AgentDictItemCreate__() - lThisAgentDict = inGSettings["AgentDict"][lAgentDictItemKeyTurple] - lThisAgentDict["ActivityList"].append(inActivityItemDict)
+ if lAgentDictItemKeyTurple not in inGSettings["AgentDict"]: + inGSettings["AgentDict"][lAgentDictItemKeyTurple] = SettingsTemplate.__AgentDictItemCreate__() + lThisAgentDict = inGSettings["AgentDict"][lAgentDictItemKeyTurple] + lThisAgentDict["ActivityList"].append(inActivityItemDict)
-
[docs]def AgentOSCMD(inGSettings, inHostNameStr, inUserStr, inCMDStr, inRunAsyncBool=True): - """ +
[docs]def AgentOSCMD(inGSettings, inHostNameStr, inUserStr, inCMDStr, inRunAsyncBool=True): + """ pyOpenRPA.Agent: Send CMD to OS. Result return to log + Orchestrator by the A2O connection def OSCMD(inCMDStr, inRunAsyncBool=True, inGSettings=None): Send to agent activity item to OSCMD @@ -183,19 +218,19 @@ :param inUserStr: :param inCMDStr: :param inRunAsyncBool: - """ + """ lActivityItemDict = { - "Def":"OSCMD", # def alias (look pyOpeRPA.Agent gSettings["ProcessorDict"]["AliasDefDict"]) - "ArgList":[], # Args list - "ArgDict":{"inCMDStr":inCMDStr,"inRunAsyncBool":inRunAsyncBool}, # Args dictionary - "ArgGSettings": "inGSettings", # Name of GSettings attribute: str (ArgDict) or index (for ArgList) - "ArgLogger": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList) + "Def":"OSCMD", # def alias (look pyOpeRPA.Agent gSettings["ProcessorDict"]["AliasDefDict"]) + "ArgList":[], # Args list + "ArgDict":{"inCMDStr":inCMDStr,"inRunAsyncBool":inRunAsyncBool}, # Args dictionary + "ArgGSettings": "inGSettings", # Name of GSettings attribute: str (ArgDict) or index (for ArgList) + "ArgLogger": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList) } #Send item in AgentDict for the futher data transmition AgentActivityItemAdd(inGSettings=inGSettings, inHostNameStr=inHostNameStr, inUserStr=inUserStr, inActivityItemDict=lActivityItemDict)
-
[docs]def AgentOSFileBinaryDataBytesCreate(inGSettings, inHostNameStr, inUserStr, inFilePathStr, inFileDataBytes): - """ +
[docs]def AgentOSFileBinaryDataBytesCreate(inGSettings, inHostNameStr, inUserStr, inFilePathStr, inFileDataBytes): + """ pyOpenRPA.Agent: Create binary file by the base64 string (safe for JSON transmition) def OSFileBinaryDataBase64StrCreate(inFilePathStr, inFileDataBase64Str,inGSettings = None): Send binary file to Agent (Bytes) @@ -205,22 +240,22 @@ :param inUserStr: :param inFilePathStr: :param inFileDataBytes: - """ + """ - lFileDataBase64Str = base64.b64encode(inFileDataBytes).decode("utf-8") + lFileDataBase64Str = base64.b64encode(inFileDataBytes).decode("utf-8") lActivityItemDict = { - "Def":"OSFileBinaryDataBase64StrCreate", # def alias (look pyOpeRPA.Agent gSettings["ProcessorDict"]["AliasDefDict"]) - "ArgList":[], # Args list - "ArgDict":{"inFilePathStr":inFilePathStr,"inFileDataBase64Str":lFileDataBase64Str}, # Args dictionary - "ArgGSettings": "inGSettings", # Name of GSettings attribute: str (ArgDict) or index (for ArgList) - "ArgLogger": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList) + "Def":"OSFileBinaryDataBase64StrCreate", # def alias (look pyOpeRPA.Agent gSettings["ProcessorDict"]["AliasDefDict"]) + "ArgList":[], # Args list + "ArgDict":{"inFilePathStr":inFilePathStr,"inFileDataBase64Str":lFileDataBase64Str}, # Args dictionary + "ArgGSettings": "inGSettings", # Name of GSettings attribute: str (ArgDict) or index (for ArgList) + "ArgLogger": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList) } #Send item in AgentDict for the futher data transmition AgentActivityItemAdd(inGSettings=inGSettings, inHostNameStr=inHostNameStr, inUserStr=inUserStr, inActivityItemDict=lActivityItemDict)
-
[docs]def AgentOSFileBinaryDataBase64StrCreate(inGSettings, inHostNameStr, inUserStr, inFilePathStr, inFileDataBase64Str): - """ +
[docs]def AgentOSFileBinaryDataBase64StrCreate(inGSettings, inHostNameStr, inUserStr, inFilePathStr, inFileDataBase64Str): + """ pyOpenRPA.Agent: Create binary file by the base64 string (safe for JSON transmission) def OSFileBinaryDataBase64StrCreate(inFilePathStr, inFileDataBase64Str,inGSettings = None): Send binary file to Agent (base64 string) @@ -230,23 +265,23 @@ :param inUserStr: :param inFilePathStr: :param inFileDataBase64Str: - """ + """ lActivityItemDict = { - "Def":"OSFileBinaryDataBase64StrCreate", # def alias (look pyOpeRPA.Agent gSettings["ProcessorDict"]["AliasDefDict"]) - "ArgList":[], # Args list - "ArgDict":{"inFilePathStr":inFilePathStr,"inFileDataBase64Str":inFileDataBase64Str}, # Args dictionary - "ArgGSettings": "inGSettings", # Name of GSettings attribute: str (ArgDict) or index (for ArgList) - "ArgLogger": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList) + "Def":"OSFileBinaryDataBase64StrCreate", # def alias (look pyOpeRPA.Agent gSettings["ProcessorDict"]["AliasDefDict"]) + "ArgList":[], # Args list + "ArgDict":{"inFilePathStr":inFilePathStr,"inFileDataBase64Str":inFileDataBase64Str}, # Args dictionary + "ArgGSettings": "inGSettings", # Name of GSettings attribute: str (ArgDict) or index (for ArgList) + "ArgLogger": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList) } #Send item in AgentDict for the futher data transmition AgentActivityItemAdd(inGSettings=inGSettings, inHostNameStr=inHostNameStr, inUserStr=inUserStr, inActivityItemDict=lActivityItemDict)
# Send text file to Agent (string) -
[docs]def AgentOSFileTextDataStrCreate(inGSettings, inHostNameStr, inUserStr, inFilePathStr, inFileDataStr, inEncodingStr = "utf-8"): - """ +
[docs]def AgentOSFileTextDataStrCreate(inGSettings, inHostNameStr, inUserStr, inFilePathStr, inFileDataStr, inEncodingStr = "utf-8"): + """ pyOpenRPA.Agent: Create text file by the string - def OSFileTextDataStrCreate(inFilePathStr, inFileDataStr, inEncodingStr = "utf-8",inGSettings = None): + def OSFileTextDataStrCreate(inFilePathStr, inFileDataStr, inEncodingStr = "utf-8",inGSettings = None): Create Activity Item for the agent :param inGSettings: Global settings dict (singleton) @@ -255,28 +290,28 @@ :param inFilePathStr: :param inFileDataStr: :param inEncodingStr: - """ + """ lActivityItemDict = { - "Def":"OSFileTextDataStrCreate", # def alias (look pyOpeRPA.Agent gSettings["ProcessorDict"]["AliasDefDict"]) - "ArgList":[], # Args list - "ArgDict":{"inFilePathStr":inFilePathStr,"inFileDataStr":inFileDataStr, "inEncodingStr": inEncodingStr}, # Args dictionary - "ArgGSettings": "inGSettings", # Name of GSettings attribute: str (ArgDict) or index (for ArgList) - "ArgLogger": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList) + "Def":"OSFileTextDataStrCreate", # def alias (look pyOpeRPA.Agent gSettings["ProcessorDict"]["AliasDefDict"]) + "ArgList":[], # Args list + "ArgDict":{"inFilePathStr":inFilePathStr,"inFileDataStr":inFileDataStr, "inEncodingStr": inEncodingStr}, # Args dictionary + "ArgGSettings": "inGSettings", # Name of GSettings attribute: str (ArgDict) or index (for ArgList) + "ArgLogger": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList) } #Send item in AgentDict for the futher data transmition AgentActivityItemAdd(inGSettings=inGSettings, inHostNameStr=inHostNameStr, inUserStr=inUserStr, inActivityItemDict=lActivityItemDict)
# OS DEFS -
[docs]def OSCredentialsVerify(inUserStr, inPasswordStr, inDomainStr=""): ## - """ +
[docs]def OSCredentialsVerify(inUserStr, inPasswordStr, inDomainStr=""): ## + """ Verify user credentials in windows. Return bool :param inUserStr: :param inPasswordStr: :param inDomainStr: :return: True - Credentials are actual; False - Credentials are not actual - """ + """ try: hUser = win32security.LogonUser( inUserStr,inDomainStr, inPasswordStr, @@ -287,90 +322,90 @@ else: return True
-
[docs]def OSCMD(inCMDStr, inRunAsyncBool=True, inLogger = None): - """ +
[docs]def OSCMD(inCMDStr, inRunAsyncBool=True, inLogger = None): + """ OS send command in shell locally :param inCMDStr: :param inRunAsyncBool: :param inLogger: :return: CMD result string - """ - lResultStr = "" + """ + lResultStr = "" # Subdef to listen OS result def _CMDRunAndListenLogs(inCMDStr, inLogger): - lResultStr = "" + lResultStr = "" lOSCMDKeyStr = str(uuid.uuid4())[0:4].upper() - lCMDProcess = subprocess.Popen(f'cmd /c {inCMDStr}', stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + lCMDProcess = subprocess.Popen(f'cmd /c {inCMDStr}', stdout=subprocess.PIPE, stderr=subprocess.STDOUT) if inLogger: lListenBool = True - inLogger.info(f"{lOSCMDKeyStr}: # # # # CMD Process has been STARTED # # # # ") - inLogger.info(f"{lOSCMDKeyStr}: {inCMDStr}") + inLogger.info(f"{lOSCMDKeyStr}: # # # # CMD Process has been STARTED # # # # ") + inLogger.info(f"{lOSCMDKeyStr}: {inCMDStr}") while lListenBool: lOutputLineBytes = lCMDProcess.stdout.readline() - if lOutputLineBytes == b"": + if lOutputLineBytes == b"": lListenBool = False - lStr = lOutputLineBytes.decode('cp866') - if lStr.endswith("\n"): lStr = lStr[:-1] - inLogger.info(f"{lOSCMDKeyStr}: {lStr}") + lStr = lOutputLineBytes.decode('cp866') + if lStr.endswith("\n"): lStr = lStr[:-1] + inLogger.info(f"{lOSCMDKeyStr}: {lStr}") lResultStr+=lStr - inLogger.info(f"{lOSCMDKeyStr}: # # # # CMD Process has been FINISHED # # # # ") + inLogger.info(f"{lOSCMDKeyStr}: # # # # CMD Process has been FINISHED # # # # ") return lResultStr # New call if inRunAsyncBool: - lThread = threading.Thread(target=_CMDRunAndListenLogs, kwargs={"inCMDStr":inCMDStr, "inLogger":inLogger}) + lThread = threading.Thread(target=_CMDRunAndListenLogs, kwargs={"inCMDStr":inCMDStr, "inLogger":inLogger}) lThread.start() - lResultStr="ActivityList has been started in async mode - no output is available here." + lResultStr="ActivityList has been started in async mode - no output is available here." else: lResultStr = _CMDRunAndListenLogs(inCMDStr=inCMDStr, inLogger=inLogger) - #lCMDCode = "cmd /c " + inCMDStr + #lCMDCode = "cmd /c " + inCMDStr #subprocess.Popen(lCMDCode) #lResultCMDRun = 1 # os.system(lCMDCode) return lResultStr
-
[docs]def OrchestratorRestart(inGSettings=None): - """ +
[docs]def OrchestratorRestart(inGSettings=None): + """ Orchestrator restart :param inGSettings: Global settings dict (singleton) - """ + """ OrchestratorSessionSave(inGSettings=inGSettings) # Dump RDP List in file json if inGSettings is not None: - lL = inGSettings["Logger"] - if lL: lL.info(f"Do restart") + lL = inGSettings["Logger"] + if lL: lL.info(f"Do restart") # Restart session os.execl(sys.executable, os.path.abspath(__file__), *sys.argv) sys.exit(0)
-
[docs]def OrchestratorSessionSave(inGSettings=None): - """ - Orchestrator session save in file _SessionLast_RDPList.json (encoding = "utf-8") +
[docs]def OrchestratorSessionSave(inGSettings=None): + """ + Orchestrator session save in file _SessionLast_RDPList.json (encoding = "utf-8") :param inGSettings: Global settings dict (singleton) :return: True every time - """ + """ # Dump RDP List in file json - lFile = open("_SessionLast_RDPList.json", "w", encoding="utf-8") - lFile.write(json.dumps(inGSettings["RobotRDPActive"]["RDPList"])) # dump json to file + lFile = open("_SessionLast_RDPList.json", "w", encoding="utf-8") + lFile.write(json.dumps(inGSettings["RobotRDPActive"]["RDPList"])) # dump json to file lFile.close() # Close the file if inGSettings is not None: - lL = inGSettings["Logger"] + lL = inGSettings["Logger"] if lL: lL.info( - f"Orchestrator has dump the RDP list before the restart.") + f"Orchestrator has dump the RDP list before the restart.") return True
-
[docs]def UACKeyListCheck(inRequest, inRoleKeyList) -> bool: - """ +
[docs]def UACKeyListCheck(inRequest, inRoleKeyList) -> bool: + """ Check is client is has access for the key list :param inRequest: :param inRoleKeyList: :return: bool - """ + """ return inRequest.UACClientCheck(inRoleKeyList=inRoleKeyList)
-
[docs]def UACUpdate(inGSettings, inADLoginStr, inADStr="", inADIsDefaultBool=True, inURLList=None, inRoleHierarchyAllowedDict=None): - """ +
[docs]def UACUpdate(inGSettings, inADLoginStr, inADStr="", inADIsDefaultBool=True, inURLList=None, inRoleHierarchyAllowedDict=None): + """ Update user access (UAC) :param inGSettings: Global settings dict (singleton) @@ -379,42 +414,42 @@ :param inADIsDefaultBool: :param inURLList: :param inRoleHierarchyAllowedDict: - """ - lUserTurple = (inADStr.upper(),inADLoginStr.upper()) # Create turple key for inGSettings["ServerDict"]["AccessUsers"]["RuleDomainUserDict"] + """ + lUserTurple = (inADStr.upper(),inADLoginStr.upper()) # Create turple key for inGSettings["ServerDict"]["AccessUsers"]["RuleDomainUserDict"] if inURLList is None: inURLList = [] # Check if None if inRoleHierarchyAllowedDict is None: inRoleHierarchyAllowedDict = {} # Check if None # Get the old URLList try: - inURLList += inGSettings["ServerDict"]["AccessUsers"]["RuleDomainUserDict"][lUserTurple]["MethodMatchURLBeforeList"] + inURLList += inGSettings["ServerDict"]["AccessUsers"]["RuleDomainUserDict"][lUserTurple]["MethodMatchURLBeforeList"] except: pass # Check RoleHierarchyAllowedDict in gSettings for the old role hierarchy - include in result. - if lUserTurple in inGSettings["ServerDict"]["AccessUsers"]["RuleDomainUserDict"] and "RoleHierarchyAllowedDict" in inGSettings["ServerDict"]["AccessUsers"]["RuleDomainUserDict"][lUserTurple]: - lRoleHierarchyAllowedOLDDict = inGSettings["ServerDict"]["AccessUsers"]["RuleDomainUserDict"][lUserTurple]["RoleHierarchyAllowedDict"] + if lUserTurple in inGSettings["ServerDict"]["AccessUsers"]["RuleDomainUserDict"] and "RoleHierarchyAllowedDict" in inGSettings["ServerDict"]["AccessUsers"]["RuleDomainUserDict"][lUserTurple]: + lRoleHierarchyAllowedOLDDict = inGSettings["ServerDict"]["AccessUsers"]["RuleDomainUserDict"][lUserTurple]["RoleHierarchyAllowedDict"] Server.__ComplexDictMerge2to1__(in1Dict=inRoleHierarchyAllowedDict, in2Dict=lRoleHierarchyAllowedOLDDict) # Merge dict 2 into dict 1 # Create Access item lRuleDomainUserDict = { - "MethodMatchURLBeforeList": inURLList, - "RoleHierarchyAllowedDict": inRoleHierarchyAllowedDict + "MethodMatchURLBeforeList": inURLList, + "RoleHierarchyAllowedDict": inRoleHierarchyAllowedDict } # Case add domain + user - inGSettings["ServerDict"]["AccessUsers"]["RuleDomainUserDict"].update({(inADStr.upper(),inADLoginStr.upper()):lRuleDomainUserDict}) + inGSettings["ServerDict"]["AccessUsers"]["RuleDomainUserDict"].update({(inADStr.upper(),inADLoginStr.upper()):lRuleDomainUserDict}) if inADIsDefaultBool: # Case add default domain + user - inGSettings["ServerDict"]["AccessUsers"]["RuleDomainUserDict"].update({("",inADLoginStr.upper()):lRuleDomainUserDict})
+ inGSettings["ServerDict"]["AccessUsers"]["RuleDomainUserDict"].update({("",inADLoginStr.upper()):lRuleDomainUserDict})
-
[docs]def UACSuperTokenUpdate(inGSettings, inSuperTokenStr): - """ +
[docs]def UACSuperTokenUpdate(inGSettings, inSuperTokenStr): + """ Add supertoken for the all access (it is need for the robot communication without human) :param inGSettings: Global settings dict (singleton) :param inSuperTokenStr: - """ - lLoginStr = "SUPERTOKEN" + """ + lLoginStr = "SUPERTOKEN" UACUpdate(inGSettings=inGSettings, inADLoginStr=lLoginStr) - inGSettings["ServerDict"]["AccessUsers"]["AuthTokensDict"].update( - {inSuperTokenStr:{"User":lLoginStr, "Domain":"", "TokenDatetime": datetime.datetime.now(), "FlagDoNotExpire":True}} + inGSettings["ServerDict"]["AccessUsers"]["AuthTokensDict"].update( + {inSuperTokenStr:{"User":lLoginStr, "Domain":"", "TokenDatetime": datetime.datetime.now(), "FlagDoNotExpire":True}} )
# # # # # # # # # # # # # # # # # # # # # # # @@ -422,14 +457,14 @@ # # # # # # # # # # # # # # # # # # # # # # # -
[docs]def WebURLConnectDef(inGSettings, inMethodStr, inURLStr, inMatchTypeStr, inDef, inContentTypeStr="application/octet-stream"): - """ +
[docs]def WebURLConnectDef(inGSettings, inMethodStr, inURLStr, inMatchTypeStr, inDef, inContentTypeStr="application/octet-stream"): + """ Connect URL to DEF - "inMethodStr":"GET|POST", - "inURLStr": "/index", #URL of the request - "inMatchTypeStr": "", #"BeginWith|Contains|Equal|EqualCase", - "inContentTypeStr": "", #HTTP Content-type - "inDef": None #Function with str result + "inMethodStr":"GET|POST", + "inURLStr": "/index", #URL of the request + "inMatchTypeStr": "", #"BeginWith|Contains|Equal|EqualCase", + "inContentTypeStr": "", #HTTP Content-type + "inDef": None #Function with str result :param inGSettings: Global settings dict (singleton) :param inMethodStr: @@ -437,57 +472,57 @@ :param inMatchTypeStr: :param inDef: :param inContentTypeStr: - """ + """ lURLItemDict = { - "Method": inMethodStr.upper(), - "URL": inURLStr, # URL of the request - "MatchType": inMatchTypeStr, # "BeginWith|Contains|Equal|EqualCase", - # "ResponseFilePath": "", #Absolute or relative path - #"ResponseFolderPath": "C:\Abs\Archive\scopeSrcUL\OpenRPA\Orchestrator\Settings", + "Method": inMethodStr.upper(), + "URL": inURLStr, # URL of the request + "MatchType": inMatchTypeStr, # "BeginWith|Contains|Equal|EqualCase", + # "ResponseFilePath": "", #Absolute or relative path + #"ResponseFolderPath": "C:\Abs\Archive\scopeSrcUL\OpenRPA\Orchestrator\Settings", # Absolute or relative path - "ResponseContentType": inContentTypeStr, #HTTP Content-type - "ResponseDefRequestGlobal": inDef #Function with str result + "ResponseContentType": inContentTypeStr, #HTTP Content-type + "ResponseDefRequestGlobal": inDef #Function with str result } - inGSettings["ServerDict"]["URLList"].append(lURLItemDict)
+ inGSettings["ServerDict"]["URLList"].append(lURLItemDict)
-
[docs]def WebURLConnectFolder(inGSettings, inMethodStr, inURLStr, inMatchTypeStr, inFolderPathStr): - """ +
[docs]def WebURLConnectFolder(inGSettings, inMethodStr, inURLStr, inMatchTypeStr, inFolderPathStr): + """ Connect URL to Folder - "inMethodStr":"GET|POST", - "inURLStr": "/Folder/", #URL of the request - "inMatchTypeStr": "", #"BeginWith|Contains|Equal|EqualCase", - "inFolderPathStr": "", #Absolute or relative path + "inMethodStr":"GET|POST", + "inURLStr": "/Folder/", #URL of the request + "inMatchTypeStr": "", #"BeginWith|Contains|Equal|EqualCase", + "inFolderPathStr": "", #Absolute or relative path :param inGSettings: Global settings dict (singleton) :param inMethodStr: :param inURLStr: :param inMatchTypeStr: :param inFolderPathStr: - """ - # Check if last symbol is "/" - append if not exist + """ + # Check if last symbol is "/" - append if not exist lFolderPathStr = os.path.abspath(inFolderPathStr) - if lFolderPathStr[-1]!="/":lFolderPathStr+="/" + if lFolderPathStr[-1]!="/":lFolderPathStr+="/" # Prepare URLItem lURLItemDict = { - "Method": inMethodStr.upper(), - "URL": inURLStr, # URL of the request - "MatchType": inMatchTypeStr, # "BeginWith|Contains|Equal|EqualCase", - # "ResponseFilePath": "", #Absolute or relative path - "ResponseFolderPath": lFolderPathStr, # Absolute or relative path - "ResponseContentType": "application/octet-stream", #HTTP Content-type - #"ResponseDefRequestGlobal": inDef #Function with str result + "Method": inMethodStr.upper(), + "URL": inURLStr, # URL of the request + "MatchType": inMatchTypeStr, # "BeginWith|Contains|Equal|EqualCase", + # "ResponseFilePath": "", #Absolute or relative path + "ResponseFolderPath": lFolderPathStr, # Absolute or relative path + "ResponseContentType": "application/octet-stream", #HTTP Content-type + #"ResponseDefRequestGlobal": inDef #Function with str result } - inGSettings["ServerDict"]["URLList"].append(lURLItemDict)
+ inGSettings["ServerDict"]["URLList"].append(lURLItemDict)
-
[docs]def WebURLConnectFile(inGSettings, inMethodStr, inURLStr, inMatchTypeStr, inFilePathStr, inContentTypeStr="application/octet-stream"): - """ +
[docs]def WebURLConnectFile(inGSettings, inMethodStr, inURLStr, inMatchTypeStr, inFilePathStr, inContentTypeStr="application/octet-stream"): + """ Connect URL to File - "inMethodStr":"GET|POST", - "inURLStr": "/index", #URL of the request - "inMatchTypeStr": "", #"BeginWith|Contains|Equal|EqualCase", - "inFolderPathStr": "", #Absolute or relative path + "inMethodStr":"GET|POST", + "inURLStr": "/index", #URL of the request + "inMatchTypeStr": "", #"BeginWith|Contains|Equal|EqualCase", + "inFolderPathStr": "", #Absolute or relative path :param inGSettings: Global settings dict (singleton) :param inMethodStr: @@ -495,20 +530,20 @@ :param inMatchTypeStr: :param inFilePathStr: :param inContentTypeStr: - """ + """ lURLItemDict = { - "Method": inMethodStr.upper(), - "URL": inURLStr, # URL of the request - "MatchType": inMatchTypeStr, # "BeginWith|Contains|Equal|EqualCase", - "ResponseFilePath": os.path.abspath(inFilePathStr), #Absolute or relative path - #"ResponseFolderPath": os.path.abspath(inFilePathStr), # Absolute or relative path - "ResponseContentType": inContentTypeStr, #HTTP Content-type - #"ResponseDefRequestGlobal": inDef #Function with str result + "Method": inMethodStr.upper(), + "URL": inURLStr, # URL of the request + "MatchType": inMatchTypeStr, # "BeginWith|Contains|Equal|EqualCase", + "ResponseFilePath": os.path.abspath(inFilePathStr), #Absolute or relative path + #"ResponseFolderPath": os.path.abspath(inFilePathStr), # Absolute or relative path + "ResponseContentType": inContentTypeStr, #HTTP Content-type + #"ResponseDefRequestGlobal": inDef #Function with str result } - inGSettings["ServerDict"]["URLList"].append(lURLItemDict)
+ inGSettings["ServerDict"]["URLList"].append(lURLItemDict)
-
[docs]def WebCPUpdate(inGSettings, inCPKeyStr, inHTMLRenderDef=None, inJSONGeneratorDef=None, inJSInitGeneratorDef=None): - """ +
[docs]def WebCPUpdate(inGSettings, inCPKeyStr, inHTMLRenderDef=None, inJSONGeneratorDef=None, inJSInitGeneratorDef=None): + """ Add control panel HTML, JSON generator or JS when page init :param inGSettings: Global settings dict (singleton) @@ -516,63 +551,63 @@ :param inHTMLRenderDef: :param inJSONGeneratorDef: :param inJSInitGeneratorDef: - """ + """ # Create Struct if the re is current key - if inCPKeyStr not in inGSettings["CPDict"]: - inGSettings["CPDict"][inCPKeyStr] = {"HTMLRenderDef": None,"JSONGeneratorDef": None, "JSInitGeneratorDef": None} + if inCPKeyStr not in inGSettings["CPDict"]: + inGSettings["CPDict"][inCPKeyStr] = {"HTMLRenderDef": None,"JSONGeneratorDef": None, "JSInitGeneratorDef": None} # CASE HTMLRender if inHTMLRenderDef is not None: - inGSettings["CPDict"][inCPKeyStr]["HTMLRenderDef"]=inHTMLRenderDef + inGSettings["CPDict"][inCPKeyStr]["HTMLRenderDef"]=inHTMLRenderDef # CASE JSONGenerator if inJSONGeneratorDef is not None: - inGSettings["CPDict"][inCPKeyStr]["JSONGeneratorDef"] = inJSONGeneratorDef + inGSettings["CPDict"][inCPKeyStr]["JSONGeneratorDef"] = inJSONGeneratorDef # CASE JSInitGeneratorDef if inJSInitGeneratorDef is not None: - inGSettings["CPDict"][inCPKeyStr]["JSInitGeneratorDef"] = inJSInitGeneratorDef
+ inGSettings["CPDict"][inCPKeyStr]["JSInitGeneratorDef"] = inJSInitGeneratorDef
-
[docs]def WebUserInfoGet(inRequest): - """ +
[docs]def WebUserInfoGet(inRequest): + """ Return User info about request :param inRequest: - :return: {"DomainUpperStr": "", "UserNameUpperStr": ""} - """ - lDomainUpperStr = inRequest.OpenRPA["Domain"].upper() - lUserUpperStr = inRequest.OpenRPA["User"].upper() - return {"DomainUpperStr": lDomainUpperStr, "UserNameUpperStr": lUserUpperStr}
- -
[docs]def WebUserIsSuperToken(inRequest, inGSettings): - """ + :return: {"DomainUpperStr": "", "UserNameUpperStr": ""} + """ + lDomainUpperStr = inRequest.OpenRPA["Domain"].upper() + lUserUpperStr = inRequest.OpenRPA["User"].upper() + return {"DomainUpperStr": lDomainUpperStr, "UserNameUpperStr": lUserUpperStr}
+ +
[docs]def WebUserIsSuperToken(inRequest, inGSettings): + """ Return bool if request is authentificated with supetoken (token which is never expires) :param inRequest: :param inGSettings: Global settings dict (singleton) :return: bool True - is supertoken; False - is not supertoken - """ + """ lIsSuperTokenBool = False # Get Flag is supertoken (True|False) - lIsSuperTokenBool = inGSettings.get("ServerDict", {}).get("AccessUsers", {}).get("AuthTokensDict", {}).get(inRequest.OpenRPA["AuthToken"], {}).get("FlagDoNotExpire", False) + lIsSuperTokenBool = inGSettings.get("ServerDict", {}).get("AccessUsers", {}).get("AuthTokensDict", {}).get(inRequest.OpenRPA["AuthToken"], {}).get("FlagDoNotExpire", False) return lIsSuperTokenBool
-
[docs]def WebUserUACHierarchyGet(inRequest): - """ +
[docs]def WebUserUACHierarchyGet(inRequest): + """ Return User UAC Hierarchy DICT Return {...} :param inRequest: :return: UAC Dict {} - """ + """ return inRequest.UserRoleHierarchyGet()
## GSettings defs -
[docs]def GSettingsKeyListValueSet(inGSettings, inValue, inKeyList=None): - """ +
[docs]def GSettingsKeyListValueSet(inGSettings, inValue, inKeyList=None): + """ Set value in GSettings by the key list :param inGSettings: Global settings dict (singleton) :param inValue: :param inKeyList: :return: bool - """ + """ if inKeyList is None: inKeyList = [] lDict = inGSettings for lItem2 in inKeyList[:-1]: @@ -585,14 +620,14 @@ lDict[inKeyList[-1]] = inValue #Set value return True
-
[docs]def GSettingsKeyListValueGet(inGSettings, inKeyList=None): - """ +
[docs]def GSettingsKeyListValueGet(inGSettings, inKeyList=None): + """ Get the value from the GSettings by the key list :param inGSettings: Global settings dict (singleton) :param inKeyList: :return: value any type - """ + """ if inKeyList is None: inKeyList = [] lDict = inGSettings for lItem2 in inKeyList[:-1]: @@ -604,15 +639,15 @@ lDict=lDict[lItem2] return lDict.get(inKeyList[-1],None)
-
[docs]def GSettingsKeyListValueAppend(inGSettings, inValue, inKeyList=None): - """ +
[docs]def GSettingsKeyListValueAppend(inGSettings, inValue, inKeyList=None): + """ Append value in GSettings by the key list :param inGSettings: Global settings dict (singleton) :param inValue: :param inKeyList: :return: True every time - """ + """ if inKeyList is None: inKeyList = [] lDict = inGSettings for lItem2 in inKeyList[:-1]: @@ -625,15 +660,15 @@ lDict[inKeyList[-1]].append(inValue) #Set value return True
-
[docs]def GSettingsKeyListValueOperatorPlus(inGSettings, inValue, inKeyList=None): - """ +
[docs]def GSettingsKeyListValueOperatorPlus(inGSettings, inValue, inKeyList=None): + """ Operator plus value in GSettings by the key list :param inGSettings: Global settings dict (singleton) :param inValue: :param inKeyList: :return: True every time - """ + """ if inKeyList is None: inKeyList = [] lDict = inGSettings for lItem2 in inKeyList[:-1]: @@ -646,38 +681,39 @@ lDict[inKeyList[-1]] += inValue #Set value return True
-
[docs]def ProcessorAliasDefCreate(inGSettings, inDef, inAliasStr=None): - """ +
[docs]def ProcessorAliasDefCreate(inGSettings, inDef, inAliasStr=None): + """ Create alias for def (can be used in ActivityItem in field Def) :param inGSettings: Global settings dict (singleton) :param inDef: :param inAliasStr: :return: str Alias - """ - lL = inGSettings["Logger"] + """ + lL = inGSettings["Logger"] if inAliasStr is None: inAliasStr = str(inDef) # Check if key is not exists - if inAliasStr in inGSettings["ProcessorDict"]["AliasDefDict"]: + if inAliasStr in inGSettings["ProcessorDict"]["AliasDefDict"]: inAliasStr = str(inDef) - if lL: lL.warning(f"Orchestrator.ProcessorAliasDefCreate: Alias {inAliasStr} already exists in alias dictionary. Another alias will be generated and returned") - inGSettings["ProcessorDict"]["AliasDefDict"][inAliasStr] = inDef + if lL: lL.warning(f"Orchestrator.ProcessorAliasDefCreate: Alias {inAliasStr} already exists in alias dictionary. Another alias will be generated and returned") + inGSettings["ProcessorDict"]["AliasDefDict"][inAliasStr] = inDef return inAliasStr
-
[docs]def ProcessorAliasDefUpdate(inGSettings, inDef, inAliasStr): - """ +
[docs]def ProcessorAliasDefUpdate(inGSettings, inDef, inAliasStr): + """ Update alias for def (can be used in ActivityItem in field Def) :param inGSettings: Global settings dict (singleton) :param inDef: :param inAliasStr: :return: str Alias - """ - inGSettings["ProcessorDict"]["AliasDefDict"][inAliasStr] = inDef + """ + if callable(inDef): inGSettings["ProcessorDict"]["AliasDefDict"][inAliasStr] = inDef + else: raise Exception(f"pyOpenRPA Exception: You can't use Orchestrator.ProcessorAliasDefUpdate with arg 'inDef' string value. inDef is '{inDef}', inAliasStr is '{inAliasStr}'") return inAliasStr
-
[docs]def ProcessorActivityItemCreate(inDef, inArgList=None, inArgDict=None, inArgGSettingsStr=None, inArgLoggerStr=None): - """ +
[docs]def ProcessorActivityItemCreate(inDef, inArgList=None, inArgDict=None, inArgGSettingsStr=None, inArgLoggerStr=None): + """ Create ActivityItem :param inDef: @@ -686,20 +722,20 @@ :param inArgGSettingsStr: :param inArgLoggerStr: :return: {} - """ + """ if inArgList is None: inArgList=[] if inArgDict is None: inArgDict={} lActivityItemDict= { - "Def":inDef, # def link or def alias (look gSettings["Processor"]["AliasDefDict"]) - "ArgList":inArgList, # Args list - "ArgDict":inArgDict, # Args dictionary - "ArgGSettings": inArgGSettingsStr, # Name of GSettings attribute: str (ArgDict) or index (for ArgList) - "ArgLogger": inArgLoggerStr # Name of GSettings attribute: str (ArgDict) or index (for ArgList) + "Def":inDef, # def link or def alias (look gSettings["Processor"]["AliasDefDict"]) + "ArgList":inArgList, # Args list + "ArgDict":inArgDict, # Args dictionary + "ArgGSettings": inArgGSettingsStr, # Name of GSettings attribute: str (ArgDict) or index (for ArgList) + "ArgLogger": inArgLoggerStr # Name of GSettings attribute: str (ArgDict) or index (for ArgList) } return lActivityItemDict
-
[docs]def ProcessorActivityItemAppend(inGSettings, inDef, inArgList=None, inArgDict=None, inArgGSettingsStr=None, inArgLoggerStr=None): - """ +
[docs]def ProcessorActivityItemAppend(inGSettings, inDef, inArgList=None, inArgDict=None, inArgGSettingsStr=None, inArgLoggerStr=None): + """ Add Activity item in Processor list :param inGSettings: Global settings dict (singleton) @@ -708,28 +744,28 @@ :param inArgDict: :param inArgGSettingsStr: :param inArgLoggerStr: - """ + """ if inArgList is None: inArgList=[] if inArgDict is None: inArgDict={} lActivityList=[ { - "Def":inDef, # def link or def alias (look gSettings["Processor"]["AliasDefDict"]) - "ArgList":inArgList, # Args list - "ArgDict":inArgDict, # Args dictionary - "ArgGSettings": inArgGSettingsStr, # Name of GSettings attribute: str (ArgDict) or index (for ArgList) - "ArgLogger": inArgLoggerStr # Name of GSettings attribute: str (ArgDict) or index (for ArgList) - }, + "Def":inDef, # def link or def alias (look gSettings["Processor"]["AliasDefDict"]) + "ArgList":inArgList, # Args list + "ArgDict":inArgDict, # Args dictionary + "ArgGSettings": inArgGSettingsStr, # Name of GSettings attribute: str (ArgDict) or index (for ArgList) + "ArgLogger": inArgLoggerStr # Name of GSettings attribute: str (ArgDict) or index (for ArgList) + } ] - inGSettings["ProcessorDict"]["ActivityList"]+=lActivityList
+ inGSettings["ProcessorDict"]["ActivityList"]+=lActivityList
## Process defs -
[docs]def ProcessIsStarted(inProcessNameWOExeStr): # Check if process is started - """ +
[docs]def ProcessIsStarted(inProcessNameWOExeStr): # Check if process is started + """ Check if there is any running process that contains the given name processName. :param inProcessNameWOExeStr: :return: True - process is running; False - process is not running - """ + """ #Iterate over the all the running process for proc in psutil.process_iter(): try: @@ -740,22 +776,22 @@ pass return False
-
[docs]def ProcessStart(inPathStr, inArgList, inStopProcessNameWOExeStr=None): - """ +
[docs]def ProcessStart(inPathStr, inArgList, inStopProcessNameWOExeStr=None): + """ Start process locally [optional: if task name is not started] :param inPathStr: :param inArgList: :param inStopProcessNameWOExeStr: - """ + """ lStartProcessBool = True if inStopProcessNameWOExeStr is not None: #Check if process running lCheckTaskName = inStopProcessNameWOExeStr if len(lCheckTaskName)>4: - if lCheckTaskName[-4:].upper() != ".EXE": - lCheckTaskName = lCheckTaskName+".exe" + if lCheckTaskName[-4:].upper() != ".EXE": + lCheckTaskName = lCheckTaskName+".exe" else: - lCheckTaskName = lCheckTaskName+".exe" + lCheckTaskName = lCheckTaskName+".exe" #Check if process exist if not ProcessIsStarted(inProcessNameWOExeStr=lCheckTaskName): lStartProcessBool=True @@ -764,68 +800,68 @@ lItemArgs.extend(inArgList) subprocess.Popen(lItemArgs,shell=True)
-
[docs]def ProcessStop(inProcessNameWOExeStr, inCloseForceBool, inUserNameStr = "%username%"): - """ +
[docs]def ProcessStop(inProcessNameWOExeStr, inCloseForceBool, inUserNameStr = "%username%"): + """ Stop process :param inProcessNameWOExeStr: :param inCloseForceBool: :param inUserNameStr: :return: - """ + """ # Support input arg if with .exe lProcessNameWExeStr = inProcessNameWOExeStr if len(lProcessNameWExeStr) > 4: - if lProcessNameWExeStr[-4:].upper() != ".EXE": - lProcessNameWExeStr = lProcessNameWExeStr + ".exe" + if lProcessNameWExeStr[-4:].upper() != ".EXE": + lProcessNameWExeStr = lProcessNameWExeStr + ".exe" else: - lProcessNameWExeStr = lProcessNameWExeStr + ".exe" + lProcessNameWExeStr = lProcessNameWExeStr + ".exe" # Flag Force - lActivityCloseCommand = 'taskkill /im ' + lProcessNameWExeStr + lActivityCloseCommand = 'taskkill /im ' + lProcessNameWExeStr if inCloseForceBool == True: - lActivityCloseCommand += " /F" + lActivityCloseCommand += " /F" # None - all users, %username% - current user, another str - another user if inUserNameStr is not None: - lActivityCloseCommand += f' /fi "username eq {inUserNameStr}"' + lActivityCloseCommand += f' /fi "username eq {inUserNameStr}"' # Kill process os.system(lActivityCloseCommand)
-
[docs]def ProcessListGet(inProcessNameWOExeList=None): - """ +
[docs]def ProcessListGet(inProcessNameWOExeList=None): + """ Check activity of the list of processes :param inProcessNameWOExeList: :return: TODO FILL THE RESULT DICT - """ + """ if inProcessNameWOExeList is None: inProcessNameWOExeList = [] - '''Get list of running process sorted by Memory Usage and filtered by inProcessNameWOExeList''' + '''Get list of running process sorted by Memory Usage and filtered by inProcessNameWOExeList''' lMapUPPERInput = {} # Mapping for processes WO exe - lResult = {"ProcessWOExeList":[],"ProcessDetailList":[]} + lResult = {"ProcessWOExeList":[],"ProcessDetailList":[]} # Create updated list for quick check lProcessNameWOExeList = [] for lItem in inProcessNameWOExeList: if lItem is not None: - lProcessNameWOExeList.append(f"{lItem.upper()}.EXE") - lMapUPPERInput[f"{lItem.upper()}.EXE"]= lItem + lProcessNameWOExeList.append(f"{lItem.upper()}.EXE") + lMapUPPERInput[f"{lItem.upper()}.EXE"]= lItem # Iterate over the list for proc in psutil.process_iter(): try: # Fetch process details as dict - pinfo = proc.as_dict(attrs=['pid', 'name', 'username']) - pinfo['vms'] = proc.memory_info().vms / (1024 * 1024) - pinfo['NameWOExeUpperStr'] = pinfo['name'][:-4].upper() + pinfo = proc.as_dict(attrs=['pid', 'name', 'username']) + pinfo['vms'] = proc.memory_info().vms / (1024 * 1024) + pinfo['NameWOExeUpperStr'] = pinfo['name'][:-4].upper() # Add if empty inProcessNameWOExeList or if process in inProcessNameWOExeList - if len(lProcessNameWOExeList)==0 or pinfo['name'].upper() in lProcessNameWOExeList: - pinfo['NameWOExeStr'] = lMapUPPERInput[pinfo['name'].upper()] - lResult["ProcessDetailList"].append(pinfo) # Append dict to list - lResult["ProcessWOExeList"].append(pinfo['NameWOExeStr']) + if len(lProcessNameWOExeList)==0 or pinfo['name'].upper() in lProcessNameWOExeList: + pinfo['NameWOExeStr'] = lMapUPPERInput[pinfo['name'].upper()] + lResult["ProcessDetailList"].append(pinfo) # Append dict to list + lResult["ProcessWOExeList"].append(pinfo['NameWOExeStr']) except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess): pass return lResult
# Python def - start module function -
[docs]def PythonStart(inModulePathStr, inDefNameStr, inArgList=None, inArgDict=None, inLogger = None): - """ +
[docs]def PythonStart(inModulePathStr, inDefNameStr, inArgList=None, inArgDict=None, inLogger = None): + """ Python import module and start def :param inModulePathStr: @@ -834,7 +870,7 @@ :param inArgDict: :param inLogger: :return: - """ + """ if inArgList is None: inArgList=[] if inArgDict is None: inArgDict={} try: @@ -842,7 +878,7 @@ lFunction=getattr(lModule,inDefNameStr) #Найти функцию return lFunction(*inArgList,**inArgDict) except Exception as e: - if inLogger: inLogger.exception("Loop activity error: module/function not founded")
+ if inLogger: inLogger.exception("Loop activity error: module/function not founded")
# # # # # # # # # # # # # # # # # # # # # # # @@ -850,8 +886,8 @@ # Scheduler # # # # # # # # # # # # # # # # # # # # # # # -
[docs]def SchedulerActivityTimeAddWeekly(inGSettings, inTimeHHMMStr="23:55:", inWeekdayList=None, inActivityList=None): - """ +
[docs]def SchedulerActivityTimeAddWeekly(inGSettings, inTimeHHMMStr="23:55:", inWeekdayList=None, inActivityList=None): + """ Add activity in time weekly :param inGSettings: Global settings dict (singleton) @@ -859,24 +895,25 @@ :param inWeekdayList: :param inActivityList: :return: - """ + """ if inWeekdayList is None: inWeekdayList=[] if inActivityList is None: inActivityList=[] + Processor.__ActivityListVerify__(inActivityList=inActivityList) # DO VERIFICATION FOR THE inActivityList lActivityTimeItemDict = { - "TimeHH:MMStr": inTimeHHMMStr, # Time [HH:MM] to trigger activity - "WeekdayList": inWeekdayList, # List of the weekday index when activity is applicable, Default [1,2,3,4,5,6,7] - "ActivityList": inActivityList, - "GUID": None # # Will be filled in Orchestrator automatically - is needed for detect activity completion - }, - inGSettings["SchedulerDict"]["ActivityTimeList"].append(lActivityTimeItemDict)
+ "TimeHH:MMStr": inTimeHHMMStr, # Time [HH:MM] to trigger activity + "WeekdayList": inWeekdayList, # List of the weekday index when activity is applicable, Default [1,2,3,4,5,6,7] + "ActivityList": inActivityList, + "GUID": None # # Will be filled in Orchestrator automatically - is needed for detect activity completion + } + inGSettings["SchedulerDict"]["ActivityTimeList"].append(lActivityTimeItemDict)
# # # # # # # # # # # # # # # # # # # # # # # # RDPSession # # # # # # # # # # # # # # # # # # # # # # # -
[docs]def RDPTemplateCreate(inLoginStr, inPasswordStr, inHostStr="127.0.0.1", inPortInt = 3389, inWidthPXInt = 1680, inHeightPXInt = 1050, +
[docs]def RDPTemplateCreate(inLoginStr, inPasswordStr, inHostStr="127.0.0.1", inPortInt = 3389, inWidthPXInt = 1680, inHeightPXInt = 1050, inUseBothMonitorBool = False, inDepthBitInt = 32, inSharedDriveList=None): - """ + """ Create some RDP template dict to use it when connect/reconnect :param inLoginStr: @@ -889,47 +926,47 @@ :param inDepthBitInt: :param inSharedDriveList: :return: - """ - if inSharedDriveList is None: inSharedDriveList = ["c"] + """ + if inSharedDriveList is None: inSharedDriveList = ["c"] lRDPTemplateDict= { # Init the configuration item - "Host": inHostStr, # Host address, example "77.77.22.22" - "Port": str(inPortInt), # RDP Port, example "3389" - "Login": inLoginStr, # Login, example "test" - "Password": inPasswordStr, # Password, example "test" - "Screen": { - "Width": inWidthPXInt, # Width of the remote desktop in pixels, example 1680 - "Height": inHeightPXInt, # Height of the remote desktop in pixels, example 1050 - # "640x480" or "1680x1050" or "FullScreen". If Resolution not exists set full screen, example - "FlagUseAllMonitors": inUseBothMonitorBool, # True or False, example False - "DepthBit": str(inDepthBitInt) # "32" or "24" or "16" or "15", example "32" + "Host": inHostStr, # Host address, example "77.77.22.22" + "Port": str(inPortInt), # RDP Port, example "3389" + "Login": inLoginStr, # Login, example "test" + "Password": inPasswordStr, # Password, example "test" + "Screen": { + "Width": inWidthPXInt, # Width of the remote desktop in pixels, example 1680 + "Height": inHeightPXInt, # Height of the remote desktop in pixels, example 1050 + # "640x480" or "1680x1050" or "FullScreen". If Resolution not exists set full screen, example + "FlagUseAllMonitors": inUseBothMonitorBool, # True or False, example False + "DepthBit": str(inDepthBitInt) # "32" or "24" or "16" or "15", example "32" }, - "SharedDriveList": inSharedDriveList, # List of the Root sesion hard drives, example ["c"] + "SharedDriveList": inSharedDriveList, # List of the Root sesion hard drives, example ["c"] ###### Will updated in program ############ - "SessionHex": "77777sdfsdf77777dsfdfsf77777777", # Hex is created when robot runs, example "" - "SessionIsWindowExistBool": False, - # Flag if the RDP window is exist, old name "FlagSessionIsActive". Check every n seconds , example False - "SessionIsWindowResponsibleBool": False, + "SessionHex": "77777sdfsdf77777dsfdfsf77777777", # Hex is created when robot runs, example "" + "SessionIsWindowExistBool": False, + # Flag if the RDP window is exist, old name "FlagSessionIsActive". Check every n seconds , example False + "SessionIsWindowResponsibleBool": False, # Flag if RDP window is responsible (recieve commands). Check every nn seconds. If window is Responsible - window is Exist too , example False - "SessionIsIgnoredBool": False # Flag to ignore RDP window False - dont ignore, True - ignore, example False + "SessionIsIgnoredBool": False # Flag to ignore RDP window False - dont ignore, True - ignore, example False } return lRDPTemplateDict
# TODO Search dublicates in GSettings RDPlist ! # Return list if dublicates -
[docs]def RDPSessionDublicatesResolve(inGSettings): - """ +
[docs]def RDPSessionDublicatesResolve(inGSettings): + """ Search dublicates in GSettings RDPlist !def is developing! :param inGSettings: Global settings dict (singleton) :return: - """ + """ pass
- #for lItemKeyStr in inGSettings["RobotRDPActive"]["RDPList"]: - # lItemDict = inGSettings["RobotRDPActive"]["RDPList"][lItemKeyStr] + #for lItemKeyStr in inGSettings["RobotRDPActive"]["RDPList"]: + # lItemDict = inGSettings["RobotRDPActive"]["RDPList"][lItemKeyStr] -
[docs]def RDPSessionConnect(inGSettings, inRDPSessionKeyStr, inRDPTemplateDict=None, inHostStr=None, inPortStr=None, inLoginStr=None, inPasswordStr=None): - """ +
[docs]def RDPSessionConnect(inGSettings, inRDPSessionKeyStr, inRDPTemplateDict=None, inHostStr=None, inPortStr=None, inLoginStr=None, inPasswordStr=None): + """ Create new RDPSession in RobotRDPActive. Attention - activity will be ignored if key is exists 2 way of the use Var 1: inGSettings, inRDPSessionKeyStr, inRDPTemplateDict @@ -943,19 +980,19 @@ :param inLoginStr: :param inPasswordStr: :return: True every time - """ + """ # Check thread if not Core.IsProcessorThread(inGSettings=inGSettings): - if inGSettings["Logger"]: inGSettings["Logger"].warning(f"RDP def was called not from processor queue - activity will be append in the processor queue.") + if inGSettings["Logger"]: inGSettings["Logger"].warning(f"RDP def was called not from processor queue - activity will be append in the processor queue.") lResult = { - "Def": RDPSessionConnect, # def link or def alias (look gSettings["Processor"]["AliasDefDict"]) - "ArgList": [], # Args list - "ArgDict": {"inRDPSessionKeyStr": inRDPSessionKeyStr, "inRDPTemplateDict":inRDPTemplateDict, "inHostStr": inHostStr, "inPortStr": inPortStr, - "inLoginStr": inLoginStr, "inPasswordStr": inPasswordStr}, # Args dictionary - "ArgGSettings": "inGSettings", # Name of GSettings attribute: str (ArgDict) or index (for ArgList) - "ArgLogger": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList) + "Def": RDPSessionConnect, # def link or def alias (look gSettings["Processor"]["AliasDefDict"]) + "ArgList": [], # Args list + "ArgDict": {"inRDPSessionKeyStr": inRDPSessionKeyStr, "inRDPTemplateDict":inRDPTemplateDict, "inHostStr": inHostStr, "inPortStr": inPortStr, + "inLoginStr": inLoginStr, "inPasswordStr": inPasswordStr}, # Args dictionary + "ArgGSettings": "inGSettings", # Name of GSettings attribute: str (ArgDict) or index (for ArgList) + "ArgLogger": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList) } - inGSettings["ProcessorDict"]["ActivityList"].append(lResult) + inGSettings["ProcessorDict"]["ActivityList"].append(lResult) else: # In processor - do execution # Var 1 - if RDPTemplateDict is input lRDPConfigurationItem=inRDPTemplateDict @@ -964,150 +1001,150 @@ lRDPConfigurationItem = RDPTemplateCreate(inLoginStr=inLoginStr, inPasswordStr=inPasswordStr, inHostStr=inHostStr, inPortInt = int(inPortStr)) # ATTENTION - dont connect if RDP session is exist # Start the connect - if inRDPSessionKeyStr not in inGSettings["RobotRDPActive"]["RDPList"]: - inGSettings["RobotRDPActive"]["RDPList"][inRDPSessionKeyStr] = lRDPConfigurationItem # Add item in RDPList + if inRDPSessionKeyStr not in inGSettings["RobotRDPActive"]["RDPList"]: + inGSettings["RobotRDPActive"]["RDPList"][inRDPSessionKeyStr] = lRDPConfigurationItem # Add item in RDPList Connector.Session(lRDPConfigurationItem) # Create the RDP session Connector.SystemRDPWarningClickOk() # Click all warning messages else: - if inGSettings["Logger"]: inGSettings["Logger"].warning(f"RDP session was not created because it is alredy exists in the RDPList. Use RDPSessionReconnect if you want to update RDP configuration.") + if inGSettings["Logger"]: inGSettings["Logger"].warning(f"RDP session was not created because it is alredy exists in the RDPList. Use RDPSessionReconnect if you want to update RDP configuration.") return True
-
[docs]def RDPSessionDisconnect(inGSettings, inRDPSessionKeyStr, inBreakTriggerProcessWOExeList = None): - """ +
[docs]def RDPSessionDisconnect(inGSettings, inRDPSessionKeyStr, inBreakTriggerProcessWOExeList = None): + """ Disconnect the RDP session :param inGSettings: Global settings dict (singleton) :param inRDPSessionKeyStr: :param inBreakTriggerProcessWOExeList: :return: True every time - """ + """ if inBreakTriggerProcessWOExeList is None: inBreakTriggerProcessWOExeList = [] # Check thread if not Core.IsProcessorThread(inGSettings=inGSettings): - if inGSettings["Logger"]: inGSettings["Logger"].warning(f"RDP def was called not from processor queue - activity will be append in the processor queue.") + if inGSettings["Logger"]: inGSettings["Logger"].warning(f"RDP def was called not from processor queue - activity will be append in the processor queue.") lResult = { - "Def": RDPSessionDisconnect, # def link or def alias (look gSettings["Processor"]["AliasDefDict"]) - "ArgList": [], # Args list - "ArgDict": {"inRDPSessionKeyStr": inRDPSessionKeyStr, "inBreakTriggerProcessWOExeList": inBreakTriggerProcessWOExeList }, # Args dictionary - "ArgGSettings": "inGSettings", # Name of GSettings attribute: str (ArgDict) or index (for ArgList) - "ArgLogger": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList) + "Def": RDPSessionDisconnect, # def link or def alias (look gSettings["Processor"]["AliasDefDict"]) + "ArgList": [], # Args list + "ArgDict": {"inRDPSessionKeyStr": inRDPSessionKeyStr, "inBreakTriggerProcessWOExeList": inBreakTriggerProcessWOExeList }, # Args dictionary + "ArgGSettings": "inGSettings", # Name of GSettings attribute: str (ArgDict) or index (for ArgList) + "ArgLogger": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList) } - inGSettings["ProcessorDict"]["ActivityList"].append(lResult) + inGSettings["ProcessorDict"]["ActivityList"].append(lResult) else: # In processor - do execution - lSessionHex = inGSettings["RobotRDPActive"]["RDPList"].get(inRDPSessionKeyStr,{}).get("SessionHex", None) + lSessionHex = inGSettings["RobotRDPActive"]["RDPList"].get(inRDPSessionKeyStr,{}).get("SessionHex", None) if lSessionHex: - lProcessListResult = {"ProcessWOExeList":[],"ProcessDetailList":[]} + lProcessListResult = {"ProcessWOExeList":[],"ProcessDetailList":[]} if len(inBreakTriggerProcessWOExeList) > 0: lProcessListResult = ProcessListGet(inProcessNameWOExeList=inBreakTriggerProcessWOExeList) # Run the task manager monitor - if len(lProcessListResult["ProcessWOExeList"]) == 0: # Start disconnect if no process exist - inGSettings["RobotRDPActive"]["RDPList"].pop(inRDPSessionKeyStr,None) + if len(lProcessListResult["ProcessWOExeList"]) == 0: # Start disconnect if no process exist + inGSettings["RobotRDPActive"]["RDPList"].pop(inRDPSessionKeyStr,None) Connector.SessionClose(inSessionHexStr=lSessionHex) Connector.SystemRDPWarningClickOk() # Click all warning messages return True
-
[docs]def RDPSessionReconnect(inGSettings, inRDPSessionKeyStr, inRDPTemplateDict=None): - """ +
[docs]def RDPSessionReconnect(inGSettings, inRDPSessionKeyStr, inRDPTemplateDict=None): + """ RDP Session reconnect :param inGSettings: Global settings dict (singleton) :param inRDPSessionKeyStr: :param inRDPTemplateDict: :return: - """ + """ # Check thread if not Core.IsProcessorThread(inGSettings=inGSettings): - if inGSettings["Logger"]: inGSettings["Logger"].warning(f"RDP def was called not from processor queue - activity will be append in the processor queue.") + if inGSettings["Logger"]: inGSettings["Logger"].warning(f"RDP def was called not from processor queue - activity will be append in the processor queue.") lResult = { - "Def": RDPSessionReconnect, # def link or def alias (look gSettings["Processor"]["AliasDefDict"]) - "ArgList": [], # Args list - "ArgDict": {"inRDPSessionKeyStr": inRDPSessionKeyStr, "inRDPTemplateDict":inRDPTemplateDict }, # Args dictionary - "ArgGSettings": "inGSettings", # Name of GSettings attribute: str (ArgDict) or index (for ArgList) - "ArgLogger": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList) + "Def": RDPSessionReconnect, # def link or def alias (look gSettings["Processor"]["AliasDefDict"]) + "ArgList": [], # Args list + "ArgDict": {"inRDPSessionKeyStr": inRDPSessionKeyStr, "inRDPTemplateDict":inRDPTemplateDict }, # Args dictionary + "ArgGSettings": "inGSettings", # Name of GSettings attribute: str (ArgDict) or index (for ArgList) + "ArgLogger": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList) } - inGSettings["ProcessorDict"]["ActivityList"].append(lResult) + inGSettings["ProcessorDict"]["ActivityList"].append(lResult) else: - lRDPConfigurationItem = inGSettings["RobotRDPActive"]["RDPList"][inRDPSessionKeyStr] + lRDPConfigurationItem = inGSettings["RobotRDPActive"]["RDPList"][inRDPSessionKeyStr] RDPSessionDisconnect(inRDPSessionKeyStr=inRDPSessionKeyStr) # Disconnect the RDP # Replace Configuration item if inRDPTemplateDict exists if inRDPTemplateDict is not None: lRDPConfigurationItem=inRDPTemplateDict # Add item in RDPList - inGSettings["RobotRDPActive"]["RDPList"][inRDPSessionKeyStr] = lRDPConfigurationItem + inGSettings["RobotRDPActive"]["RDPList"][inRDPSessionKeyStr] = lRDPConfigurationItem # Create the RDP session Connector.Session(lRDPConfigurationItem) return True
-
[docs]def RDPSessionMonitorStop(inGSettings, inRDPSessionKeyStr): - """ +
[docs]def RDPSessionMonitorStop(inGSettings, inRDPSessionKeyStr): + """ Stop track the RDP session. Current def dont kill RDP session - only stop to track it (it can give ) :param inGSettings: Global settings dict (singleton) :param inRDPSessionKeyStr: :return: - """ + """ lResult = True - inGSettings["RobotRDPActive"]["RDPList"].pop(inRDPSessionKeyStr,None) # Remove item from RDPList + inGSettings["RobotRDPActive"]["RDPList"].pop(inRDPSessionKeyStr,None) # Remove item from RDPList return lResult
-
[docs]def RDPSessionLogoff(inGSettings, inRDPSessionKeyStr, inBreakTriggerProcessWOExeList = None): - """ +
[docs]def RDPSessionLogoff(inGSettings, inRDPSessionKeyStr, inBreakTriggerProcessWOExeList = None): + """ Logoff the RDP session :param inGSettings: Global settings dict (singleton) :param inRDPSessionKeyStr: :param inBreakTriggerProcessWOExeList: :return: True - logoff is successful - """ + """ if inBreakTriggerProcessWOExeList is None: inBreakTriggerProcessWOExeList = [] lResult = True # Check thread if not Core.IsProcessorThread(inGSettings=inGSettings): - if inGSettings["Logger"]: inGSettings["Logger"].warning(f"RDP def was called not from processor queue - activity will be append in the processor queue.") + if inGSettings["Logger"]: inGSettings["Logger"].warning(f"RDP def was called not from processor queue - activity will be append in the processor queue.") lResult = { - "Def": RDPSessionLogoff, # def link or def alias (look gSettings["Processor"]["AliasDefDict"]) - "ArgList": [], # Args list - "ArgDict": {"inRDPSessionKeyStr": inRDPSessionKeyStr, "inBreakTriggerProcessWOExeList": inBreakTriggerProcessWOExeList }, # Args dictionary - "ArgGSettings": "inGSettings", # Name of GSettings attribute: str (ArgDict) or index (for ArgList) - "ArgLogger": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList) + "Def": RDPSessionLogoff, # def link or def alias (look gSettings["Processor"]["AliasDefDict"]) + "ArgList": [], # Args list + "ArgDict": {"inRDPSessionKeyStr": inRDPSessionKeyStr, "inBreakTriggerProcessWOExeList": inBreakTriggerProcessWOExeList }, # Args dictionary + "ArgGSettings": "inGSettings", # Name of GSettings attribute: str (ArgDict) or index (for ArgList) + "ArgLogger": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList) } - inGSettings["ProcessorDict"]["ActivityList"].append(lResult) + inGSettings["ProcessorDict"]["ActivityList"].append(lResult) else: - lCMDStr = "shutdown -L" # CMD logoff command + lCMDStr = "shutdown -L" # CMD logoff command # Calculate the session Hex - lSessionHex = inGSettings["RobotRDPActive"]["RDPList"].get(inRDPSessionKeyStr,{}).get("SessionHex", None) + lSessionHex = inGSettings["RobotRDPActive"]["RDPList"].get(inRDPSessionKeyStr,{}).get("SessionHex", None) if lSessionHex: - lProcessListResult = {"ProcessWOExeList":[],"ProcessDetailList":[]} + lProcessListResult = {"ProcessWOExeList":[],"ProcessDetailList":[]} if len(inBreakTriggerProcessWOExeList) > 0: lProcessListResult = ProcessListGet(inProcessNameWOExeList=inBreakTriggerProcessWOExeList) # Run the task manager monitor - if len(lProcessListResult["ProcessWOExeList"]) == 0: # Start logoff if no process exist + if len(lProcessListResult["ProcessWOExeList"]) == 0: # Start logoff if no process exist # Run CMD - dont crosscheck because CMD dont return value to the clipboard when logoff - Connector.SessionCMDRun(inSessionHex=lSessionHex, inCMDCommandStr=lCMDStr, inModeStr="RUN", inLogger=inGSettings["Logger"], inRDPConfigurationItem=inGSettings["RobotRDPActive"]["RDPList"][inRDPSessionKeyStr]) - inGSettings["RobotRDPActive"]["RDPList"].pop(inRDPSessionKeyStr,None) # Remove item from RDPList + Connector.SessionCMDRun(inSessionHex=lSessionHex, inCMDCommandStr=lCMDStr, inModeStr="RUN", inLogger=inGSettings["Logger"], inRDPConfigurationItem=inGSettings["RobotRDPActive"]["RDPList"][inRDPSessionKeyStr]) + inGSettings["RobotRDPActive"]["RDPList"].pop(inRDPSessionKeyStr,None) # Remove item from RDPList return lResult
-
[docs]def RDPSessionResponsibilityCheck(inGSettings, inRDPSessionKeyStr): - """ +
[docs]def RDPSessionResponsibilityCheck(inGSettings, inRDPSessionKeyStr): + """ Check RDP Session responsibility TODO NEED DEV + TEST :param inGSettings: Global settings dict (singleton) :param inRDPSessionKeyStr: :return: True every time - """ + """ # Check thread if not Core.IsProcessorThread(inGSettings=inGSettings): - if inGSettings["Logger"]: inGSettings["Logger"].warning(f"RDP def was called not from processor queue - activity will be append in the processor queue.") + if inGSettings["Logger"]: inGSettings["Logger"].warning(f"RDP def was called not from processor queue - activity will be append in the processor queue.") lResult = { - "Def": RDPSessionResponsibilityCheck, # def link or def alias (look gSettings["Processor"]["AliasDefDict"]) - "ArgList": [], # Args list - "ArgDict": {"inRDPSessionKeyStr": inRDPSessionKeyStr }, # Args dictionary - "ArgGSettings": "inGSettings", # Name of GSettings attribute: str (ArgDict) or index (for ArgList) - "ArgLogger": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList) + "Def": RDPSessionResponsibilityCheck, # def link or def alias (look gSettings["Processor"]["AliasDefDict"]) + "ArgList": [], # Args list + "ArgDict": {"inRDPSessionKeyStr": inRDPSessionKeyStr }, # Args dictionary + "ArgGSettings": "inGSettings", # Name of GSettings attribute: str (ArgDict) or index (for ArgList) + "ArgLogger": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList) } - inGSettings["ProcessorDict"]["ActivityList"].append(lResult) + inGSettings["ProcessorDict"]["ActivityList"].append(lResult) else: - lRDPConfigurationItem = inGSettings["RobotRDPActive"]["RDPList"][inRDPSessionKeyStr] # Get the alias + lRDPConfigurationItem = inGSettings["RobotRDPActive"]["RDPList"][inRDPSessionKeyStr] # Get the alias # set the fullscreen # ATTENTION!!! Session hex can be updated!!! - Connector.SessionScreenFull(inSessionHex=lRDPConfigurationItem["SessionHex"], inLogger=inGSettings["Logger"], inRDPConfigurationItem=inGSettings["RobotRDPActive"]["RDPList"][inRDPSessionKeyStr]) + Connector.SessionScreenFull(inSessionHex=lRDPConfigurationItem["SessionHex"], inLogger=inGSettings["Logger"], inRDPConfigurationItem=inGSettings["RobotRDPActive"]["RDPList"][inRDPSessionKeyStr]) time.sleep(1) # Check RDP responsibility lDoCheckResponsibilityBool = True @@ -1117,9 +1154,9 @@ # Check if counter is exceed - raise exception if lDoCheckResponsibilityCountCurrent >= lDoCheckResponsibilityCountMax: pass - #raise ConnectorExceptions.SessionWindowNotResponsibleError("Error when initialize the RDP session - RDP window is not responding!") + #raise ConnectorExceptions.SessionWindowNotResponsibleError("Error when initialize the RDP session - RDP window is not responding!") # Check responding - lDoCheckResponsibilityBool = not Connector.SystemRDPIsResponsible(inSessionHexStr = lRDPConfigurationItem["SessionHex"]) + lDoCheckResponsibilityBool = not Connector.SystemRDPIsResponsible(inSessionHexStr = lRDPConfigurationItem["SessionHex"]) # Wait if is not responding if lDoCheckResponsibilityBool: time.sleep(3) @@ -1127,8 +1164,8 @@ lDoCheckResponsibilityCountCurrent+=1 return True
-
[docs]def RDPSessionProcessStartIfNotRunning(inGSettings, inRDPSessionKeyStr, inProcessNameWEXEStr, inFilePathStr, inFlagGetAbsPathBool=True): - """ +
[docs]def RDPSessionProcessStartIfNotRunning(inGSettings, inRDPSessionKeyStr, inProcessNameWEXEStr, inFilePathStr, inFlagGetAbsPathBool=True): + """ Start process if it is not running :param inGSettings: Global settings dict (singleton) @@ -1137,31 +1174,31 @@ :param inFilePathStr: :param inFlagGetAbsPathBool: :return: - """ + """ # Check thread if not Core.IsProcessorThread(inGSettings=inGSettings): - if inGSettings["Logger"]: inGSettings["Logger"].warning(f"RDP def was called not from processor queue - activity will be append in the processor queue.") + if inGSettings["Logger"]: inGSettings["Logger"].warning(f"RDP def was called not from processor queue - activity will be append in the processor queue.") lResult = { - "Def": RDPSessionProcessStartIfNotRunning, # def link or def alias (look gSettings["Processor"]["AliasDefDict"]) - "ArgList": [], # Args list - "ArgDict": {"inRDPSessionKeyStr": inRDPSessionKeyStr, "inProcessNameWEXEStr": inProcessNameWEXEStr, "inFilePathStr": inFilePathStr, "inFlagGetAbsPathBool": inFlagGetAbsPathBool }, # Args dictionary - "ArgGSettings": "inGSettings", # Name of GSettings attribute: str (ArgDict) or index (for ArgList) - "ArgLogger": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList) + "Def": RDPSessionProcessStartIfNotRunning, # def link or def alias (look gSettings["Processor"]["AliasDefDict"]) + "ArgList": [], # Args list + "ArgDict": {"inRDPSessionKeyStr": inRDPSessionKeyStr, "inProcessNameWEXEStr": inProcessNameWEXEStr, "inFilePathStr": inFilePathStr, "inFlagGetAbsPathBool": inFlagGetAbsPathBool }, # Args dictionary + "ArgGSettings": "inGSettings", # Name of GSettings attribute: str (ArgDict) or index (for ArgList) + "ArgLogger": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList) } - inGSettings["ProcessorDict"]["ActivityList"].append(lResult) + inGSettings["ProcessorDict"]["ActivityList"].append(lResult) else: lResult = True lCMDStr = CMDStr.ProcessStartIfNotRunning(inProcessNameWEXEStr, inFilePathStr, inFlagGetAbsPath= inFlagGetAbsPathBool) # Calculate the session Hex - lSessionHex = inGSettings["RobotRDPActive"]["RDPList"].get(inRDPSessionKeyStr,{}).get("SessionHex", None) + lSessionHex = inGSettings["RobotRDPActive"]["RDPList"].get(inRDPSessionKeyStr,{}).get("SessionHex", None) # Run CMD if lSessionHex: - Connector.SessionCMDRun(inSessionHex=lSessionHex, inCMDCommandStr=lCMDStr, inModeStr="CROSSCHECK", inLogger=inGSettings["Logger"], - inRDPConfigurationItem=inGSettings["RobotRDPActive"]["RDPList"][inRDPSessionKeyStr]) + Connector.SessionCMDRun(inSessionHex=lSessionHex, inCMDCommandStr=lCMDStr, inModeStr="CROSSCHECK", inLogger=inGSettings["Logger"], + inRDPConfigurationItem=inGSettings["RobotRDPActive"]["RDPList"][inRDPSessionKeyStr]) return lResult
-
[docs]def RDPSessionCMDRun(inGSettings, inRDPSessionKeyStr, inCMDStr, inModeStr="CROSSCHECK"): - """ +
[docs]def RDPSessionCMDRun(inGSettings, inRDPSessionKeyStr, inCMDStr, inModeStr="CROSSCHECK"): + """ Send command in RDP session :param inGSettings: Global settings dict (singleton) @@ -1169,30 +1206,30 @@ :param inCMDStr: :param inModeStr: :return: True - CMD was executed successfully - """ + """ # Check thread if not Core.IsProcessorThread(inGSettings=inGSettings): - if inGSettings["Logger"]: inGSettings["Logger"].warning(f"RDP def was called not from processor queue - activity will be append in the processor queue.") + if inGSettings["Logger"]: inGSettings["Logger"].warning(f"RDP def was called not from processor queue - activity will be append in the processor queue.") lResult = { - "Def": RDPSessionCMDRun, # def link or def alias (look gSettings["Processor"]["AliasDefDict"]) - "ArgList": [], # Args list - "ArgDict": {"inRDPSessionKeyStr": inRDPSessionKeyStr, "inCMDStr": inCMDStr, "inModeStr": inModeStr }, # Args dictionary - "ArgGSettings": "inGSettings", # Name of GSettings attribute: str (ArgDict) or index (for ArgList) - "ArgLogger": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList) + "Def": RDPSessionCMDRun, # def link or def alias (look gSettings["Processor"]["AliasDefDict"]) + "ArgList": [], # Args list + "ArgDict": {"inRDPSessionKeyStr": inRDPSessionKeyStr, "inCMDStr": inCMDStr, "inModeStr": inModeStr }, # Args dictionary + "ArgGSettings": "inGSettings", # Name of GSettings attribute: str (ArgDict) or index (for ArgList) + "ArgLogger": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList) } - inGSettings["ProcessorDict"]["ActivityList"].append(lResult) + inGSettings["ProcessorDict"]["ActivityList"].append(lResult) else: lResult = True # Calculate the session Hex - lSessionHex = inGSettings["RobotRDPActive"]["RDPList"].get(inRDPSessionKeyStr,{}).get("SessionHex", None) + lSessionHex = inGSettings["RobotRDPActive"]["RDPList"].get(inRDPSessionKeyStr,{}).get("SessionHex", None) # Run CMD if lSessionHex: - Connector.SessionCMDRun(inSessionHex=lSessionHex, inCMDCommandStr=inCMDStr, inModeStr=inModeStr, inLogger=inGSettings["Logger"], - inRDPConfigurationItem=inGSettings["RobotRDPActive"]["RDPList"][inRDPSessionKeyStr]) + Connector.SessionCMDRun(inSessionHex=lSessionHex, inCMDCommandStr=inCMDStr, inModeStr=inModeStr, inLogger=inGSettings["Logger"], + inRDPConfigurationItem=inGSettings["RobotRDPActive"]["RDPList"][inRDPSessionKeyStr]) return lResult
-
[docs]def RDPSessionProcessStop(inGSettings, inRDPSessionKeyStr, inProcessNameWEXEStr, inFlagForceCloseBool): - """ +
[docs]def RDPSessionProcessStop(inGSettings, inRDPSessionKeyStr, inProcessNameWEXEStr, inFlagForceCloseBool): + """ Create CMD str to stop process :param inGSettings: Global settings dict (singleton) @@ -1200,32 +1237,32 @@ :param inProcessNameWEXEStr: :param inFlagForceCloseBool: :return: - """ + """ # Check thread if not Core.IsProcessorThread(inGSettings=inGSettings): - if inGSettings["Logger"]: inGSettings["Logger"].warning(f"RDP def was called not from processor queue - activity will be append in the processor queue.") + if inGSettings["Logger"]: inGSettings["Logger"].warning(f"RDP def was called not from processor queue - activity will be append in the processor queue.") lResult = { - "Def": RDPSessionProcessStop, # def link or def alias (look gSettings["Processor"]["AliasDefDict"]) - "ArgList": [], # Args list - "ArgDict": {"inRDPSessionKeyStr": inRDPSessionKeyStr, "inProcessNameWEXEStr": inProcessNameWEXEStr, "inFlagForceCloseBool": inFlagForceCloseBool }, # Args dictionary - "ArgGSettings": "inGSettings", # Name of GSettings attribute: str (ArgDict) or index (for ArgList) - "ArgLogger": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList) + "Def": RDPSessionProcessStop, # def link or def alias (look gSettings["Processor"]["AliasDefDict"]) + "ArgList": [], # Args list + "ArgDict": {"inRDPSessionKeyStr": inRDPSessionKeyStr, "inProcessNameWEXEStr": inProcessNameWEXEStr, "inFlagForceCloseBool": inFlagForceCloseBool }, # Args dictionary + "ArgGSettings": "inGSettings", # Name of GSettings attribute: str (ArgDict) or index (for ArgList) + "ArgLogger": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList) } - inGSettings["ProcessorDict"]["ActivityList"].append(lResult) + inGSettings["ProcessorDict"]["ActivityList"].append(lResult) else: lResult = True - lCMDStr = f'taskkill /im "{inProcessNameWEXEStr}" /fi "username eq %USERNAME%"' + lCMDStr = f'taskkill /im "{inProcessNameWEXEStr}" /fi "username eq %USERNAME%"' if inFlagForceCloseBool: - lCMDStr+= " /F" + lCMDStr+= " /F" # Calculate the session Hex - lSessionHex = inGSettings["RobotRDPActive"]["RDPList"].get(inRDPSessionKeyStr,{}).get("SessionHex", None) + lSessionHex = inGSettings["RobotRDPActive"]["RDPList"].get(inRDPSessionKeyStr,{}).get("SessionHex", None) # Run CMD if lSessionHex: - Connector.SessionCMDRun(inSessionHex=lSessionHex, inCMDCommandStr=lCMDStr, inModeStr="CROSSCHECK", inLogger=inGSettings["Logger"], inRDPConfigurationItem=inGSettings["RobotRDPActive"]["RDPList"][inRDPSessionKeyStr]) + Connector.SessionCMDRun(inSessionHex=lSessionHex, inCMDCommandStr=lCMDStr, inModeStr="CROSSCHECK", inLogger=inGSettings["Logger"], inRDPConfigurationItem=inGSettings["RobotRDPActive"]["RDPList"][inRDPSessionKeyStr]) return lResult
-
[docs]def RDPSessionFileStoredSend(inGSettings, inRDPSessionKeyStr, inHostFilePathStr, inRDPFilePathStr): - """ +
[docs]def RDPSessionFileStoredSend(inGSettings, inRDPSessionKeyStr, inHostFilePathStr, inRDPFilePathStr): + """ Send file from Host to Session RDP using shared drive in RDP :param inGSettings: Global settings dict (singleton) @@ -1233,31 +1270,31 @@ :param inHostFilePathStr: :param inRDPFilePathStr: :return: - """ + """ # Check thread if not Core.IsProcessorThread(inGSettings=inGSettings): - if inGSettings["Logger"]: inGSettings["Logger"].warning(f"RDP def was called not from processor queue - activity will be append in the processor queue.") + if inGSettings["Logger"]: inGSettings["Logger"].warning(f"RDP def was called not from processor queue - activity will be append in the processor queue.") lResult = { - "Def": RDPSessionFileStoredSend, # def link or def alias (look gSettings["Processor"]["AliasDefDict"]) - "ArgList": [], # Args list - "ArgDict": {"inRDPSessionKeyStr": inRDPSessionKeyStr, "inHostFilePathStr": inHostFilePathStr, "inRDPFilePathStr": inRDPFilePathStr }, # Args dictionary - "ArgGSettings": "inGSettings", # Name of GSettings attribute: str (ArgDict) or index (for ArgList) - "ArgLogger": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList) + "Def": RDPSessionFileStoredSend, # def link or def alias (look gSettings["Processor"]["AliasDefDict"]) + "ArgList": [], # Args list + "ArgDict": {"inRDPSessionKeyStr": inRDPSessionKeyStr, "inHostFilePathStr": inHostFilePathStr, "inRDPFilePathStr": inRDPFilePathStr }, # Args dictionary + "ArgGSettings": "inGSettings", # Name of GSettings attribute: str (ArgDict) or index (for ArgList) + "ArgLogger": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList) } - inGSettings["ProcessorDict"]["ActivityList"].append(lResult) + inGSettings["ProcessorDict"]["ActivityList"].append(lResult) else: lResult = True lCMDStr = CMDStr.FileStoredSend(inHostFilePath = inHostFilePathStr, inRDPFilePath = inRDPFilePathStr) # Calculate the session Hex - lSessionHex = inGSettings["RobotRDPActive"]["RDPList"].get(inRDPSessionKeyStr, {}).get("SessionHex", None) - #lSessionHex = inGlobalDict["RobotRDPActive"]["RDPList"][inRDPSessionKeyStr]["SessionHex"] + lSessionHex = inGSettings["RobotRDPActive"]["RDPList"].get(inRDPSessionKeyStr, {}).get("SessionHex", None) + #lSessionHex = inGlobalDict["RobotRDPActive"]["RDPList"][inRDPSessionKeyStr]["SessionHex"] # Run CMD if lSessionHex: - Connector.SessionCMDRun(inSessionHex=lSessionHex, inCMDCommandStr=lCMDStr, inModeStr="LISTEN", inClipboardTimeoutSec = 120, inLogger=inGSettings["Logger"], inRDPConfigurationItem=inGSettings["RobotRDPActive"]["RDPList"][inRDPSessionKeyStr]) + Connector.SessionCMDRun(inSessionHex=lSessionHex, inCMDCommandStr=lCMDStr, inModeStr="LISTEN", inClipboardTimeoutSec = 120, inLogger=inGSettings["Logger"], inRDPConfigurationItem=inGSettings["RobotRDPActive"]["RDPList"][inRDPSessionKeyStr]) return lResult
-
[docs]def RDPSessionFileStoredRecieve(inGSettings, inRDPSessionKeyStr, inRDPFilePathStr, inHostFilePathStr): - """ +
[docs]def RDPSessionFileStoredRecieve(inGSettings, inRDPSessionKeyStr, inRDPFilePathStr, inHostFilePathStr): + """ Receive file from Session RDP to Host using shared drive in RDP :param inGSettings: Global settings dict (singleton) @@ -1265,59 +1302,59 @@ :param inRDPFilePathStr: :param inHostFilePathStr: :return: - """ + """ # Check thread if not Core.IsProcessorThread(inGSettings=inGSettings): - if inGSettings["Logger"]: inGSettings["Logger"].warning(f"RDP def was called not from processor queue - activity will be append in the processor queue.") + if inGSettings["Logger"]: inGSettings["Logger"].warning(f"RDP def was called not from processor queue - activity will be append in the processor queue.") lResult = { - "Def": RDPSessionFileStoredRecieve, # def link or def alias (look gSettings["Processor"]["AliasDefDict"]) - "ArgList": [], # Args list - "ArgDict": {"inRDPSessionKeyStr": inRDPSessionKeyStr, "inRDPFilePathStr": inRDPFilePathStr, "inHostFilePathStr": inHostFilePathStr }, # Args dictionary - "ArgGSettings": "inGSettings", # Name of GSettings attribute: str (ArgDict) or index (for ArgList) - "ArgLogger": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList) + "Def": RDPSessionFileStoredRecieve, # def link or def alias (look gSettings["Processor"]["AliasDefDict"]) + "ArgList": [], # Args list + "ArgDict": {"inRDPSessionKeyStr": inRDPSessionKeyStr, "inRDPFilePathStr": inRDPFilePathStr, "inHostFilePathStr": inHostFilePathStr }, # Args dictionary + "ArgGSettings": "inGSettings", # Name of GSettings attribute: str (ArgDict) or index (for ArgList) + "ArgLogger": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList) } - inGSettings["ProcessorDict"]["ActivityList"].append(lResult) + inGSettings["ProcessorDict"]["ActivityList"].append(lResult) else: lResult = True lCMDStr = CMDStr.FileStoredRecieve(inRDPFilePath = inRDPFilePathStr, inHostFilePath = inHostFilePathStr) # Calculate the session Hex - lSessionHex = inGSettings["RobotRDPActive"]["RDPList"].get(inRDPSessionKeyStr,{}).get("SessionHex", None) + lSessionHex = inGSettings["RobotRDPActive"]["RDPList"].get(inRDPSessionKeyStr,{}).get("SessionHex", None) # Run CMD if lSessionHex: - Connector.SessionCMDRun(inSessionHex=lSessionHex, inCMDCommandStr=lCMDStr, inModeStr="LISTEN", inClipboardTimeoutSec = 120, inLogger=inGSettings["Logger"], inRDPConfigurationItem=inGSettings["RobotRDPActive"]["RDPList"][inRDPSessionKeyStr]) + Connector.SessionCMDRun(inSessionHex=lSessionHex, inCMDCommandStr=lCMDStr, inModeStr="LISTEN", inClipboardTimeoutSec = 120, inLogger=inGSettings["Logger"], inRDPConfigurationItem=inGSettings["RobotRDPActive"]["RDPList"][inRDPSessionKeyStr]) return lResult
# # # # # # # # # # # # # # # # # # # # # # # # # # # # Start orchestrator # # # # # # # # # # # # # # # # # # # # # # # -
[docs]def GSettingsAutocleaner(inGSettings): - """ +
[docs]def GSettingsAutocleaner(inGSettings): + """ Interval gsettings auto cleaner :param inGSettings: Global settings dict (singleton) :return: - """ + """ while True: - time.sleep(inGSettings["Autocleaner"]["IntervalSecFloat"]) # Wait for the next iteration - lL = inGSettings["Logger"] - if lL: lL.info(f"Autocleaner is running") # Info + time.sleep(inGSettings["Autocleaner"]["IntervalSecFloat"]) # Wait for the next iteration + lL = inGSettings["Logger"] + if lL: lL.info(f"Autocleaner is running") # Info lNowDatetime = datetime.datetime.now() # Get now time # Clean old items in Client > Session > TechnicalSessionGUIDCache lTechnicalSessionGUIDCacheNew = {} - for lItemKeyStr in inGSettings["Client"]["Session"]["TechnicalSessionGUIDCache"]: - lItemValue = inGSettings["Client"]["Session"]["TechnicalSessionGUIDCache"][lItemKeyStr] - if (lNowDatetime - lItemValue["InitDatetime"]).total_seconds() < inGSettings["Client"]["Session"]["LifetimeSecFloat"]: # Add if lifetime is ok + for lItemKeyStr in inGSettings["Client"]["Session"]["TechnicalSessionGUIDCache"]: + lItemValue = inGSettings["Client"]["Session"]["TechnicalSessionGUIDCache"][lItemKeyStr] + if (lNowDatetime - lItemValue["InitDatetime"]).total_seconds() < inGSettings["Client"]["Session"]["LifetimeSecFloat"]: # Add if lifetime is ok lTechnicalSessionGUIDCacheNew[lItemKeyStr]=lItemValue # Lifetime is ok - set else: - if lL: lL.debug(f"Client > Session > TechnicalSessionGUIDCache > lItemKeyStr: Lifetime is expired. Remove from gSettings") # Info - inGSettings["Client"]["Session"]["TechnicalSessionGUIDCache"] = lTechnicalSessionGUIDCacheNew # Set updated Cache
+ if lL: lL.debug(f"Client > Session > TechnicalSessionGUIDCache > lItemKeyStr: Lifetime is expired. Remove from gSettings") # Info + inGSettings["Client"]["Session"]["TechnicalSessionGUIDCache"] = lTechnicalSessionGUIDCacheNew # Set updated Cache
# # # # # # # # # # # # # # # # # # # # # # # # # # from .. import __version__ # Get version from the package def Orchestrator(inGSettings): - lL = inGSettings["Logger"] + lL = inGSettings["Logger"] # https://stackoverflow.com/questions/130763/request-uac-elevation-from-within-a-python-script def is_admin(): try: @@ -1326,16 +1363,16 @@ return False if not is_admin(): # Re-run the program with admin rights - ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, " ".join(sys.argv), None, 1) + ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, " ".join(sys.argv), None, 1) else: # Code of your program here #mGlobalDict = Settings.Settings(sys.argv[1]) gSettingsDict = inGSettings # Alias for old name in alg - inGSettings["VersionStr"] = __version__ + inGSettings["VersionStr"] = __version__ #Logger alias - lL = gSettingsDict["Logger"] + lL = gSettingsDict["Logger"] - if lL: lL.info("Link the gSettings in submodules") #Logging + if lL: lL.info("Link the gSettings in submodules") #Logging Processor.gSettingsDict = gSettingsDict Timer.gSettingsDict = gSettingsDict Timer.Processor.gSettingsDict = gSettingsDict @@ -1344,20 +1381,20 @@ # Check _SessionLast_RDPList.json in working directory. if exist - load into gsettings # GSettings - #"RobotRDPActive": { - # "RDPList": { - if os.path.exists("_SessionLast_RDPList.json"): - lFile = open("_SessionLast_RDPList.json", "r", encoding="utf-8") + #"RobotRDPActive": { + # "RDPList": { + if os.path.exists("_SessionLast_RDPList.json"): + lFile = open("_SessionLast_RDPList.json", "r", encoding="utf-8") lSessionLastRDPList = json.loads(lFile.read()) lFile.close() # Close the file - os.remove("_SessionLast_RDPList.json") # remove the temp file - gSettingsDict["RobotRDPActive"]["RDPList"]=lSessionLastRDPList # Set the last session dict - if lL: lL.warning(f"RDP Session List was restored from previous Orchestrator session") + os.remove("_SessionLast_RDPList.json") # remove the temp file + gSettingsDict["RobotRDPActive"]["RDPList"]=lSessionLastRDPList # Set the last session dict + if lL: lL.warning(f"RDP Session List was restored from previous Orchestrator session") # Init SettingsUpdate defs from file list (after RDP restore) - lSettingsUpdateFilePathList = gSettingsDict.get("OrchestratorStart", {}).get("DefSettingsUpdatePathList",[]) - lSubmoduleFunctionName = "SettingsUpdate" - lSettingsPath = "\\".join(os.path.join(os.getcwd(), __file__).split("\\")[:-1]) + lSettingsUpdateFilePathList = gSettingsDict.get("OrchestratorStart", {}).get("DefSettingsUpdatePathList",[]) + lSubmoduleFunctionName = "SettingsUpdate" + lSettingsPath = "\\".join(os.path.join(os.getcwd(), __file__).split("\\")[:-1]) for lModuleFilePathItem in lSettingsUpdateFilePathList: # Import defs with try catch try: # Try to init - go next if error and log in logger lModuleName = lModuleFilePathItem[0:-3] @@ -1369,7 +1406,7 @@ # Run SettingUpdate function in submodule getattr(lTechModuleFromSpec, lSubmoduleFunctionName)(gSettingsDict) except Exception as e: - if lL: lL.exception(f"Error when init .py file in orchestrator '{lModuleFilePathItem}'. Exception is below:") + if lL: lL.exception(f"Error when init .py file in orchestrator '{lModuleFilePathItem}'. Exception is below:") # Turn on backward compatibility BackwardCompatibility.Update(inGSettings= gSettingsDict) @@ -1379,53 +1416,53 @@ lModuleDefList = dir(lModule) for lItemDefNameStr in lModuleDefList: # Dont append alias for defs Orchestrator and ___deprecated_orchestrator_start__ - if lItemDefNameStr not in ["Orchestrator", "___deprecated_orchestrator_start__"]: + if lItemDefNameStr not in ["Orchestrator", "___deprecated_orchestrator_start__"]: lItemDef = getattr(lModule,lItemDefNameStr) - if callable(lItemDef): inGSettings["ProcessorDict"]["AliasDefDict"][lItemDefNameStr]=lItemDef + if callable(lItemDef): inGSettings["ProcessorDict"]["AliasDefDict"][lItemDefNameStr]=lItemDef #Инициализация настроечных параметров - lDaemonLoopSeconds=gSettingsDict["SchedulerDict"]["CheckIntervalSecFloat"] + lDaemonLoopSeconds=gSettingsDict["SchedulerDict"]["CheckIntervalSecFloat"] lDaemonActivityLogDict={} #Словарь отработанных активностей, ключ - кортеж (<activityType>, <datetime>, <processPath || processName>, <processArgs>) lDaemonLastDateTime=datetime.datetime.now() - gSettingsDict["ServerDict"]["WorkingDirectoryPathStr"] = os.getcwd() # Set working directory in g settings + gSettingsDict["ServerDict"]["WorkingDirectoryPathStr"] = os.getcwd() # Set working directory in g settings #Инициализация сервера - lThreadServer = Server.RobotDaemonServer("ServerThread", gSettingsDict) + lThreadServer = Server.RobotDaemonServer("ServerThread", gSettingsDict) lThreadServer.start() - if lL: lL.info("Web server has been started") #Logging + if lL: lL.info("Web server has been started") #Logging # Init the RobotScreenActive in another thread lRobotScreenActiveThread = threading.Thread(target= Monitor.CheckScreen) lRobotScreenActiveThread.daemon = True # Run the thread in daemon mode. lRobotScreenActiveThread.start() # Start the thread execution. - if lL: lL.info("Robot Screen active has been started") #Logging + if lL: lL.info("Robot Screen active has been started") #Logging # Init the RobotRDPActive in another thread - lRobotRDPThreadControlDict = {"ThreadExecuteBool":True} # inThreadControlDict = {"ThreadExecuteBool":True} - lRobotRDPActiveThread = threading.Thread(target= RobotRDPActive.RobotRDPActive, kwargs={"inGSettings":gSettingsDict, "inThreadControlDict":lRobotRDPThreadControlDict}) + lRobotRDPThreadControlDict = {"ThreadExecuteBool":True} # inThreadControlDict = {"ThreadExecuteBool":True} + lRobotRDPActiveThread = threading.Thread(target= RobotRDPActive.RobotRDPActive, kwargs={"inGSettings":gSettingsDict, "inThreadControlDict":lRobotRDPThreadControlDict}) lRobotRDPActiveThread.daemon = True # Run the thread in daemon mode. lRobotRDPActiveThread.start() # Start the thread execution. - if lL: lL.info("Robot RDP active has been started") #Logging + if lL: lL.info("Robot RDP active has been started") #Logging # Init autocleaner in another thread - lAutocleanerThread = threading.Thread(target= GSettingsAutocleaner, kwargs={"inGSettings":gSettingsDict}) + lAutocleanerThread = threading.Thread(target= GSettingsAutocleaner, kwargs={"inGSettings":gSettingsDict}) lAutocleanerThread.daemon = True # Run the thread in daemon mode. lAutocleanerThread.start() # Start the thread execution. - if lL: lL.info("Autocleaner thread has been started") #Logging + if lL: lL.info("Autocleaner thread has been started") #Logging # Orchestrator start activity - if lL: lL.info("Orchestrator start activity run") #Logging - for lActivityItem in gSettingsDict["OrchestratorStart"]["ActivityList"]: + if lL: lL.info("Orchestrator start activity run") #Logging + for lActivityItem in gSettingsDict["OrchestratorStart"]["ActivityList"]: Processor.ActivityListOrDict(lActivityItem) # Processor thread - lProcessorThread = threading.Thread(target= Processor.ProcessorRunSync, kwargs={"inGSettings":gSettingsDict, "inRobotRDPThreadControlDict":lRobotRDPThreadControlDict}) + lProcessorThread = threading.Thread(target= Processor.ProcessorRunSync, kwargs={"inGSettings":gSettingsDict, "inRobotRDPThreadControlDict":lRobotRDPThreadControlDict}) lProcessorThread.daemon = True # Run the thread in daemon mode. lProcessorThread.start() # Start the thread execution. - if lL: lL.info("Processor has been started (ProcessorDict)") #Logging + if lL: lL.info("Processor has been started (ProcessorDict)") #Logging - if lL: lL.info("Scheduler loop start") #Logging + if lL: lL.info("Scheduler loop start") #Logging gDaemonActivityLogDictRefreshSecInt = 10 # The second period for clear lDaemonActivityLogDict from old items gDaemonActivityLogDictLastTime = time.time() # The second perioad for clean lDaemonActivityLogDict from old items while True: @@ -1437,7 +1474,7 @@ if time.time()-gDaemonActivityLogDictLastTime>=gDaemonActivityLogDictRefreshSecInt: gDaemonActivityLogDictLastTime = time.time() # Update the time for lIndex, lItem in enumerate(lDaemonActivityLogDict): - if lItem["ActivityEndDateTime"] and lCurrentDateTime<=lItem["ActivityEndDateTime"]: + if lItem["ActivityEndDateTime"] and lCurrentDateTime<=lItem["ActivityEndDateTime"]: pass # Activity is actual - do not delete now else: @@ -1445,52 +1482,52 @@ lDaemonActivityLogDict.pop(lIndex,None) lIterationLastDateTime = lDaemonLastDateTime # Get current datetime before iterator (need for iterate all activities in loop) # Iterate throught the activity list - for lIndex, lItem in enumerate(gSettingsDict["SchedulerDict"]["ActivityTimeList"]): + for lIndex, lItem in enumerate(gSettingsDict["SchedulerDict"]["ActivityTimeList"]): try: # Prepare GUID of the activity lGUID = None - if "GUID" in lItem and lItem["GUID"]: - lGUID = lItem["GUID"] + if "GUID" in lItem and lItem["GUID"]: + lGUID = lItem["GUID"] else: lGUID = str(uuid.uuid4()) - lItem["GUID"]=lGUID + lItem["GUID"]=lGUID #Проверка дней недели, в рамках которых можно запускать активность - lItemWeekdayList=lItem.get("WeekdayList", [0, 1, 2, 3, 4, 5, 6]) + lItemWeekdayList=lItem.get("WeekdayList", [0, 1, 2, 3, 4, 5, 6]) if lCurrentDateTime.weekday() in lItemWeekdayList: if lFlagSearchActivityType: ####################################################################### #Branch 1 - if has TimeHH:MM ####################################################################### - if "TimeHH:MM" in lItem: + if "TimeHH:MMStr" in lItem: #Вид активности - запуск процесса #Сформировать временной штамп, относительно которого надо будет проверять время #часовой пояс пока не учитываем - lActivityDateTime=datetime.datetime.strptime(lItem["TimeHH:MM"],"%H:%M") + lActivityDateTime=datetime.datetime.strptime(lItem["TimeHH:MMStr"],"%H:%M") lActivityDateTime=lActivityDateTime.replace(year=lCurrentDateTime.year,month=lCurrentDateTime.month,day=lCurrentDateTime.day) #Убедиться в том, что время наступило if ( lActivityDateTime>=lDaemonLastDateTime and lCurrentDateTime>=lActivityDateTime): # Log info about activity - if lL: lL.info(f"Scheduler:: Activity list is started in new thread. Scheduler item: {lItem}") #Logging + if lL: lL.info(f"Scheduler:: Activity list is started in new thread. Parameters are not available to see.") #Logging # Do the activity - lThread = threading.Thread(target=Processor.ActivityListExecute, kwargs={"inGSettings": inGSettings, "inActivityList":lItem["ActivityList"]}) + lThread = threading.Thread(target=Processor.ActivityListExecute, kwargs={"inGSettings": inGSettings, "inActivityList":lItem["ActivityList"]}) lThread.start() lIterationLastDateTime = datetime.datetime.now() # Set the new datetime for the new processor activity except Exception as e: - if lL: lL.exception(f"Scheduler: Exception has been catched in Scheduler module when activity time item was initialising. ActivityTimeItem is {lItem}") + if lL: lL.exception(f"Scheduler: Exception has been catched in Scheduler module when activity time item was initialising. ActivityTimeItem is {lItem}") lDaemonLastDateTime = lIterationLastDateTime # Set the new datetime for the new processor activity #Уснуть до следующего прогона time.sleep(lDaemonLoopSeconds) except Exception as e: - if lL: lL.exception(f"Scheduler: Exception has been catched in Scheduler module. Global error") + if lL: lL.exception(f"Scheduler: Exception has been catched in Scheduler module. Global error") # Backward compatibility below to 1.2.0 def __deprecated_orchestrator_start__(): - lSubmoduleFunctionName = "Settings" + lSubmoduleFunctionName = "Settings" lFileFullPath = sys.argv[1] - lModuleName = (lFileFullPath.split("\\")[-1])[0:-3] + lModuleName = (lFileFullPath.split("\\")[-1])[0:-3] lTechSpecification = importlib.util.spec_from_file_location(lModuleName, lFileFullPath) lTechModuleFromSpec = importlib.util.module_from_spec(lTechSpecification) lTechSpecificationModuleLoader = lTechSpecification.loader.exec_module(lTechModuleFromSpec) @@ -1501,31 +1538,48 @@ ################################################# Orchestrator(inGSettings=gSettingsDict) # Call the orchestrator
-
-
+
+ +
+ +
+

+ © Copyright 2020, Ivan Maslov. + +

+
+ + + + Built with Sphinx using a + + theme + + provided by Read the Docs. + +
- - - - - - - + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Wiki/ENG_Guide/html/_sources/Orchestrator.rst.txt b/Wiki/ENG_Guide/html/_sources/Orchestrator.rst.txt deleted file mode 100644 index dbae85b5..00000000 --- a/Wiki/ENG_Guide/html/_sources/Orchestrator.rst.txt +++ /dev/null @@ -1,26 +0,0 @@ -.. pyOpenRPA documentation master file, created by - sphinx-quickstart on Sat Dec 19 23:59:00 2020. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - -Welcome to pyOpenRPA's documentation! -===================================== - -.. toctree:: - :maxdepth: 2 - :caption: Contents: - - - -Indices and tables -===================================== - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` - - -pyOpenRPA Orchestrator -===================================== -.. automodule:: pyOpenRPA.Orchestrator.__Orchestrator__ - :members: diff --git a/Wiki/ENG_Guide/html/_sources/Orchestrator/HowToStart.rst.txt b/Wiki/ENG_Guide/html/_sources/Orchestrator/HowToStart.rst.txt new file mode 100644 index 00000000..e704cc56 --- /dev/null +++ b/Wiki/ENG_Guide/html/_sources/Orchestrator/HowToStart.rst.txt @@ -0,0 +1,9 @@ +************************ +How to start +************************ + +Start configuration example + +.. include:: ../../../Orchestrator/OrchestratorSettings.py + :literal: + \ No newline at end of file diff --git a/Wiki/ENG_Guide/html/_sources/Orchestrator/Orchestrator.rst.txt b/Wiki/ENG_Guide/html/_sources/Orchestrator/Orchestrator.rst.txt new file mode 100644 index 00000000..b94fc25c --- /dev/null +++ b/Wiki/ENG_Guide/html/_sources/Orchestrator/Orchestrator.rst.txt @@ -0,0 +1,81 @@ +************************ +Description +************************ + +pyOpenRPA Orchestrator is the executable process. + +The features of the orchestrator is: +- Centralized/decentralized user control interface (applicable and for business users and for technical users). Web based, support desktop, tablet, phone. +- Automatized robots control (customized algorithms, robots scheduling) +- Source code mega flexibility: Light Orchestrator architecture is good for own customization + +Global settings dict concept +################################## +pyOpenRPA project is complex tool which consist of several executable modules such as Robot, Orchestrator, Studio, + +Because of module compexity, we use 1 init arg - inGSettings +inGSettings is a complex dictionary which has all reqired parameters for the module execution. + +The description of the GSettings you can find in executable module details. + + +Orchestrator how to configure +################################## + + +To init pyOpenRPA Orchestrator instance use script: + +from pyOpenRPA import Orchestrator # Import orchestrator main +gSettings = SettingsTemplate.Create(inModeStr="BASIC") # Create GSettings with basic configuration +Orchestrator.Orchestrator(inGSettings=gSettings) # Call the orchestrator def + +gSettings structure + +:ref:`gSettingsTemplate`. + + + +Orchestrator architecture +################################## +Orchestrator has several source code components: +- User/robot activity consolidated queue single thread (Processor) +- User/robot activity asynchonus many threads (Processor) +- Scheduler single thread (main) +- RDP keep active many thread +- Autocleaner single thread +- GUI keep active single thread +- HTTP web server single thread (create user socket threads) +- + +Below you can find more information about all of the component. + +Component Processor +################################## +Sync - Append activity list to consolidated processor queue. Execution goes sequency by the activity list order + +Async - Create New thread to execute the activity list + +- Activity list +Liast of the activity item + +- Activity item +Activity item is universal mechanism to execute different algorythms from any sources. +The core feature of the Activity is to call python defs with args and kwargs. +If you need to init do some activity you can write some python def, then create Activity item with current def. +ATTENTION: In some cases (such as web transmition), when you can't transmit python def as object you can use symbolic names for python defs. It is apply you to init all of you want from the web UI. + +?Why i cant transmit python def from the web +Because the WEB space is not the Python executable space. Interaction between it spaces create by JSON protocol. So, we know than JSON apply int, float, str, bool, None, list, dict - that is all. +{ + "Def":"DefAliasTest", # def link or def alias (look gSettings["Processor"]["AliasDefDict"]) + "ArgList":[1,2,3], # Args list + "ArgDict":{"ttt":1,"222":2,"dsd":3}, # Args dictionary + "ArgGSettings": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList) + "ArgLogger": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList) +}# Pay attention! Do not left comma symbol after the end of the dict - it can be interpretated like a turple.. + + +pyOpenRPA Orchestrator +################################## +.. automodule:: pyOpenRPA.Orchestrator.__Orchestrator__ + :members: \ No newline at end of file diff --git a/Wiki/ENG_Guide/html/_sources/Orchestrator/gSettingsTemplate.rst.txt b/Wiki/ENG_Guide/html/_sources/Orchestrator/gSettingsTemplate.rst.txt new file mode 100644 index 00000000..a99645f5 --- /dev/null +++ b/Wiki/ENG_Guide/html/_sources/Orchestrator/gSettingsTemplate.rst.txt @@ -0,0 +1,9 @@ +.. _gSettingsTemplate: +************************ +gSettings Template +************************ + +gSettings structure + +.. include:: ../../pyOpenRPA/Orchestrator/SettingsTemplate.py + :literal: \ No newline at end of file diff --git a/Wiki/ENG_Guide/html/_sources/Robot/Robot.rst.txt b/Wiki/ENG_Guide/html/_sources/Robot/Robot.rst.txt new file mode 100644 index 00000000..f2017b64 --- /dev/null +++ b/Wiki/ENG_Guide/html/_sources/Robot/Robot.rst.txt @@ -0,0 +1,11 @@ +************************ +Description +************************ + +pyOpenRPA Robot is the python package. + + +pyOpenRPA Robot +################################## +.. automodule:: pyOpenRPA.Robot.UIDesktop + :members: \ No newline at end of file diff --git a/Wiki/ENG_Guide/html/_sources/Studio/Studio.rst.txt b/Wiki/ENG_Guide/html/_sources/Studio/Studio.rst.txt new file mode 100644 index 00000000..3f4cf4e0 --- /dev/null +++ b/Wiki/ENG_Guide/html/_sources/Studio/Studio.rst.txt @@ -0,0 +1,5 @@ +************************ +Description +************************ + +pyOpenRPA Studio is the executable process. diff --git a/Wiki/ENG_Guide/html/_sources/index.rst.txt b/Wiki/ENG_Guide/html/_sources/index.rst.txt index 9b83f9e6..d91941ab 100644 --- a/Wiki/ENG_Guide/html/_sources/index.rst.txt +++ b/Wiki/ENG_Guide/html/_sources/index.rst.txt @@ -8,22 +8,32 @@ Welcome to pyOpenRPA's documentation! .. toctree:: :maxdepth: 2 - :caption: Contents: + :caption: GENERAL :glob: :titlesonly: - Orchestrator + * - -Indices and tables -===================================== - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` - - -pyOpenRPA Orchestrator -===================================== -.. automodule:: pyOpenRPA.Orchestrator.__Orchestrator__ - :members: +.. toctree:: + :maxdepth: 2 + :caption: ROBOT + :glob: + :titlesonly: + + Robot/* + +.. toctree:: + :maxdepth: 2 + :caption: STUDIO + :glob: + :titlesonly: + + Studio/* + +.. toctree:: + :maxdepth: 2 + :caption: ORCHESTRATOR + :glob: + :titlesonly: + + Orchestrator/* \ No newline at end of file diff --git a/Wiki/ENG_Guide/html/_static/css/badge_only.css b/Wiki/ENG_Guide/html/_static/css/badge_only.css new file mode 100644 index 00000000..e380325b --- /dev/null +++ b/Wiki/ENG_Guide/html/_static/css/badge_only.css @@ -0,0 +1 @@ +.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} \ No newline at end of file diff --git a/Wiki/ENG_Guide/html/_static/css/fonts/Roboto-Slab-Bold.woff b/Wiki/ENG_Guide/html/_static/css/fonts/Roboto-Slab-Bold.woff new file mode 100644 index 00000000..6cb60000 Binary files /dev/null and b/Wiki/ENG_Guide/html/_static/css/fonts/Roboto-Slab-Bold.woff differ diff --git a/Wiki/ENG_Guide/html/_static/css/fonts/Roboto-Slab-Bold.woff2 b/Wiki/ENG_Guide/html/_static/css/fonts/Roboto-Slab-Bold.woff2 new file mode 100644 index 00000000..7059e231 Binary files /dev/null and b/Wiki/ENG_Guide/html/_static/css/fonts/Roboto-Slab-Bold.woff2 differ diff --git a/Wiki/ENG_Guide/html/_static/css/fonts/Roboto-Slab-Regular.woff b/Wiki/ENG_Guide/html/_static/css/fonts/Roboto-Slab-Regular.woff new file mode 100644 index 00000000..f815f63f Binary files /dev/null and b/Wiki/ENG_Guide/html/_static/css/fonts/Roboto-Slab-Regular.woff differ diff --git a/Wiki/ENG_Guide/html/_static/css/fonts/Roboto-Slab-Regular.woff2 b/Wiki/ENG_Guide/html/_static/css/fonts/Roboto-Slab-Regular.woff2 new file mode 100644 index 00000000..f2c76e5b Binary files /dev/null and b/Wiki/ENG_Guide/html/_static/css/fonts/Roboto-Slab-Regular.woff2 differ diff --git a/Wiki/ENG_Guide/html/_static/css/fonts/fontawesome-webfont.eot b/Wiki/ENG_Guide/html/_static/css/fonts/fontawesome-webfont.eot new file mode 100644 index 00000000..e9f60ca9 Binary files /dev/null and b/Wiki/ENG_Guide/html/_static/css/fonts/fontawesome-webfont.eot differ diff --git a/Wiki/ENG_Guide/html/_static/css/fonts/fontawesome-webfont.svg b/Wiki/ENG_Guide/html/_static/css/fonts/fontawesome-webfont.svg new file mode 100644 index 00000000..855c845e --- /dev/null +++ b/Wiki/ENG_Guide/html/_static/css/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Wiki/ENG_Guide/html/_static/css/fonts/fontawesome-webfont.ttf b/Wiki/ENG_Guide/html/_static/css/fonts/fontawesome-webfont.ttf new file mode 100644 index 00000000..35acda2f Binary files /dev/null and b/Wiki/ENG_Guide/html/_static/css/fonts/fontawesome-webfont.ttf differ diff --git a/Wiki/ENG_Guide/html/_static/css/fonts/fontawesome-webfont.woff b/Wiki/ENG_Guide/html/_static/css/fonts/fontawesome-webfont.woff new file mode 100644 index 00000000..400014a4 Binary files /dev/null and b/Wiki/ENG_Guide/html/_static/css/fonts/fontawesome-webfont.woff differ diff --git a/Wiki/ENG_Guide/html/_static/css/fonts/fontawesome-webfont.woff2 b/Wiki/ENG_Guide/html/_static/css/fonts/fontawesome-webfont.woff2 new file mode 100644 index 00000000..4d13fc60 Binary files /dev/null and b/Wiki/ENG_Guide/html/_static/css/fonts/fontawesome-webfont.woff2 differ diff --git a/Wiki/ENG_Guide/html/_static/css/fonts/lato-bold-italic.woff b/Wiki/ENG_Guide/html/_static/css/fonts/lato-bold-italic.woff new file mode 100644 index 00000000..88ad05b9 Binary files /dev/null and b/Wiki/ENG_Guide/html/_static/css/fonts/lato-bold-italic.woff differ diff --git a/Wiki/ENG_Guide/html/_static/css/fonts/lato-bold-italic.woff2 b/Wiki/ENG_Guide/html/_static/css/fonts/lato-bold-italic.woff2 new file mode 100644 index 00000000..c4e3d804 Binary files /dev/null and b/Wiki/ENG_Guide/html/_static/css/fonts/lato-bold-italic.woff2 differ diff --git a/Wiki/ENG_Guide/html/_static/css/fonts/lato-bold.woff b/Wiki/ENG_Guide/html/_static/css/fonts/lato-bold.woff new file mode 100644 index 00000000..c6dff51f Binary files /dev/null and b/Wiki/ENG_Guide/html/_static/css/fonts/lato-bold.woff differ diff --git a/Wiki/ENG_Guide/html/_static/css/fonts/lato-bold.woff2 b/Wiki/ENG_Guide/html/_static/css/fonts/lato-bold.woff2 new file mode 100644 index 00000000..bb195043 Binary files /dev/null and b/Wiki/ENG_Guide/html/_static/css/fonts/lato-bold.woff2 differ diff --git a/Wiki/ENG_Guide/html/_static/css/fonts/lato-normal-italic.woff b/Wiki/ENG_Guide/html/_static/css/fonts/lato-normal-italic.woff new file mode 100644 index 00000000..76114bc0 Binary files /dev/null and b/Wiki/ENG_Guide/html/_static/css/fonts/lato-normal-italic.woff differ diff --git a/Wiki/ENG_Guide/html/_static/css/fonts/lato-normal-italic.woff2 b/Wiki/ENG_Guide/html/_static/css/fonts/lato-normal-italic.woff2 new file mode 100644 index 00000000..3404f37e Binary files /dev/null and b/Wiki/ENG_Guide/html/_static/css/fonts/lato-normal-italic.woff2 differ diff --git a/Wiki/ENG_Guide/html/_static/css/fonts/lato-normal.woff b/Wiki/ENG_Guide/html/_static/css/fonts/lato-normal.woff new file mode 100644 index 00000000..ae1307ff Binary files /dev/null and b/Wiki/ENG_Guide/html/_static/css/fonts/lato-normal.woff differ diff --git a/Wiki/ENG_Guide/html/_static/css/fonts/lato-normal.woff2 b/Wiki/ENG_Guide/html/_static/css/fonts/lato-normal.woff2 new file mode 100644 index 00000000..3bf98433 Binary files /dev/null and b/Wiki/ENG_Guide/html/_static/css/fonts/lato-normal.woff2 differ diff --git a/Wiki/ENG_Guide/html/_static/css/theme.css b/Wiki/ENG_Guide/html/_static/css/theme.css new file mode 100644 index 00000000..8cd4f101 --- /dev/null +++ b/Wiki/ENG_Guide/html/_static/css/theme.css @@ -0,0 +1,4 @@ +html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a,.wy-menu-vertical li.current>a span.toctree-expand:before,.wy-menu-vertical li.on a,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li span.toctree-expand:before,.wy-nav-top a,.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li span.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p.caption .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a span.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a span.fa-pull-left.toctree-expand,.wy-menu-vertical li span.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p.caption .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a span.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a span.fa-pull-right.toctree-expand,.wy-menu-vertical li span.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p.caption .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a span.pull-left.toctree-expand,.wy-menu-vertical li.on a span.pull-left.toctree-expand,.wy-menu-vertical li span.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p.caption .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a span.pull-right.toctree-expand,.wy-menu-vertical li.on a span.pull-right.toctree-expand,.wy-menu-vertical li span.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li span.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li span.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li span.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li a span.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li span.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p.caption .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a span.toctree-expand,.btn .wy-menu-vertical li.on a span.toctree-expand,.btn .wy-menu-vertical li span.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p.caption .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a span.toctree-expand,.nav .wy-menu-vertical li.on a span.toctree-expand,.nav .wy-menu-vertical li span.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p.caption .btn .headerlink,.rst-content p.caption .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn span.toctree-expand,.wy-menu-vertical li.current>a .btn span.toctree-expand,.wy-menu-vertical li.current>a .nav span.toctree-expand,.wy-menu-vertical li .nav span.toctree-expand,.wy-menu-vertical li.on a .btn span.toctree-expand,.wy-menu-vertical li.on a .nav span.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p.caption .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li span.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p.caption .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li span.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p.caption .btn .fa-large.headerlink,.rst-content p.caption .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn span.fa-large.toctree-expand,.wy-menu-vertical li .nav span.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p.caption .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li span.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p.caption .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li span.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p.caption .btn .fa-spin.headerlink,.rst-content p.caption .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn span.fa-spin.toctree-expand,.wy-menu-vertical li .nav span.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p.caption .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li span.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p.caption .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li span.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p.caption .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li span.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p.caption .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini span.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol li,.rst-content ol.arabic li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content ol.arabic li p:last-child,.rst-content ol.arabic li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol li ul li,.rst-content ol.arabic li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs li{display:inline-block}.wy-breadcrumbs li.wy-breadcrumbs-aside{float:right}.wy-breadcrumbs li a{display:inline-block;padding:5px}.wy-breadcrumbs li a:first-child{padding-left:0}.rst-content .wy-breadcrumbs li tt,.wy-breadcrumbs li .rst-content tt,.wy-breadcrumbs li code{padding:5px;border:none;background:none}.rst-content .wy-breadcrumbs li tt.literal,.wy-breadcrumbs li .rst-content tt.literal,.wy-breadcrumbs li code.literal{color:#404040}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li span.toctree-expand{display:block;float:left;margin-left:-1.2em;font-size:.8em;line-height:1.6em;color:#4d4d4d}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover span.toctree-expand,.wy-menu-vertical li.on a:hover span.toctree-expand{color:grey}.wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand{display:block;font-size:.8em;line-height:1.6em;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover span.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 span.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 span.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover span.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active span.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p.caption .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p.caption .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version span.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content img{max-width:100%;height:auto}.rst-content div.figure{margin-bottom:24px}.rst-content div.figure p.caption{font-style:italic}.rst-content div.figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp{user-select:none;pointer-events:none}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink{visibility:hidden;font-size:14px}.rst-content .code-block-caption .headerlink:after,.rst-content .toctree-wrapper>p.caption .headerlink:after,.rst-content dl dt .headerlink:after,.rst-content h1 .headerlink:after,.rst-content h2 .headerlink:after,.rst-content h3 .headerlink:after,.rst-content h4 .headerlink:after,.rst-content h5 .headerlink:after,.rst-content h6 .headerlink:after,.rst-content p.caption .headerlink:after,.rst-content table>caption .headerlink:after{content:"\f0c1";font-family:FontAwesome}.rst-content .code-block-caption:hover .headerlink:after,.rst-content .toctree-wrapper>p.caption:hover .headerlink:after,.rst-content dl dt:hover .headerlink:after,.rst-content h1:hover .headerlink:after,.rst-content h2:hover .headerlink:after,.rst-content h3:hover .headerlink:after,.rst-content h4:hover .headerlink:after,.rst-content h5:hover .headerlink:after,.rst-content h6:hover .headerlink:after,.rst-content p.caption:hover .headerlink:after,.rst-content table>caption:hover .headerlink:after{visibility:visible}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .hlist{width:100%}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl dt span.classifier:before{content:" : "}html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.field-list>dt:after,html.writer-html5 .rst-content dl.footnote>dt:after{content:":"}html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.footnote>dt>span.brackets{margin-right:.5rem}html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{font-style:italic}html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.footnote>dd p,html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{font-size:inherit;line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dl:not(.field-list)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dl:not(.field-list)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code,html.writer-html4 .rst-content dl:not(.docutils) tt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file diff --git a/Wiki/ENG_Guide/html/_static/js/badge_only.js b/Wiki/ENG_Guide/html/_static/js/badge_only.js new file mode 100644 index 00000000..526d7234 --- /dev/null +++ b/Wiki/ENG_Guide/html/_static/js/badge_only.js @@ -0,0 +1 @@ +!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=4)}({4:function(e,t,r){}}); \ No newline at end of file diff --git a/Wiki/ENG_Guide/html/_static/js/html5shiv-printshiv.min.js b/Wiki/ENG_Guide/html/_static/js/html5shiv-printshiv.min.js new file mode 100644 index 00000000..2b43bd06 --- /dev/null +++ b/Wiki/ENG_Guide/html/_static/js/html5shiv-printshiv.min.js @@ -0,0 +1,4 @@ +/** +* @preserve HTML5 Shiv 3.7.3-pre | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed +*/ +!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/Wiki/ENG_Guide/html/_static/js/html5shiv.min.js b/Wiki/ENG_Guide/html/_static/js/html5shiv.min.js new file mode 100644 index 00000000..cd1c674f --- /dev/null +++ b/Wiki/ENG_Guide/html/_static/js/html5shiv.min.js @@ -0,0 +1,4 @@ +/** +* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed +*/ +!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/Wiki/ENG_Guide/html/_static/js/theme.js b/Wiki/ENG_Guide/html/_static/js/theme.js new file mode 100644 index 00000000..839d07e2 --- /dev/null +++ b/Wiki/ENG_Guide/html/_static/js/theme.js @@ -0,0 +1 @@ +!function(n){var e={};function t(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return n[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=n,t.c=e,t.d=function(n,e,i){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:i})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var o in n)t.d(i,o,function(e){return n[e]}.bind(null,o));return i},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=0)}([function(n,e,t){t(1),n.exports=t(3)},function(n,e,t){(function(){var e="undefined"!=typeof window?window.jQuery:t(2);n.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(n){var t=this;void 0===n&&(n=!0),t.isRunning||(t.isRunning=!0,e((function(e){t.init(e),t.reset(),t.win.on("hashchange",t.reset),n&&t.win.on("scroll",(function(){t.linkScroll||t.winScroll||(t.winScroll=!0,requestAnimationFrame((function(){t.onScroll()})))})),t.win.on("resize",(function(){t.winResize||(t.winResize=!0,requestAnimationFrame((function(){t.onResize()})))})),t.onResize()})))},enableSticky:function(){this.enable(!0)},init:function(n){n(document);var e=this;this.navBar=n("div.wy-side-scroll:first"),this.win=n(window),n(document).on("click","[data-toggle='wy-nav-top']",(function(){n("[data-toggle='wy-nav-shift']").toggleClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift")})).on("click",".wy-menu-vertical .current ul li a",(function(){var t=n(this);n("[data-toggle='wy-nav-shift']").removeClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift"),e.toggleCurrent(t),e.hashChange()})).on("click","[data-toggle='rst-current-version']",(function(){n("[data-toggle='rst-versions']").toggleClass("shift-up")})),n("table.docutils:not(.field-list,.footnote,.citation)").wrap("
"),n("table.docutils.footnote").wrap("
"),n("table.docutils.citation").wrap("
"),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n(''),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}t.length>0&&($(".wy-menu-vertical .current").removeClass("current"),t.addClass("current"),t.closest("li.toctree-l1").addClass("current"),t.closest("li.toctree-l1").parent().addClass("current"),t.closest("li.toctree-l1").addClass("current"),t.closest("li.toctree-l2").addClass("current"),t.closest("li.toctree-l3").addClass("current"),t.closest("li.toctree-l4").addClass("current"),t.closest("li.toctree-l5").addClass("current"),t[0].scrollIntoView())}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current"),e.siblings().find("li.current").removeClass("current"),e.find("> ul li.current").removeClass("current"),e.toggleClass("current")}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t=Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)}function m(e,t){var n,o,r=e[e.length-1];if(n=r,o=t,!(!s()||!l(n.content,o,!0)))return r;for(var c=e.length-1;0<=c;c--)if(l(e[c].content,t))return e[c]}function v(e,t){var n;!e||(n=e.nav.closest("li"))&&(n.classList.remove(t.navClass),e.content.classList.remove(t.contentClass),o(n,t),d("gumshoeDeactivate",n,{link:e.nav,content:e.content,settings:t}))}var h={navClass:"active",contentClass:"active",nested:!1,nestedClass:"active",offset:0,reflow:!1,events:!0},o=function(e,t){t.nested&&e.parentNode&&((e=e.parentNode.closest("li"))&&(e.classList.remove(t.nestedClass),o(e,t)))},p=function(e,t){!t.nested||(e=e.parentNode.closest("li"))&&(e.classList.add(t.nestedClass),p(e,t))};return function(e,t){var n,r,c,o,l,s={setup:function(){n=document.querySelectorAll(e),r=[],Array.prototype.forEach.call(n,function(e){var t=document.getElementById(decodeURIComponent(e.hash.substr(1)));t&&r.push({nav:e,content:t})}),f(r)}};s.detect=function(){var e,t,n,o=m(r,l);o?c&&o.content===c.content||(v(c,l),t=l,!(e=o)||(n=e.nav.closest("li"))&&(n.classList.add(t.navClass),e.content.classList.add(t.contentClass),p(n,t),d("gumshoeActivate",n,{link:e.nav,content:e.content,settings:t})),c=o):c&&(v(c,l),c=null)};function i(e){o&&u.cancelAnimationFrame(o),o=u.requestAnimationFrame(s.detect)}function a(e){o&&u.cancelAnimationFrame(o),o=u.requestAnimationFrame(function(){f(r),s.detect()})}s.destroy=function(){c&&v(c,l),u.removeEventListener("scroll",i,!1),l.reflow&&u.removeEventListener("resize",a,!1),l=o=c=n=r=null};return l=function(){var n={};return Array.prototype.forEach.call(arguments,function(e){for(var t in e){if(!e.hasOwnProperty(t))return;n[t]=e[t]}}),n}(h,t||{}),s.setup(),s.detect(),u.addEventListener("scroll",i,!1),l.reflow&&u.addEventListener("resize",a,!1),s}});var tocScroll=null,header=null;function scrollHandlerForHeader(){0==Math.floor(header.getBoundingClientRect().top)?header.classList.add("scrolled"):header.classList.remove("scrolled")}function scrollHandlerForTOC(e){null!==tocScroll&&(0==e?tocScroll.scrollTo(0,0):Math.ceil(e)>=Math.floor(document.documentElement.scrollHeight-window.innerHeight)?tocScroll.scrollTo(0,tocScroll.scrollHeight):document.querySelector(".scroll-current"))}function scrollHandler(e){scrollHandlerForHeader(),scrollHandlerForTOC(e)}function setupScrollHandler(){var t,n=!1;window.addEventListener("scroll",function(e){t=window.scrollY,n||(window.requestAnimationFrame(function(){scrollHandler(t),n=!1}),n=!0)}),window.scroll()}function setupScrollSpy(){null!==tocScroll&&new Gumshoe(".toc-tree a",{reflow:!0,recursive:!0,navClass:"scroll-current"})}function setup(){setupScrollHandler(),setupScrollSpy()}function main(){document.body.parentNode.classList.remove("no-js"),header=document.querySelector("header"),tocScroll=document.querySelector(".toc-scroll"),setup()}document.addEventListener("DOMContentLoaded",main); -//# sourceMappingURL=main.js.map diff --git a/Wiki/ENG_Guide/html/_static/scripts/main.js.map b/Wiki/ENG_Guide/html/_static/scripts/main.js.map deleted file mode 100644 index 5d70f82f..00000000 --- a/Wiki/ENG_Guide/html/_static/scripts/main.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["gumshoe-5.1.2-patched.js","main.js"],"names":["root","factory","define","amd","exports","module","Gumshoe","global","window","this","emitEvent","type","elem","detail","settings","events","event","CustomEvent","bubbles","cancelable","dispatchEvent","getOffsetTop","location","offsetParent","offsetTop","sortContents","contents","sort","item1","item2","content","isInView","bottom","bounds","getBoundingClientRect","offset","parseFloat","parseInt","innerHeight","document","documentElement","clientHeight","top","isAtBottom","Math","ceil","pageYOffset","max","body","scrollHeight","offsetHeight","getActive","item","last","length","i","deactivate","items","li","nav","closest","classList","remove","navClass","contentClass","deactivateNested","link","defaults","nested","nestedClass","reflow","parentNode","activateNested","add","selector","options","navItems","current","timeout","publicAPIs","setup","querySelectorAll","Array","prototype","forEach","call","getElementById","decodeURIComponent","hash","substr","push","detect","active","scrollHandler","cancelAnimationFrame","requestAnimationFrame","resizeHandler","destroy","removeEventListener","merged","arguments","obj","key","hasOwnProperty","extend","addEventListener","tocScroll","header","scrollHandlerForHeader","floor","scrollHandlerForTOC","positionY","scrollTo","querySelector","setupScrollHandler","last_known_scroll_position","ticking","e","scrollY","scroll","setupScrollSpy","recursive","main"],"mappings":"CAQA,SAAAA,EAAAC,GACA,mBAAAC,QAAAA,OAAAC,IACAD,OAAA,GAAA,WACA,OAAAD,EAAAD,KAEA,iBAAAI,QACAC,OAAAD,QAAAH,EAAAD,GAEAA,EAAAM,QAAAL,EAAAD,GARA,CAWA,oBAAAO,OACAA,OACA,oBAAAC,OACAA,OACAC,KACA,SAAAD,gBAkDA,SAAAE,EAAAC,EAAAC,EAAAC,GAEAA,EAAAC,SAAAC,SAGAC,EAAA,IAAAC,YAAAN,EAAA,CACAO,SAAA,EACAC,YAAA,EACAN,OAAAA,IAIAD,EAAAQ,cAAAJ,IAQA,SAAAK,EAAAT,GACA,IAAAU,EAAA,EACA,GAAAV,EAAAW,aACA,KAAAX,GACAU,GAAAV,EAAAY,UACAZ,EAAAA,EAAAW,aAGA,OAAA,GAAAD,EAAAA,EAAA,EAOA,SAAAG,EAAAC,GACAA,GACAA,EAAAC,KAAA,SAAAC,EAAAC,GAGA,OAFAR,EAAAO,EAAAE,SACAT,EAAAQ,EAAAC,UACA,EACA,IA2CA,SAAAC,EAAAnB,EAAAE,EAAAkB,GAGA,OAFAC,EAAArB,EAAAsB,wBACAC,EAjCA,mBAFArB,EAmCAA,GAjCAqB,OACAC,WAAAtB,EAAAqB,UAIAC,WAAAtB,EAAAqB,QA6BAH,EAEAK,SAAAJ,EAAAD,OAAA,KACAxB,EAAA8B,aAAAC,SAAAC,gBAAAC,cAGAJ,SAAAJ,EAAAS,IAAA,KAAAP,EAOA,SAAAQ,IACA,OACAC,KAAAC,KAAArC,EAAA8B,YAAA9B,EAAAsC,cAnCAF,KAAAG,IACAR,SAAAS,KAAAC,aACAV,SAAAC,gBAAAS,aACAV,SAAAS,KAAAE,aACAX,SAAAC,gBAAAU,aACAX,SAAAS,KAAAP,aACAF,SAAAC,gBAAAC,cAqDA,SAAAU,EAAAzB,EAAAZ,GACA,IAZAsC,EAAAtC,EAYAuC,EAAA3B,EAAAA,EAAA4B,OAAA,GACA,GAbAF,EAaAC,EAbAvC,EAaAA,KAZA6B,MAAAZ,EAAAqB,EAAAtB,QAAAhB,GAAA,IAYA,OAAAuC,EACA,IAAA,IAAAE,EAAA7B,EAAA4B,OAAA,EAAA,GAAAC,EAAAA,IACA,GAAAxB,EAAAL,EAAA6B,GAAAzB,QAAAhB,GAAA,OAAAY,EAAA6B,GA6BA,SAAAC,EAAAC,EAAA3C,GAEA,IAGA4C,GAHAD,IAGAC,EAAAD,EAAAE,IAAAC,QAAA,SAIAF,EAAAG,UAAAC,OAAAhD,EAAAiD,UACAN,EAAA3B,QAAA+B,UAAAC,OAAAhD,EAAAkD,cAGAC,EAAAP,EAAA5C,GAGAJ,EAAA,oBAAAgD,EAAA,CACAQ,KAAAT,EAAAE,IACA7B,QAAA2B,EAAA3B,QACAhB,SAAAA,KA7NA,IAAAqD,EAAA,CAEAJ,SAAA,SACAC,aAAA,SAGAI,QAAA,EACAC,YAAA,SAGAlC,OAAA,EACAmC,QAAA,EAGAvD,QAAA,GAwKAkD,EAAA,SAAAN,EAAA7C,GAEAA,EAAAsD,QAAAT,EAAAY,cAGAb,EAAAC,EAAAY,WAAAX,QAAA,SAIAF,EAAAG,UAAAC,OAAAhD,EAAAuD,aAGAJ,EAAAP,EAAA5C,MAoCA0D,EAAA,SAAAb,EAAA7C,IAEAA,EAAAsD,SAGAV,EAAAC,EAAAY,WAAAX,QAAA,SAIAF,EAAAG,UAAAY,IAAA3D,EAAAuD,aAGAG,EAAAd,EAAA5C,KA8LA,OA1JA,SAAA4D,EAAAC,GAKA,IACAC,EAAAlD,EAAAmD,EAAAC,EAAAhE,EADAiE,EAAA,CAUAC,MAAA,WAEAJ,EAAArC,SAAA0C,iBAAAP,GAGAhD,EAAA,GAGAwD,MAAAC,UAAAC,QAAAC,KAAAT,EAAA,SAAAxB,GAEA,IAAAtB,EAAAS,SAAA+C,eACAC,mBAAAnC,EAAAoC,KAAAC,OAAA,KAEA3D,GAGAJ,EAAAgE,KAAA,CACA/B,IAAAP,EACAtB,QAAAA,MAKAL,EAAAC,KAMAqD,EAAAY,OAAA,WAEA,IA1EAlC,EAAA3C,EAKA4C,EAqEAkC,EAAAzC,EAAAzB,EAAAZ,GAGA8E,EASAf,GAAAe,EAAA9D,UAAA+C,EAAA/C,UAGA0B,EAAAqB,EAAA/D,GAzFAA,EA0FAA,IA1FA2C,EA0FAmC,KArFAlC,EAAAD,EAAAE,IAAAC,QAAA,SAIAF,EAAAG,UAAAY,IAAA3D,EAAAiD,UACAN,EAAA3B,QAAA+B,UAAAY,IAAA3D,EAAAkD,cAGAQ,EAAAd,EAAA5C,GAGAJ,EAAA,kBAAAgD,EAAA,CACAQ,KAAAT,EAAAE,IACA7B,QAAA2B,EAAA3B,QACAhB,SAAAA,KA0EA+D,EAAAe,GAfAf,IACArB,EAAAqB,EAAA/D,GACA+D,EAAA,OAoBA,SAAAgB,EAAA7E,GAEA8D,GACAtE,EAAAsF,qBAAAhB,GAIAA,EAAAtE,EAAAuF,sBAAAhB,EAAAY,QAOA,SAAAK,EAAAhF,GAEA8D,GACAtE,EAAAsF,qBAAAhB,GAIAA,EAAAtE,EAAAuF,sBAAA,WACAtE,EAAAC,GACAqD,EAAAY,WAOAZ,EAAAkB,QAAA,WAEApB,GACArB,EAAAqB,EAAA/D,GAIAN,EAAA0F,oBAAA,SAAAL,GAAA,GACA/E,EAAAwD,QACA9D,EAAA0F,oBAAA,SAAAF,GAAA,GAQAlF,EADAgE,EADAD,EADAD,EADAlD,EAAA,MAgCA,OApBAZ,EA3XA,WACA,IAAAqF,EAAA,GAOA,OANAjB,MAAAC,UAAAC,QAAAC,KAAAe,UAAA,SAAAC,GACA,IAAA,IAAAC,KAAAD,EAAA,CACA,IAAAA,EAAAE,eAAAD,GAAA,OACAH,EAAAG,GAAAD,EAAAC,MAGAH,EAmXAK,CAAArC,EAAAQ,GAAA,IAGAI,EAAAC,QAGAD,EAAAY,SAGAnF,EAAAiG,iBAAA,SAAAZ,GAAA,GACA/E,EAAAwD,QACA9D,EAAAiG,iBAAA,SAAAT,GAAA,GASAjB,KCrcA,IAAA2B,UAAA,KACAC,OAAA,KAEA,SAAAC,yBACA,GAAAhE,KAAAiE,MAAAF,OAAAzE,wBAAAQ,KACAiE,OAAA9C,UAAAY,IAAA,YAEAkC,OAAA9C,UAAAC,OAAA,YAIA,SAAAgD,oBAAAC,GACA,OAAAL,YAKA,GAAAK,EACAL,UAAAM,SAAA,EAAA,GAGApE,KAAAC,KAAAkE,IACAnE,KAAAiE,MAAAtE,SAAAC,gBAAAS,aAAAzC,OAAA8B,aAEAoE,UAAAM,SAAA,EAAAN,UAAAzD,cAGAV,SAAA0E,cAAA,oBAgBA,SAAApB,cAAAkB,GACAH,yBACAE,oBAAAC,GAMA,SAAAG,qBAEA,IAAAC,EACAC,GAAA,EAEA5G,OAAAiG,iBAAA,SAAA,SAAAY,GACAF,EAAA3G,OAAA8G,QAEAF,IACA5G,OAAAuF,sBAAA,WACAF,cAAAsB,GACAC,GAAA,IAGAA,GAAA,KAGA5G,OAAA+G,SAGA,SAAAC,iBACA,OAAAd,WAKA,IAAApG,QAAA,cAAA,CACAgE,QAAA,EACAmD,WAAA,EACA1D,SAAA,mBAIA,SAAAiB,QACAkC,qBACAM,iBAGA,SAAAE,OACAnF,SAAAS,KAAAuB,WAAAV,UAAAC,OAAA,SAEA6C,OAAApE,SAAA0E,cAAA,UACAP,UAAAnE,SAAA0E,cAAA,eAEAjC,QAGAzC,SAAAkE,iBAAA,mBAAAiB","file":"main.js","sourcesContent":["/*!\n * gumshoejs v5.1.2 (patched by @pradyunsg)\n * A simple, framework-agnostic scrollspy script.\n * (c) 2019 Chris Ferdinandi\n * MIT License\n * http://github.com/cferdinandi/gumshoe\n */\n\n(function (root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define([], function () {\n return factory(root);\n });\n } else if (typeof exports === \"object\") {\n module.exports = factory(root);\n } else {\n root.Gumshoe = factory(root);\n }\n})(\n typeof global !== \"undefined\"\n ? global\n : typeof window !== \"undefined\"\n ? window\n : this,\n function (window) {\n \"use strict\";\n\n //\n // Defaults\n //\n\n var defaults = {\n // Active classes\n navClass: \"active\",\n contentClass: \"active\",\n\n // Nested navigation\n nested: false,\n nestedClass: \"active\",\n\n // Offset & reflow\n offset: 0,\n reflow: false,\n\n // Event support\n events: true,\n };\n\n //\n // Methods\n //\n\n /**\n * Merge two or more objects together.\n * @param {Object} objects The objects to merge together\n * @returns {Object} Merged values of defaults and options\n */\n var extend = function () {\n var merged = {};\n Array.prototype.forEach.call(arguments, function (obj) {\n for (var key in obj) {\n if (!obj.hasOwnProperty(key)) return;\n merged[key] = obj[key];\n }\n });\n return merged;\n };\n\n /**\n * Emit a custom event\n * @param {String} type The event type\n * @param {Node} elem The element to attach the event to\n * @param {Object} detail Any details to pass along with the event\n */\n var emitEvent = function (type, elem, detail) {\n // Make sure events are enabled\n if (!detail.settings.events) return;\n\n // Create a new event\n var event = new CustomEvent(type, {\n bubbles: true,\n cancelable: true,\n detail: detail,\n });\n\n // Dispatch the event\n elem.dispatchEvent(event);\n };\n\n /**\n * Get an element's distance from the top of the Document.\n * @param {Node} elem The element\n * @return {Number} Distance from the top in pixels\n */\n var getOffsetTop = function (elem) {\n var location = 0;\n if (elem.offsetParent) {\n while (elem) {\n location += elem.offsetTop;\n elem = elem.offsetParent;\n }\n }\n return location >= 0 ? location : 0;\n };\n\n /**\n * Sort content from first to last in the DOM\n * @param {Array} contents The content areas\n */\n var sortContents = function (contents) {\n if (contents) {\n contents.sort(function (item1, item2) {\n var offset1 = getOffsetTop(item1.content);\n var offset2 = getOffsetTop(item2.content);\n if (offset1 < offset2) return -1;\n return 1;\n });\n }\n };\n\n /**\n * Get the offset to use for calculating position\n * @param {Object} settings The settings for this instantiation\n * @return {Float} The number of pixels to offset the calculations\n */\n var getOffset = function (settings) {\n // if the offset is a function run it\n if (typeof settings.offset === \"function\") {\n return parseFloat(settings.offset());\n }\n\n // Otherwise, return it as-is\n return parseFloat(settings.offset);\n };\n\n /**\n * Get the document element's height\n * @private\n * @returns {Number}\n */\n var getDocumentHeight = function () {\n return Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight,\n document.body.offsetHeight,\n document.documentElement.offsetHeight,\n document.body.clientHeight,\n document.documentElement.clientHeight\n );\n };\n\n /**\n * Determine if an element is in view\n * @param {Node} elem The element\n * @param {Object} settings The settings for this instantiation\n * @param {Boolean} bottom If true, check if element is above bottom of viewport instead\n * @return {Boolean} Returns true if element is in the viewport\n */\n var isInView = function (elem, settings, bottom) {\n var bounds = elem.getBoundingClientRect();\n var offset = getOffset(settings);\n if (bottom) {\n return (\n parseInt(bounds.bottom, 10) <\n (window.innerHeight || document.documentElement.clientHeight)\n );\n }\n return parseInt(bounds.top, 10) <= offset;\n };\n\n /**\n * Check if at the bottom of the viewport\n * @return {Boolean} If true, page is at the bottom of the viewport\n */\n var isAtBottom = function () {\n if (\n Math.ceil(window.innerHeight + window.pageYOffset) >=\n getDocumentHeight()\n )\n return true;\n return false;\n };\n\n /**\n * Check if the last item should be used (even if not at the top of the page)\n * @param {Object} item The last item\n * @param {Object} settings The settings for this instantiation\n * @return {Boolean} If true, use the last item\n */\n var useLastItem = function (item, settings) {\n if (isAtBottom() && isInView(item.content, settings, true)) return true;\n return false;\n };\n\n /**\n * Get the active content\n * @param {Array} contents The content areas\n * @param {Object} settings The settings for this instantiation\n * @return {Object} The content area and matching navigation link\n */\n var getActive = function (contents, settings) {\n var last = contents[contents.length - 1];\n if (useLastItem(last, settings)) return last;\n for (var i = contents.length - 1; i >= 0; i--) {\n if (isInView(contents[i].content, settings)) return contents[i];\n }\n };\n\n /**\n * Deactivate parent navs in a nested navigation\n * @param {Node} nav The starting navigation element\n * @param {Object} settings The settings for this instantiation\n */\n var deactivateNested = function (nav, settings) {\n // If nesting isn't activated, bail\n if (!settings.nested || !nav.parentNode) return;\n\n // Get the parent navigation\n var li = nav.parentNode.closest(\"li\");\n if (!li) return;\n\n // Remove the active class\n li.classList.remove(settings.nestedClass);\n\n // Apply recursively to any parent navigation elements\n deactivateNested(li, settings);\n };\n\n /**\n * Deactivate a nav and content area\n * @param {Object} items The nav item and content to deactivate\n * @param {Object} settings The settings for this instantiation\n */\n var deactivate = function (items, settings) {\n // Make sure there are items to deactivate\n if (!items) return;\n\n // Get the parent list item\n var li = items.nav.closest(\"li\");\n if (!li) return;\n\n // Remove the active class from the nav and content\n li.classList.remove(settings.navClass);\n items.content.classList.remove(settings.contentClass);\n\n // Deactivate any parent navs in a nested navigation\n deactivateNested(li, settings);\n\n // Emit a custom event\n emitEvent(\"gumshoeDeactivate\", li, {\n link: items.nav,\n content: items.content,\n settings: settings,\n });\n };\n\n /**\n * Activate parent navs in a nested navigation\n * @param {Node} nav The starting navigation element\n * @param {Object} settings The settings for this instantiation\n */\n var activateNested = function (nav, settings) {\n // If nesting isn't activated, bail\n if (!settings.nested) return;\n\n // Get the parent navigation\n var li = nav.parentNode.closest(\"li\");\n if (!li) return;\n\n // Add the active class\n li.classList.add(settings.nestedClass);\n\n // Apply recursively to any parent navigation elements\n activateNested(li, settings);\n };\n\n /**\n * Activate a nav and content area\n * @param {Object} items The nav item and content to activate\n * @param {Object} settings The settings for this instantiation\n */\n var activate = function (items, settings) {\n // Make sure there are items to activate\n if (!items) return;\n\n // Get the parent list item\n var li = items.nav.closest(\"li\");\n if (!li) return;\n\n // Add the active class to the nav and content\n li.classList.add(settings.navClass);\n items.content.classList.add(settings.contentClass);\n\n // Activate any parent navs in a nested navigation\n activateNested(li, settings);\n\n // Emit a custom event\n emitEvent(\"gumshoeActivate\", li, {\n link: items.nav,\n content: items.content,\n settings: settings,\n });\n };\n\n /**\n * Create the Constructor object\n * @param {String} selector The selector to use for navigation items\n * @param {Object} options User options and settings\n */\n var Constructor = function (selector, options) {\n //\n // Variables\n //\n\n var publicAPIs = {};\n var navItems, contents, current, timeout, settings;\n\n //\n // Methods\n //\n\n /**\n * Set variables from DOM elements\n */\n publicAPIs.setup = function () {\n // Get all nav items\n navItems = document.querySelectorAll(selector);\n\n // Create contents array\n contents = [];\n\n // Loop through each item, get it's matching content, and push to the array\n Array.prototype.forEach.call(navItems, function (item) {\n // Get the content for the nav item\n var content = document.getElementById(\n decodeURIComponent(item.hash.substr(1))\n );\n if (!content) return;\n\n // Push to the contents array\n contents.push({\n nav: item,\n content: content,\n });\n });\n\n // Sort contents by the order they appear in the DOM\n sortContents(contents);\n };\n\n /**\n * Detect which content is currently active\n */\n publicAPIs.detect = function () {\n // Get the active content\n var active = getActive(contents, settings);\n\n // if there's no active content, deactivate and bail\n if (!active) {\n if (current) {\n deactivate(current, settings);\n current = null;\n }\n return;\n }\n\n // If the active content is the one currently active, do nothing\n if (current && active.content === current.content) return;\n\n // Deactivate the current content and activate the new content\n deactivate(current, settings);\n activate(active, settings);\n\n // Update the currently active content\n current = active;\n };\n\n /**\n * Detect the active content on scroll\n * Debounced for performance\n */\n var scrollHandler = function (event) {\n // If there's a timer, cancel it\n if (timeout) {\n window.cancelAnimationFrame(timeout);\n }\n\n // Setup debounce callback\n timeout = window.requestAnimationFrame(publicAPIs.detect);\n };\n\n /**\n * Update content sorting on resize\n * Debounced for performance\n */\n var resizeHandler = function (event) {\n // If there's a timer, cancel it\n if (timeout) {\n window.cancelAnimationFrame(timeout);\n }\n\n // Setup debounce callback\n timeout = window.requestAnimationFrame(function () {\n sortContents(contents);\n publicAPIs.detect();\n });\n };\n\n /**\n * Destroy the current instantiation\n */\n publicAPIs.destroy = function () {\n // Undo DOM changes\n if (current) {\n deactivate(current, settings);\n }\n\n // Remove event listeners\n window.removeEventListener(\"scroll\", scrollHandler, false);\n if (settings.reflow) {\n window.removeEventListener(\"resize\", resizeHandler, false);\n }\n\n // Reset variables\n contents = null;\n navItems = null;\n current = null;\n timeout = null;\n settings = null;\n };\n\n /**\n * Initialize the current instantiation\n */\n var init = function () {\n // Merge user options into defaults\n settings = extend(defaults, options || {});\n\n // Setup variables based on the current DOM\n publicAPIs.setup();\n\n // Find the currently active content\n publicAPIs.detect();\n\n // Setup event listeners\n window.addEventListener(\"scroll\", scrollHandler, false);\n if (settings.reflow) {\n window.addEventListener(\"resize\", resizeHandler, false);\n }\n };\n\n //\n // Initialize and return the public APIs\n //\n\n init();\n return publicAPIs;\n };\n\n //\n // Return the Constructor\n //\n\n return Constructor;\n }\n);\n","////////////////////////////////////////////////////////////////////////////////\n// Scroll Handling\n////////////////////////////////////////////////////////////////////////////////\nvar tocScroll = null;\nvar header = null;\n\nfunction scrollHandlerForHeader() {\n if (Math.floor(header.getBoundingClientRect().top) == 0) {\n header.classList.add(\"scrolled\");\n } else {\n header.classList.remove(\"scrolled\");\n }\n}\n\nfunction scrollHandlerForTOC(positionY) {\n if (tocScroll === null) {\n return;\n }\n\n // top of page.\n if (positionY == 0) {\n tocScroll.scrollTo(0, 0);\n } else if (\n // bottom of page.\n Math.ceil(positionY) >=\n Math.floor(document.documentElement.scrollHeight - window.innerHeight)\n ) {\n tocScroll.scrollTo(0, tocScroll.scrollHeight);\n } else {\n // somewhere in the middle.\n const current = document.querySelector(\".scroll-current\");\n if (current == null) {\n return;\n }\n\n // https://github.com/pypa/pip/issues/9159 This breaks scroll behaviours.\n // // scroll the currently \"active\" heading in toc, into view.\n // const rect = current.getBoundingClientRect();\n // if (0 > rect.top) {\n // current.scrollIntoView(true); // the argument is \"alignTop\"\n // } else if (rect.bottom > window.innerHeight) {\n // current.scrollIntoView(false);\n // }\n }\n}\n\nfunction scrollHandler(positionY) {\n scrollHandlerForHeader();\n scrollHandlerForTOC(positionY);\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Setup\n////////////////////////////////////////////////////////////////////////////////\nfunction setupScrollHandler() {\n // Taken from https://developer.mozilla.org/en-US/docs/Web/API/Document/scroll_event\n var last_known_scroll_position = 0;\n var ticking = false;\n\n window.addEventListener(\"scroll\", function (e) {\n last_known_scroll_position = window.scrollY;\n\n if (!ticking) {\n window.requestAnimationFrame(function () {\n scrollHandler(last_known_scroll_position);\n ticking = false;\n });\n\n ticking = true;\n }\n });\n window.scroll();\n}\n\nfunction setupScrollSpy() {\n if (tocScroll === null) {\n return;\n }\n\n // Scrollspy -- highlight table on contents, based on scroll\n var spy = new Gumshoe(\".toc-tree a\", {\n reflow: true,\n recursive: true,\n navClass: \"scroll-current\",\n });\n}\n\nfunction setup() {\n setupScrollHandler();\n setupScrollSpy();\n}\n\nfunction main() {\n document.body.parentNode.classList.remove(\"no-js\");\n\n header = document.querySelector(\"header\");\n tocScroll = document.querySelector(\".toc-scroll\");\n\n setup();\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", main);\n"]} \ No newline at end of file diff --git a/Wiki/ENG_Guide/html/_static/styles/default.css b/Wiki/ENG_Guide/html/_static/styles/default.css deleted file mode 100644 index 0f19baa3..00000000 --- a/Wiki/ENG_Guide/html/_static/styles/default.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}:root{--font-stack:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;--font-stack--monospace:"SFMono-Regular",Menlo,Consolas,Monaco,Liberation Mono,Lucida Console,monospace;--font-size--normal:100%;--font-size--small:87.5%;--font-size--small--2:81.25%;--font-size--small--3:75%;--font-size--small--4:62.5%;--sidebar-caption-font-size:var(--font-size--small--2);--sidebar-item-font-size:var(--font-size--small);--sidebar-search-input-font-size:var(--font-size--small);--toc-font-size:var(--font-size--small--3);--toc-font-size--mobile:var(--font-size--normal);--toc-title-font-size:var(--font-size--small--4);--admonition-font-size:0.8125rem;--admonition-title-font-size:0.8125rem;--code-font-size:var(--font-size--small--2);--header-height:calc(var(--sidebar-item-line-height) + var(--sidebar-item-spacing-vertical)*4);--sidebar-tree-space-above:1.5rem;--sidebar-caption-space-above:1rem;--sidebar-item-line-height:1rem;--sidebar-item-spacing-vertical:0.5rem;--sidebar-item-spacing-horizontal:1rem;--sidebar-item-height:calc(var(--sidebar-item-line-height) + var(--sidebar-item-spacing-vertical)*2);--sidebar-expander-width:var(--sidebar-item-height);--sidebar-search-space-above:0.5rem;--sidebar-search-input-spacing-vertical:0.5rem;--sidebar-search-input-spacing-horizontal:0.5rem;--sidebar-search-input-height:1rem;--sidebar-search-icon-size:var(--sidebar-search-input-height);--toc-title-padding:0.25rem 0;--toc-spacing-vertical:1.5rem;--toc-spacing-horizontal:1.5rem;--toc-item-spacing-vertical:0.4rem;--toc-item-spacing-horizontal:1rem;--icon-search:url('data:image/svg+xml;charset=utf-8,');--icon-pencil:url('data:image/svg+xml;charset=utf-8,');--icon-abstract:url('data:image/svg+xml;charset=utf-8,');--icon-info:url('data:image/svg+xml;charset=utf-8,');--icon-flame:url('data:image/svg+xml;charset=utf-8,');--icon-question:url('data:image/svg+xml;charset=utf-8,');--icon-warning:url('data:image/svg+xml;charset=utf-8,');--icon-failure:url('data:image/svg+xml;charset=utf-8,');--icon-spark:url('data:image/svg+xml;charset=utf-8,');--icon-admonition-default:var(--icon-abstract);--color-problematic:#c00;--color-foreground-primary:#000;--color-foreground-secondary:#5a5c63;--color-foreground-muted:#72747e;--color-foreground-border:#878787;--color-background-primary:#fff;--color-background-secondary:#f8f9fb;--color-background-hover:#efeff4;--color-background-hover--transparent:rgba(239,239,244,0);--color-background-border:#eeebee;--color-announcement-background:rgba(0,0,0,0.8666666666666667);--color-announcement-text:#eeebee;--color-brand-primary:#2962ff;--color-brand-content:#2a5adf;--color-api-overall:var(--color-foreground-muted);--color-api-name:var(--color-brand-content);--color-api-pre-name:var(--color-brand-content);--color-api-paren:var(--color-foreground-secondary);--color-api-keyword:var(--color-problematic);--color-highlighted-background:#def;--color-highlighted-text:var(--color-foreground-primary);--color-admonition-background:transparent;--color-admonition-title:#651fff;--color-admonition-title-background:rgba(101,31,255,0.1);--color-admonition-title--caution:#ff9100;--color-admonition-title-background--caution:rgba(255,145,0,0.1);--color-admonition-title--warning:#ff9100;--color-admonition-title-background--warning:rgba(255,145,0,0.1);--color-admonition-title--danger:#ff5252;--color-admonition-title-background--danger:rgba(255,82,82,0.1);--color-admonition-title--attention:#ff5252;--color-admonition-title-background--attention:rgba(255,82,82,0.1);--color-admonition-title--error:#ff5252;--color-admonition-title-background--error:rgba(255,82,82,0.1);--color-admonition-title--hint:#00c852;--color-admonition-title-background--hint:rgba(0,200,82,0.1);--color-admonition-title--important:#00bfa5;--color-admonition-title-background--important:rgba(0,191,165,0.1);--color-admonition-title--note:#00b0ff;--color-admonition-title-background--note:rgba(0,176,255,0.1);--color-admonition-title--seealso:#448aff;--color-admonition-title-background--seealso:rgba(68,138,255,0.1);--color-admonition-title--tip:#00c852;--color-admonition-title-background--tip:rgba(0,200,82,0.1);--color-admonition-title--admonition-todo:grey;--color-admonition-title-background--admonition-todo:hsla(0,0%,50.2%,0.1);--color-header-background:var(--color-background-primary);--color-header-border:var(--color-background-border);--color-header-text:var(--color-foreground-primary);--color-sidebar-background:var(--color-background-secondary);--color-sidebar-background-border:var(--color-background-border);--color-sidebar-brand-text:var(--color-foreground-primary);--color-sidebar-caption-text:var(--color-foreground-muted);--color-sidebar-link-text:var(--color-foreground-secondary);--color-sidebar-link-text--top-level:var(--color-brand-primary);--color-sidebar-item-background:var(--color-sidebar-background);--color-sidebar-item-background--current:var(--color-sidebar-item-background);--color-sidebar-item-background--hover:linear-gradient(90deg,var(--color-background-hover--transparent),var(--color-background-hover) var(--sidebar-item-spacing-horizontal),var(--color-background-hover));--color-sidebar-item-expander-background:transparent;--color-sidebar-item-expander-background--hover:var(--color-background-hover);--color-sidebar-search-text:var(--color-foreground-primary);--color-sidebar-search-background:var(--color-background-secondary);--color-sidebar-search-background--focus:var(--color-background-primary);--color-sidebar-search-border:var(--color-background-border);--color-sidebar-search-icon:var(--color-foreground-muted);--color-toc-background:var(--color-background-primary);--color-toc-title-text:var(--color-foreground-muted);--color-toc-item-text:var(--color-foreground-secondary);--color-toc-item-text--hover:var(--color-foreground-primary);--color-toc-item-text--active:var(--color-brand-primary);--color-content-foreground:var(--color-foreground-primary);--color-content-background:transparent;--color-link:var(--color-brand-content);--color-link--hover:var(--color-brand-content);--color-link-underline:var(--color-background-border);--color-link-underline--hover:var(--color-foreground-border)}@media (prefers-color-scheme:dark){:root{--color-problematic:#b81e1e;--color-foreground-primary:hsla(0,0%,100%,0.8509803921568627);--color-foreground-secondary:#9ca0a5;--color-foreground-muted:#81868d;--color-foreground-border:#666;--color-background-primary:#131416;--color-background-secondary:#1a1c1e;--color-background-hover:#1e2124;--color-background-hover--transparent:rgba(30,33,36,0);--color-background-border:#303335;--color-announcement-background:rgba(0,0,0,0.8666666666666667);--color-announcement-text:#eeebee;--color-brand-primary:#2b8cee;--color-brand-content:#368ce2;--color-highlighted-background:#083563;--color-highlighted-text:var(--color-foreground-primary);--color-admonition-background:#18181a}}body{overflow-y:scroll}body,html{height:100%}.page{display:flex;min-height:100%}.mobile-header{width:100%;height:var(--header-height);background-color:var(--color-header-background);color:var(--color-header-text);border-bottom:1px solid var(--color-header-border);z-index:10;display:none}.mobile-header.scrolled{border-bottom:none;box-shadow:0 0 .2rem rgba(0,0,0,.1),0 .2rem .4rem rgba(0,0,0,.2)}.main{display:flex;flex:1}.sidebar-drawer{box-sizing:border-box;display:flex;justify-content:flex-end;width:calc(50% - 26em);min-width:15em}.sidebar-container,.toc-drawer{width:15em}.sidebar-sticky,.toc-sticky{position:-webkit-sticky;position:sticky;top:0;height:100vh;height:min(100%,100vh);display:flex;flex-direction:column}.sidebar-scroll,.toc-scroll{flex-shrink:1;overflow:auto;scroll-behavior:smooth}.content{padding:0 3em;width:46em;display:flex;flex-direction:column;justify-content:space-between}.icon{display:inline-block;height:1rem;width:1rem}.icon svg{width:100%;height:100%}.announcement{height:var(--header-height);display:flex;align-items:center;overflow-x:auto}.announcement+.page{min-height:calc(100% - var(--header-height))}.announcement-content{box-sizing:border-box;padding:.5rem;min-width:100%;white-space:nowrap;text-align:center}.toc-overlay-icon{display:none;float:right;height:1.5rem;width:1.5rem;margin-top:1.5rem;align-items:center;justify-content:right}.sidebar-toggle{position:absolute;display:none}.sidebar-toggle[name=__toc]{left:20px}.sidebar-toggle:checked{left:40px}.overlay{position:fixed;top:0;width:0;height:0;transition:width 0ms,height 0ms,opacity .25s ease-out;opacity:0;background-color:rgba(0,0,0,.54)}.sidebar-overlay{z-index:20}.toc-overlay{z-index:40}.sidebar-drawer{z-index:30;transition:left .25s ease-in-out}.toc-drawer{z-index:50;transition:right .25s ease-in-out}#__navigation:checked~.sidebar-overlay{width:100%;height:100%;opacity:1}#__navigation:checked~.page .sidebar-drawer{top:0;left:0}#__toc:checked~.toc-overlay{width:100%;height:100%;opacity:1}#__toc:checked~.page .toc-drawer{top:0;right:0}@media (min-width:97em){html{font-size:110%}}@media (max-width:82em){.toc-overlay-icon{display:flex;cursor:pointer}.sidebar-drawer{width:calc(50% - 18.5em)}.toc-drawer{position:fixed;height:100vh;top:0;right:-15em}.toc-tree{font-size:var(--toc-font-size--mobile)}}@media (max-width:67em){.sidebar-drawer{position:fixed;height:100vh;width:15em;top:0;left:-15em}.mobile-header{position:-webkit-sticky;position:sticky;top:0;display:flex;justify-content:space-between;align-items:center}.mobile-header .nav-overlay-icon{cursor:pointer;display:flex;justify-content:center;align-items:center}.mobile-header .nav-overlay-icon .icon{color:var(--color-foreground-secondary);height:1.25rem;width:1.25rem}.mobile-header .header-left,.mobile-header .header-right{height:var(--header-height);width:var(--header-height)}:target{scroll-margin-top:var(--header-height)}.page{flex-direction:column;justify-content:center}.content{margin-left:auto;margin-right:auto}}@media (max-width:52em){.content{width:100%;overflow-x:auto}}@media (max-width:46em){.content{padding:0 1em}article div.sidebar{float:none;width:100%;margin:1rem 0}}footer{font-size:var(--font-size--small);display:flex;flex-direction:column;margin-top:2rem}.related-information{margin-top:1rem;padding:.75rem .75rem 1rem;border-top:1px solid var(--color-background-border);line-height:1.5;color:var(--color-foreground-secondary)}.related-pages a{display:flex;align-items:center;text-decoration:none}.related-pages a:hover .page-info .title{text-decoration:underline;color:var(--color-link);-webkit-text-decoration-color:var(--color-link-underline);text-decoration-color:var(--color-link-underline)}.related-pages a svg,.related-pages a svg>use{flex-shrink:0;color:var(--color-foreground-border);width:.75rem;height:.75rem;margin:0 .5rem}.related-pages a.next-page{max-width:50%;float:right;clear:right;text-align:right}.related-pages a.prev-page{max-width:50%;float:left;clear:left}.related-pages a.prev-page svg{transform:rotate(180deg)}.page-info{display:flex;flex-direction:column}.next-page .page-info{align-items:flex-end}.page-info .context{display:flex;align-items:center;padding-bottom:.1rem;color:var(--color-foreground-muted);font-size:var(--font-size--small);text-decoration:none}html{font-family:var(--font-stack)}code,kbd,pre,samp{font-family:var(--font-stack--monospace)}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}article{line-height:1.5}h1{font-size:2.25rem}h2{font-size:1.75rem}h3{font-size:1.25rem}h4{font-size:1rem}h5{font-size:.875rem}h6{font-size:.75rem}h1,h2{margin-bottom:1rem;font-weight:300}h1,h2,h3{margin-top:1.5rem}h3{margin-bottom:.75rem;font-weight:400}h4,h5,h6{text-transform:uppercase;margin-top:1rem;margin-bottom:.5rem;font-weight:700}p{margin-top:.75rem;margin-bottom:.75rem}hr.docutils{height:.0625rem;padding:0;margin:2rem 0;background-color:var(--color-background-border);border:0}.centered{text-align:center}.admonition{margin:1rem auto;padding:0 .5rem .5rem;background:var(--color-admonition-background);border-radius:.2rem;border-left:.2rem solid var(--color-admonition-title);box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1);font-size:var(--admonition-font-size);overflow:hidden;page-break-inside:avoid}.admonition>:nth-child(2){margin-top:0}.admonition>:last-child{margin-bottom:0}.admonition p.admonition-title{position:relative;margin:0 -.5rem .5rem;padding:.5rem .5rem .5rem 2rem;font-weight:500;font-size:var(--admonition-title-font-size);background-color:var(--color-admonition-title-background);line-height:1.3}.admonition p.admonition-title:before{content:"";position:absolute;left:.5rem;width:1rem;height:1rem;background-color:var(--color-admonition-title);-webkit-mask-image:var(--icon-admonition-default);mask-image:var(--icon-admonition-default);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.admonition.caution{border-left-color:var(--color-admonition-title--caution)}.admonition.caution .admonition-title{background-color:var(--color-admonition-title-background--caution)}.admonition.caution .admonition-title:before{background-color:var(--color-admonition-title--caution);-webkit-mask-image:var(--icon-spark);mask-image:var(--icon-spark)}.admonition.warning{border-left-color:var(--color-admonition-title--warning)}.admonition.warning .admonition-title{background-color:var(--color-admonition-title-background--warning)}.admonition.warning .admonition-title:before{background-color:var(--color-admonition-title--warning);-webkit-mask-image:var(--icon-warning);mask-image:var(--icon-warning)}.admonition.danger{border-left-color:var(--color-admonition-title--danger)}.admonition.danger .admonition-title{background-color:var(--color-admonition-title-background--danger)}.admonition.danger .admonition-title:before{background-color:var(--color-admonition-title--danger);-webkit-mask-image:var(--icon-spark);mask-image:var(--icon-spark)}.admonition.attention{border-left-color:var(--color-admonition-title--attention)}.admonition.attention .admonition-title{background-color:var(--color-admonition-title-background--attention)}.admonition.attention .admonition-title:before{background-color:var(--color-admonition-title--attention);-webkit-mask-image:var(--icon-warning);mask-image:var(--icon-warning)}.admonition.error{border-left-color:var(--color-admonition-title--error)}.admonition.error .admonition-title{background-color:var(--color-admonition-title-background--error)}.admonition.error .admonition-title:before{background-color:var(--color-admonition-title--error);-webkit-mask-image:var(--icon-failure);mask-image:var(--icon-failure)}.admonition.hint{border-left-color:var(--color-admonition-title--hint)}.admonition.hint .admonition-title{background-color:var(--color-admonition-title-background--hint)}.admonition.hint .admonition-title:before{background-color:var(--color-admonition-title--hint);-webkit-mask-image:var(--icon-question);mask-image:var(--icon-question)}.admonition.important{border-left-color:var(--color-admonition-title--important)}.admonition.important .admonition-title{background-color:var(--color-admonition-title-background--important)}.admonition.important .admonition-title:before{background-color:var(--color-admonition-title--important);-webkit-mask-image:var(--icon-flame);mask-image:var(--icon-flame)}.admonition.note{border-left-color:var(--color-admonition-title--note)}.admonition.note .admonition-title{background-color:var(--color-admonition-title-background--note)}.admonition.note .admonition-title:before{background-color:var(--color-admonition-title--note);-webkit-mask-image:var(--icon-pencil);mask-image:var(--icon-pencil)}.admonition.seealso{border-left-color:var(--color-admonition-title--seealso)}.admonition.seealso .admonition-title{background-color:var(--color-admonition-title-background--seealso)}.admonition.seealso .admonition-title:before{background-color:var(--color-admonition-title--seealso);-webkit-mask-image:var(--icon-info);mask-image:var(--icon-info)}.admonition.tip{border-left-color:var(--color-admonition-title--tip)}.admonition.tip .admonition-title{background-color:var(--color-admonition-title-background--tip)}.admonition.tip .admonition-title:before{background-color:var(--color-admonition-title--tip);-webkit-mask-image:var(--icon-info);mask-image:var(--icon-info)}.admonition.admonition-todo{border-left-color:var(--color-admonition-title--admonition-todo)}.admonition.admonition-todo .admonition-title{background-color:var(--color-admonition-title-background--admonition-todo)}.admonition.admonition-todo .admonition-title:before{background-color:var(--color-admonition-title--admonition-todo);-webkit-mask-image:var(--icon-pencil);mask-image:var(--icon-pencil)}.admonition-todo .admonition-title{text-transform:uppercase}dl.c dd,dl.cpp dd,dl.js dd,dl.py dd{margin-left:2rem}dl.c dd>:first-child,dl.cpp dd>:first-child,dl.js dd>:first-child,dl.py dd>:first-child{margin-top:.125rem}dl.c .field-list,dl.c dd>:last-child,dl.cpp .field-list,dl.cpp dd>:last-child,dl.js .field-list,dl.js dd>:last-child,dl.py .field-list,dl.py dd>:last-child{margin-bottom:.75rem}dl.c .field-list dt,dl.cpp .field-list dt,dl.js .field-list dt,dl.py .field-list dt{text-transform:uppercase;font-size:var(--font-size--small)}dl.c .field-list dd:empty,dl.cpp .field-list dd:empty,dl.js .field-list dd:empty,dl.py .field-list dd:empty{margin-bottom:.5rem}dl.c .field-list dd>ul,dl.cpp .field-list dd>ul,dl.js .field-list dd>ul,dl.py .field-list dd>ul{margin-left:-1.2rem}dl.c .field-list dd>ul>li>p:nth-child(2),dl.cpp .field-list dd>ul>li>p:nth-child(2),dl.js .field-list dd>ul>li>p:nth-child(2),dl.py .field-list dd>ul>li>p:nth-child(2){margin-top:0}dl.c .field-list dd>ul>li>p+p:last-child:empty,dl.cpp .field-list dd>ul>li>p+p:last-child:empty,dl.js .field-list dd>ul>li>p+p:last-child:empty,dl.py .field-list dd>ul>li>p+p:last-child:empty{margin-top:0;margin-bottom:0}dl.c>dt,dl.cpp>dt,dl.js>dt,dl.py>dt{color:var(--color-api-overall)}dl.class>dt .property,dl.enum-class>dt .property,dl.enum-struct>dt .property,dl.enum>dt .property,dl.function>dt .property,dl.method>dt .property,dl.type>dt .property{color:var(--color-api-keyword)}.sig-name{font-weight:700;color:var(--color-api-name)}.sig-prename{color:var(--color-api-pre-name)}.sig-paren{color:var(--color-api-paren)}.sig-param{font-style:normal}.versionmodified{font-style:italic}div.deprecated p,div.versionadded p,div.versionchanged p{margin-top:.125rem;margin-bottom:.125rem}.viewcode-back,.viewcode-link{float:right;font-size:var(--font-size--small)}.code-block-caption,article p.caption,table>caption{font-size:var(--font-size--small);text-align:center}.toctree-wrapper.compound .caption{text-align:initial;font-size:1em;margin-bottom:0}.toctree-wrapper.compound>ul{margin-top:0;margin-bottom:0}code.literal{background:var(--color-background-secondary);border-radius:.2em;font-size:var(--font-size--small--2);padding:.1em .2em}article div[class*=" highlight-"],article div[class^=highlight-]{margin:1em 0;display:flex}pre{margin:0;padding:0}article pre{line-height:1.5}.highlight pre,pre.literal-block{font-size:var(--code-font-size);padding:.625rem .875rem}pre.literal-block{margin-top:1rem;margin-bottom:1rem;background-color:var(--color-code-background);color:var(--color-code-foreground)}.highlight,pre.literal-block{overflow:auto;border-radius:.2rem}.highlight{flex-grow:1}.highlighttable{width:100%;display:block}.highlighttable tbody{display:block}.highlighttable tr{display:flex}.highlighttable td.linenos{background-color:var(--color-code-background);color:var(--color-code-foreground);padding:.625rem 0 .625rem .875rem;border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.highlighttable .linenodiv{font-size:var(--code-font-size);padding-right:.5rem;box-shadow:-.0625rem 0 var(--color-code-foreground) inset;opacity:.5}.highlighttable td.code{padding:0;display:block;flex:1;overflow:hidden}.highlighttable td.code .highlight{border-top-left-radius:0;border-bottom-left-radius:0}.footnote-reference{font-size:var(--font-size--small--4);vertical-align:super}dl.footnote{font-size:var(--font-size--small);color:var(--color-foreground-secondary);display:grid;grid-template-columns:-webkit-max-content auto;grid-template-columns:max-content auto}dl.footnote dt{margin:0}dl.footnote dt>.fn-backref{margin-left:.25rem}dl.footnote dt:after{content:":"}dl.footnote dt .brackets:before{content:"["}dl.footnote dt .brackets:after{content:"]"}img{box-sizing:border-box;max-width:100%;height:auto}article .figure{border-radius:.2rem;padding:.5rem}article .figure :last-child{margin-bottom:0}article .align-left{float:left;clear:left;margin:0 1rem 1rem}article .align-right{float:right;clear:right;margin:0 1rem 1rem}article .align-center,article .figure.align-default,article .legend .align-default{text-align:center;margin-left:50%;transform:translate(-50%)}ol,ul{padding-left:1.2rem;margin-top:1rem;margin-bottom:1rem}ol li>p:first-child,ul li>p:first-child{margin-top:.25rem;margin-bottom:.25rem}ol li>p:last-child,ul li>p:last-child{margin-top:.25rem}ol li>ol,ol li>ul,ul li>ol,ul li>ul{margin-top:.5rem;margin-bottom:.5rem}.simple li>ol,.simple li>ul,.toctree-wrapper li>ol,.toctree-wrapper li>ul{margin-top:0;margin-bottom:0}.field-list dt,.option-list dt,dl.footnote dt,dl.glossary dt,dl.simple dt{display:inline-block;margin-top:.25rem;font-weight:500}.field-list dt .classifier:before,.option-list dt .classifier:before,dl.footnote dt .classifier:before,dl.glossary dt .classifier:before,dl.simple dt .classifier:before{content:":";margin-left:.2rem;margin-right:.2rem}.field-list dd>p:first-child,.field-list dd ul,.option-list dd>p:first-child,.option-list dd ul,dl.footnote dd>p:first-child,dl.footnote dd ul,dl.glossary dd>p:first-child,dl.glossary dd ul,dl.simple dd>p:first-child,dl.simple dd ul{margin-top:.125rem}.field-list dd ul,.option-list dd ul,dl.footnote dd ul,dl.glossary dd ul,dl.simple dd ul{margin-bottom:.125rem}.math-wrapper{width:100%;overflow-x:auto}abbr[title]{cursor:help}kbd{margin:0 .2rem;padding:0 .2rem;border-radius:.2rem;border:1px solid var(--color-foreground-border);color:var(--color-foreground-primary);vertical-align:text-bottom;font-size:var(--font-size--small--3);display:inline-block;box-shadow:0 .0625rem 0 rgba(0,0,0,.2),inset 0 0 0 .125rem var(--color-background-primary);background-color:var(--color-background-secondary)}kbd>kbd{margin:0}blockquote{border-left:1px solid var(--color-foreground-border);font-style:italic;margin-left:.5rem;margin-right:.5rem;padding:.5rem 1rem}.code-block-caption>.headerlink,dl dt>.headerlink,h1>.headerlink,h2>.headerlink,h3>.headerlink,h4>.headerlink,h5>.headerlink,h6>.headerlink,p.caption>.headerlink,table>caption>.headerlink{font-weight:100;margin-left:.5rem;visibility:hidden;text-decoration:none}.code-block-caption:hover>.headerlink,:target>h1:first-child>.headerlink,:target>h2:first-child>.headerlink,:target>h3:first-child>.headerlink,:target>h4:first-child>.headerlink,:target>h5:first-child>.headerlink,:target>h6:first-child>.headerlink,dl dt:hover>.headerlink,h1:hover>.headerlink,h2:hover>.headerlink,h3:hover>.headerlink,h4:hover>.headerlink,h5:hover>.headerlink,h6:hover>.headerlink,p.caption:hover>.headerlink,table>caption:hover>.headerlink{visibility:visible}article .sidebar{float:right;clear:right;width:30%;margin-left:1rem;margin-right:0;border-radius:.2rem;background-color:var(--color-background-secondary);border:1px solid var(--color-background-border)}article .sidebar>*{padding-left:1rem;padding-right:1rem}article .sidebar .sidebar-title{margin:0;padding:.5rem 1rem;border-bottom:1px solid var(--color-background-border);font-weight:500}.table-wrapper{width:100%;overflow-x:auto;margin-top:1rem;margin-bottom:.5rem;padding:.2rem .2rem .75rem}table.docutils{border-radius:.2rem;border-spacing:0;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1)}table.docutils th{background:var(--color-background-secondary)}table.docutils td,table.docutils th{padding:0 .25rem;border-left:1px solid var(--color-background-border);border-bottom:1px solid var(--color-background-border)}table.docutils td p,table.docutils th p{margin:.25rem}table.docutils td:first-child,table.docutils th:first-child{border-left:none}ul.search{padding-left:0;list-style:none}ul.search li{padding:1rem 0;border-bottom:1px solid var(--color-background-border)}.highlighted{background-color:var(--color-highlighted-background);color:var(--color-highlighted-text)}.sidebar-brand{display:flex;flex-direction:column;flex-shrink:0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-decoration:none}.sidebar-brand-text{font-size:1.5rem}.sidebar-brand-text,.sidebar-logo-container{margin:var(--sidebar-item-spacing-vertical) 0}.sidebar-logo{margin:0 auto;display:block;max-width:100%}.sidebar-search-container{display:flex;align-items:center;margin-top:var(--sidebar-search-space-above)}.sidebar-search-container:before{content:"";position:absolute;left:var(--sidebar-item-spacing-horizontal);width:var(--sidebar-search-icon-size);height:var(--sidebar-search-icon-size)}.sidebar-search{box-sizing:border-box;padding:var(--sidebar-search-input-spacing-vertical) var(--sidebar-search-input-spacing-horizontal) var(--sidebar-search-input-spacing-vertical) calc(var(--sidebar-item-spacing-horizontal) + var(--sidebar-search-input-spacing-horizontal) + var(--sidebar-search-icon-size));width:100%;color:var(--color-sidebar-search-foreground);background:transparent;z-index:10}.sidebar-search:focus{outline:none}.sidebar-search::-moz-placeholder{font-size:var(--sidebar-search-input-font-size)}.sidebar-search:-ms-input-placeholder{font-size:var(--sidebar-search-input-font-size)}.sidebar-search::placeholder{font-size:var(--sidebar-search-input-font-size)}.sidebar-tree{font-size:var(--sidebar-item-font-size);margin-top:var(--sidebar-tree-space-above);margin-bottom:var(--sidebar-item-spacing-vertical)}.sidebar-tree ul{padding:0;margin-top:0;margin-bottom:0;display:flex;flex-direction:column;list-style:none}.sidebar-tree li{position:relative;margin:0}.sidebar-tree li>ul{margin-left:var(--sidebar-item-spacing-horizontal)}.sidebar-tree .reference{box-sizing:border-box;display:inline-block;line-height:var(--sidebar-item-line-height);height:100%;width:100%;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)}.sidebar-tree .reference.external:after{content:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='12' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23607D8B' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M0 0h24v24H0z' stroke='none'/%3E%3Cpath d='M11 7H6a2 2 0 00-2 2v9a2 2 0 002 2h9a2 2 0 002-2v-5M10 14L20 4M15 4h5v5'/%3E%3C/svg%3E");margin:0 .25rem;vertical-align:center}.sidebar-tree .current-page>.reference{font-weight:700}.sidebar-tree label{position:absolute;top:0;right:0;height:var(--sidebar-item-height);width:var(--sidebar-expander-width);cursor:pointer;display:flex;justify-content:center;align-items:center}.sidebar-tree .caption{font-size:var(--sidebar-caption-font-size);font-weight:700;text-transform:uppercase;margin:var(--sidebar-caption-space-above) 0 0 0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)}.sidebar-tree li.has-children>.reference{padding-right:var(--sidebar-expander-width)}.toctree-checkbox{position:absolute;display:none}.toctree-checkbox~ul{display:none}.toctree-checkbox~label .icon svg{transform:rotate(90deg)}.toctree-checkbox:checked~ul{display:block}.toctree-checkbox:checked~label .icon svg{transform:rotate(-90deg)}.toc-title-container{padding:var(--toc-title-padding);padding-top:var(--toc-spacing-vertical)}.toc-title{font-size:var(--toc-title-font-size);padding-left:var(--toc-spacing-horizontal);text-transform:uppercase}.no-toc{display:none}.toc-tree{font-size:var(--toc-font-size);line-height:1.3;padding-left:calc(var(--toc-spacing-horizontal) - var(--toc-item-spacing-horizontal));padding-bottom:var(--toc-spacing-vertical)}.toc-tree>ul>li{padding-top:0}.toc-tree>ul>li>ul{padding-left:0}.toc-tree>ul>li>a{display:none}.toc-tree ul{list-style-type:none;margin-top:0;margin-bottom:0;padding-left:var(--toc-item-spacing-horizontal)}.toc-tree li{padding-top:var(--toc-item-spacing-vertical)}.toc-tree li .reference{text-decoration:none}.toc-tree li.scroll-current>.reference{font-weight:700}.toc-scroll{max-height:100vh;overflow-y:hidden}.toc-scroll:hover{overflow-y:auto}.contents{color:var(--color-problematic);background:rgba(255,0,0,.25)}.contents:before{content:"ERROR: Adding a table of contents in Furo-based documentation is unnecessary, and does not work well with existing styling."}body{color:var(--color-foreground-primary);background:var(--color-background-primary)}.mobile-header .header-center a{color:var(--color-header-text);text-decoration:none}.announcement{background-color:var(--color-announcement-background);color:var(--color-announcement-text)}.sidebar-drawer{border-right:1px solid var(--color-sidebar-background-border);background:var(--color-sidebar-background)}.sidebar-brand{color:var(--color-sidebar-brand-text)}.sidebar-search-container{background:var(--color-sidebar-search-background)}.sidebar-search-container:focus-within,.sidebar-search-container:hover{background:var(--color-sidebar-search-background--focus)}.sidebar-search-container:before{background-color:var(--color-sidebar-search-icon);-webkit-mask-image:var(--icon-search);mask-image:var(--icon-search)}.sidebar-search{border:none;border-top:1px solid var(--color-sidebar-search-border);border-bottom:1px solid var(--color-sidebar-search-border)}.sidebar-tree .icon,.sidebar-tree .reference{color:var(--color-sidebar-link-text)}.sidebar-tree .reference{text-decoration:none}.sidebar-tree .reference:hover{background:var(--color-sidebar-item-background--hover)}.sidebar-tree .reference.external:after{color:var(--color-sidebar-link-text)}.sidebar-tree .caption{color:var(--color-sidebar-caption-text)}.sidebar-tree .toctree-l1>.reference,.sidebar-tree .toctree-l1>label .icon{color:var(--color-sidebar-link-text--top-level)}.sidebar-tree label{background:var(--color-sidebar-item-expander-background)}.sidebar-tree label:hover{background:var(--color-sidebar-item-expander-background--hover)}.sidebar-tree .current>.reference{background:var(--color-sidebar-item-background--current)}.sidebar-tree .current>.reference:hover{background:var(--color-sidebar-item-background--hover)}.toc-drawer{background:var(--color-toc-background)}.toc-title{color:var(--color-toc-title-text)}.toc-tree{border-left:1px solid var(--color-background-border)}.toc-tree .reference{text-decoration:none;color:var(--color-toc-item-text)}.toc-tree .scroll-current>.reference{color:var(--color-toc-item-text--active)}article{color:var(--color-content-foreground);background:var(--color-content-background)}a{text-decoration:underline;color:var(--color-link);-webkit-text-decoration-color:var(--color-link-underline);text-decoration-color:var(--color-link-underline)}a:hover{color:var(--color-link--hover);-webkit-text-decoration-color:var(--color-link-underline--hover);text-decoration-color:var(--color-link-underline--hover)}a.muted-link{text-decoration:none}a.muted-link:hover{text-decoration:underline;color:var(--color-link);-webkit-text-decoration-color:var(--color-link-underline);text-decoration-color:var(--color-link-underline)}.problematic{color:var(--color-problematic)}#furo-sidebar-ad-placement{padding:var(--sidebar-item-padding-vertical) var(--sidebar-item-padding-horizontal)}[role=main] .container{max-width:none;padding-left:0;padding-right:0}.shadow.docutils{border:none;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1)!important}:root{--tabs--label-text:var(--color-foreground-muted);--tabs--label-text--active:var(--color-brand-content);--tabs--label-text--hover:var(--color-brand-content);--tabs--label-background--active:transparent;--tabs--label-background--hover:var(--color-background-secondary);--tabs--border:var(--color-background-border)} -/*# sourceMappingURL=default.css.map */ diff --git a/Wiki/ENG_Guide/html/_static/styles/default.css.map b/Wiki/ENG_Guide/html/_static/styles/default.css.map deleted file mode 100644 index d7a0f6e2..00000000 --- a/Wiki/ENG_Guide/html/_static/styles/default.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../../../node_modules/normalize.css/normalize.css","_variables.scss","default.css","_layout.scss","_footer.scss","_typography.scss","content/_admonitions.scss","content/_api.sass","content/_captions.scss","content/_code.scss","content/_footnotes.scss","content/_images.scss","content/_lists.scss","content/_math.scss","content/_misc.scss","content/_permalinks.scss","content/_sidebar.scss","content/_tables.scss","_search.scss","_sidebar.scss","_table_of_contents.sass","_theme.scss","extensions/_readthedocs.sass","extensions/_sphinx-panels.sass","extensions/_sphinx-inline-tabs.sass"],"names":[],"mappings":"AAAA,2EAA2E,CAU3E,KACE,gBAAiB,CACjB,6BACF,CASA,KACE,QACF,CAMA,KACE,aACF,CAOA,GACE,aAAc,CACd,cACF,CAUA,GACE,sBAAuB,CACvB,QAAS,CACT,gBACF,CAOA,IACE,+BAAiC,CACjC,aACF,CASA,EACE,4BACF,CAOA,YACE,kBAAmB,CACnB,yBAA0B,CAC1B,wCAAiC,CAAjC,gCACF,CAMA,SAEE,kBACF,CAOA,cAGE,+BAAiC,CACjC,aACF,CAMA,MACE,aACF,CAOA,QAEE,aAAc,CACd,aAAc,CACd,iBAAkB,CAClB,uBACF,CAEA,IACE,aACF,CAEA,IACE,SACF,CASA,IACE,iBACF,CAUA,sCAKE,mBAAoB,CACpB,cAAe,CACf,gBAAiB,CACjB,QACF,CAOA,aAEE,gBACF,CAOA,cAEE,mBACF,CAMA,gDAIE,yBACF,CAMA,wHAIE,iBAAkB,CAClB,SACF,CAMA,4GAIE,6BACF,CAMA,SACE,0BACF,CASA,OACE,qBAAsB,CACtB,aAAc,CACd,aAAc,CACd,cAAe,CACf,SAAU,CACV,kBACF,CAMA,SACE,uBACF,CAMA,SACE,aACF,CAOA,6BAEE,qBAAsB,CACtB,SACF,CAMA,kFAEE,WACF,CAOA,cACE,4BAA6B,CAC7B,mBACF,CAMA,yCACE,uBACF,CAOA,6BACE,yBAA0B,CAC1B,YACF,CASA,QACE,aACF,CAMA,QACE,iBACF,CAiBA,kBACE,YACF,CC3TA,MAKE,kHAAA,CAEA,uGAAA,CAGA,wBAAA,CACA,wBAAA,CACA,4BAAA,CACA,yBAAA,CACA,2BAAA,CAGA,sDAAA,CACA,gDAAA,CACA,wDAAA,CAGA,0CAAA,CACA,gDAAA,CACA,gDAAA,CAGA,gCAAA,CACA,sCAAA,CAGA,2CAAA,CAKA,8FAAA,CAKA,iCAAA,CACA,kCAAA,CAEA,+BAAA,CACA,sCAAA,CACA,sCAAA,CACA,oGAAA,CAIA,mDAAA,CAEA,mCAAA,CACA,8CAAA,CACA,gDAAA,CACA,kCAAA,CACA,6DAAA,CAGA,6BAAA,CACA,6BAAA,CACA,+BAAA,CACA,kCAAA,CACA,kCAAA,CAME,yTAAA,CAAA,8QAAA,CAAA,6LAAA,CAAA,+NAAA,CAAA,8wBAAA,CAAA,qZAAA,CAAA,kLAAA,CAAA,mTAAA,CAAA,0UAAA,CAEF,8CAAA,CAQA,wBAAA,CAGA,+BAAA,CACA,oCAAA,CACA,gCAAA,CACA,iCAAA,CAEA,+BAAA,CACA,oCAAA,CACA,gCAAA,CACA,yDAAA,CACA,iCAAA,CAGA,8DAAA,CACA,iCAAA,CAGA,6BAAA,CACA,6BAAA,CAGA,iDAAA,CACA,2CAAA,CACA,+CAAA,CACA,mDAAA,CACA,4CAAA,CAGA,mCAAA,CACA,wDAAA,CAGA,yCAAA,CACA,gCAAA,CACA,wDAAA,CAGE,yCAAA,CACA,gEAAA,CADA,yCAAA,CACA,gEAAA,CADA,wCAAA,CACA,+DAAA,CADA,2CAAA,CACA,kEAAA,CADA,uCAAA,CACA,8DAAA,CADA,sCAAA,CACA,4DAAA,CADA,2CAAA,CACA,kEAAA,CADA,sCAAA,CACA,6DAAA,CADA,yCAAA,CACA,iEAAA,CADA,qCAAA,CACA,2DAAA,CADA,8CAAA,CACA,yEAAA,CAcF,yDAAA,CACA,oDAAA,CACA,mDAAA,CAGA,4DAAA,CACA,gEAAA,CAEA,0DAAA,CACA,0DAAA,CACA,2DAAA,CACA,+DAAA,CAEA,+DAAA,CACA,6EAAA,CAGA,2MAAA,CAOA,oDAAA,CACA,6EAAA,CAIA,2DAAA,CACA,mEAAA,CACA,wEAAA,CACA,4DAAA,CACA,yDAAA,CAGA,sDAAA,CACA,oDAAA,CACA,uDAAA,CACA,4DAAA,CACA,wDAAA,CAGA,0DAAA,CACA,sCAAA,CAEA,uCAAA,CACA,8CAAA,CACA,qDAAA,CACA,4DC/EF,CDkFA,mCACE,MACE,2BAAA,CAGA,6DAAA,CACA,oCAAA,CACA,gCAAA,CACA,8BAAA,CAEA,kCAAA,CACA,oCAAA,CACA,gCAAA,CACA,sDAAA,CACA,iCAAA,CAGA,8DAAA,CACA,iCAAA,CAGA,6BAAA,CACA,6BAAA,CAGA,sCAAA,CACA,wDAAA,CAGA,qCC1FF,CACF,CCpJA,KACE,iBDsJF,CCpJA,UAEE,WDuJF,CCrJA,MACE,YAAA,CAEA,eDuJF,CCrJA,eACE,UAAA,CACA,2BAAA,CACA,+CAAA,CACA,8BAAA,CACA,kDAAA,CAIA,UAAA,CAUA,YD4IF,CCnJE,wBACE,kBAAA,CACA,gEDqJJ,CC9IA,MACE,YAAA,CACA,MDiJF,CC7IA,gBACE,qBAAA,CAEA,YAAA,CACA,wBAAA,CAEA,sBAAA,CACA,cD8IF,CC1IA,+BAEE,UD6IF,CC3IA,4BAEE,uBAAA,CAAA,eAAA,CACA,KAAA,CACA,YAAA,CACA,sBAAA,CAEA,YAAA,CACA,qBD6IF,CC1IA,4BAEE,aAAA,CAEA,aAAA,CACA,sBD4IF,CCxIA,SACE,aAAA,CACA,UF/Ec,CEiFd,YAAA,CACA,qBAAA,CACA,6BD0IF,CCvIA,MACE,oBAAA,CACA,WAAA,CACA,UD0IF,CCzIE,UACE,UAAA,CACA,WD2IJ,CCjIA,cACE,2BAAA,CACA,YAAA,CACA,kBAAA,CACA,eDoIF,CClIA,oBACE,4CDqIF,CCnIA,sBACE,qBAAA,CACA,aAAA,CACA,cAAA,CACA,kBAAA,CACA,iBDsIF,CChIA,kBACE,YAAA,CACA,WAAA,CAEA,aAAA,CACA,YAAA,CACA,iBAAA,CAEA,kBAAA,CACA,qBDiIF,CC/HA,gBACE,iBAAA,CACA,YDkIF,CC/HA,4BACE,SDkIF,CChIA,wBACE,SDmIF,CChIA,SACE,cAAA,CACA,KAAA,CACA,OAAA,CACA,QAAA,CAEA,qDAAA,CAEA,SAAA,CACA,gCDiIF,CC/HA,iBACE,UDkIF,CChIA,aACE,UDmIF,CC/HA,gBACE,UAAA,CACA,gCDkIF,CChIA,YACE,UAAA,CACA,iCDmIF,CC9HE,uCACE,UAAA,CACA,WAAA,CACA,SDiIJ,CC9HI,4CACE,KAAA,CACA,MDgIN,CC1HE,4BACE,UAAA,CACA,WAAA,CACA,SD6HJ,CC1HI,iCACE,KAAA,CACA,OD4HN,CCnHA,wBACE,KACE,cDsHF,CACF,CCnHA,wBAEE,kBACE,YAAA,CACA,cDoHF,CCjHA,gBACE,wBDoHF,CChHA,YACE,cAAA,CACA,YAAA,CACA,KAAA,CACA,WDmHF,CCjHA,UACE,sCDoHF,CACF,CCjHA,wBAEE,gBACE,cAAA,CACA,YAAA,CACA,UF/OY,CEiPZ,KAAA,CACA,UDiHF,CC7GA,eACE,uBAAA,CAAA,eAAA,CACA,KAAA,CACA,YAAA,CACA,6BAAA,CACA,kBDgHF,CC9GE,iCACE,cAAA,CACA,YAAA,CACA,sBAAA,CACA,kBDgHJ,CC/GI,uCACE,uCAAA,CACA,cAAA,CACA,aDiHN,CC9GE,yDAEE,2BAAA,CACA,0BDgHJ,CC3GA,QACE,sCD8GF,CC1GA,MACE,qBAAA,CACA,sBD6GF,CC3GA,SACE,gBAAA,CACA,iBD8GF,CACF,CC5GA,wBAEE,SACE,UAAA,CACA,eD6GF,CACF,CC3GA,wBACE,SACE,aD6GF,CC1GA,oBACE,UAAA,CACA,UAAA,CACA,aD6GF,CACF,CEjaA,OACE,iCAAA,CACA,YAAA,CACA,qBAAA,CAEA,eFkaF,CE9ZA,qBACE,eAAA,CAGA,0BAAA,CAEA,mDAAA,CAEA,eAAA,CACA,uCF8ZF,CEzZE,iBACE,YAAA,CACA,kBAAA,CAEA,oBF2ZJ,CE1ZI,yCACE,yBAAA,CACA,uBAAA,CACA,yDAAA,CAAA,iDF4ZN,CEzZI,8CAEE,aAAA,CAEA,oCAAA,CAEA,YAAA,CACA,aAAA,CACA,cFyZN,CEvZI,2BACE,aAAA,CAEA,WAAA,CACA,WAAA,CACA,gBFwZN,CEtZI,2BACE,aAAA,CAEA,UAAA,CACA,UFuZN,CErZM,+BACE,wBFuZR,CEjZA,WACE,YAAA,CACA,qBFoZF,CElZE,sBACE,oBFoZJ,CEjZE,oBACE,YAAA,CACA,kBAAA,CAEA,oBAAA,CAEA,mCAAA,CACA,iCAAA,CACA,oBFiZJ,CGjeA,KACE,6BHoeF,CGleA,kBAIE,wCHqeF,CGjeA,KACE,kCAAA,CACA,iCHoeF,CGheA,QACE,eHmeF,CG7dA,GACE,iBHgeF,CG9dA,GACE,iBHieF,CG/dA,GACE,iBHkeF,CGheA,GACE,cHmeF,CGjeA,GACE,iBHoeF,CGleA,GACE,gBHqeF,CGjeA,MAGE,kBAAA,CACA,eHoeF,CGjeA,SALE,iBH4eF,CGveA,GAEE,oBAAA,CACA,eHoeF,CGheA,SAGE,wBAAA,CACA,eAAA,CACA,mBAAA,CACA,eHmeF,CG/dA,EACE,iBAAA,CACA,oBHkeF,CG9dA,YACE,eAAA,CACA,SAAA,CACA,aAAA,CACA,+CAAA,CACA,QHieF,CG9dA,UACE,iBHieF,CItjBA,YACE,gBAAA,CACA,qBAAA,CAEA,6CAAA,CAEA,mBAAA,CACA,qDAAA,CACA,oEAAA,CAGA,qCAAA,CAEA,eAAA,CACA,uBJojBF,CIjjBE,0BACE,YJmjBJ,CIhjBE,wBACE,eJkjBJ,CI9iBE,+BACE,iBAAA,CACA,qBAAA,CACA,8BAAA,CAEA,eAAA,CACA,2CAAA,CACA,yDAAA,CAEA,eJ8iBJ,CI3iBI,sCACE,UAAA,CACA,iBAAA,CACA,UAAA,CACA,UAAA,CACA,WAAA,CAEA,8CAAA,CAEA,iDAAA,CAAA,yCAAA,CACA,6BAAA,CAAA,qBJ2iBN,CIniBI,oBACE,wDJqiBN,CIpiBM,sCACE,kEJsiBR,CIriBQ,6CACE,uDAAA,CACA,oCAAA,CAAA,4BJuiBV,CI7iBI,oBACE,wDJ+iBN,CI9iBM,sCACE,kEJgjBR,CI/iBQ,6CACE,uDAAA,CACA,sCAAA,CAAA,8BJijBV,CIvjBI,mBACE,uDJyjBN,CIxjBM,qCACE,iEJ0jBR,CIzjBQ,4CACE,sDAAA,CACA,oCAAA,CAAA,4BJ2jBV,CIjkBI,sBACE,0DJmkBN,CIlkBM,wCACE,oEJokBR,CInkBQ,+CACE,yDAAA,CACA,sCAAA,CAAA,8BJqkBV,CI3kBI,kBACE,sDJ6kBN,CI5kBM,oCACE,gEJ8kBR,CI7kBQ,2CACE,qDAAA,CACA,sCAAA,CAAA,8BJ+kBV,CIrlBI,iBACE,qDJulBN,CItlBM,mCACE,+DJwlBR,CIvlBQ,0CACE,oDAAA,CACA,uCAAA,CAAA,+BJylBV,CI/lBI,sBACE,0DJimBN,CIhmBM,wCACE,oEJkmBR,CIjmBQ,+CACE,yDAAA,CACA,oCAAA,CAAA,4BJmmBV,CIzmBI,iBACE,qDJ2mBN,CI1mBM,mCACE,+DJ4mBR,CI3mBQ,0CACE,oDAAA,CACA,qCAAA,CAAA,6BJ6mBV,CInnBI,oBACE,wDJqnBN,CIpnBM,sCACE,kEJsnBR,CIrnBQ,6CACE,uDAAA,CACA,mCAAA,CAAA,2BJunBV,CI7nBI,gBACE,oDJ+nBN,CI9nBM,kCACE,8DJgoBR,CI/nBQ,yCACE,mDAAA,CACA,mCAAA,CAAA,2BJioBV,CIvoBI,4BACE,gEJyoBN,CIxoBM,8CACE,0EJ0oBR,CIzoBQ,qDACE,+DAAA,CACA,qCAAA,CAAA,6BJ2oBV,CIpoBA,mCACE,wBJuoBF,CKvsBE,oCACE,gBL0sBJ,CKzsBI,wFACE,kBL2sBN,CKvsBE,4JACE,oBL4sBJ,CK3sBI,oFACE,wBAAA,CACA,iCL6sBN,CK3sBI,4GACE,mBL6sBN,CK5sBI,gGACE,mBL8sBN,CK5sBQ,wKACE,YL8sBV,CK3sBQ,gMACE,YAAA,CACA,eL6sBV,CK1sBE,oCACE,8BL4sBJ,CKzsBE,uKACE,8BL4sBJ,CK1sBA,UACE,eAAA,CACA,2BL6sBF,CK5sBA,aACE,+BL+sBF,CK9sBA,WACE,4BLitBF,CKhtBA,WACE,iBLmtBF,CKjtBA,iBACE,iBLotBF,CKltBE,yDACE,kBAAA,CACA,qBLqtBJ,CKntBA,8BACE,WAAA,CACA,iCLstBF,CMjxBA,oDAGE,iCAAA,CACA,iBNoxBF,CM9wBE,mCACE,kBAAA,CACA,aAAA,CACA,eNixBJ,CM/wBE,6BACE,YAAA,CACA,eNixBJ,COlyBA,aACE,4CAAA,CACA,kBAAA,CAEA,oCAAA,CACA,iBPoyBF,CO3xBE,iEAEE,YAAA,CACA,YP8xBJ,CO1xBA,IACE,QAAA,CACA,SP6xBF,CO1xBE,YACE,eP4xBJ,COzxBE,iCAEE,+BAAA,CACA,uBP0xBJ,COvxBE,kBAGE,eAAA,CACA,kBAAA,CAGA,6CAAA,CACA,kCPuxBJ,COlxBA,6BAZI,aAAA,CAKA,mBP+xBJ,COxxBA,WACE,WPuxBF,COlxBA,gBACE,UAAA,CACA,aPqxBF,COpxBE,sBACE,aPsxBJ,COpxBE,mBACE,YPsxBJ,COnxBE,2BACE,6CAAA,CACA,kCAAA,CAEA,iCAAA,CACA,4BAAA,CACA,+BPqxBJ,COnxBE,2BACE,+BAAA,CAEA,mBAAA,CACA,yDAAA,CACA,UPoxBJ,COjxBE,wBACE,SAAA,CACA,aAAA,CACA,MAAA,CACA,ePmxBJ,COjxBI,mCACE,wBAAA,CACA,2BPmxBN,CQ52BA,oBACE,oCAAA,CACA,oBR+2BF,CQ32BA,YACE,iCAAA,CACA,uCAAA,CAEA,YAAA,CACA,8CAAA,CAAA,sCR62BF,CQ52BE,eACE,QR82BJ,CQ72BI,2BACE,kBR+2BN,CQ52BI,qBACE,WR82BN,CQ32BM,gCACE,WR62BR,CQ32BM,+BACE,WR62BR,CSr4BA,IACE,qBAAA,CACA,cAAA,CACA,WTw4BF,CSp4BE,gBACE,mBAAA,CAEA,aTs4BJ,CSr4BI,4BACE,eTu4BN,CSp4BE,oBACE,UAAA,CACA,UAAA,CACA,kBTs4BJ,CSp4BE,qBACE,WAAA,CACA,WAAA,CACA,kBTs4BJ,CSp4BE,mFACE,iBAAA,CACA,eAAA,CACA,yBTu4BJ,CUt6BA,MAEE,mBAAA,CAGA,eAAA,CACA,kBVs6BF,CUn6BI,wCACE,iBAAA,CACA,oBVs6BN,CUp6BI,sCACE,iBVu6BN,CUp6BI,oCAEE,gBAAA,CACA,mBVw6BN,CUh6BI,0EAEE,YAAA,CACA,eVq6BN,CU15BE,0EACE,oBAAA,CACA,iBAAA,CACA,eVi6BJ,CU/5BI,yKACE,WAAA,CACA,iBAAA,CACA,kBVq6BN,CUh6BI,yOAEE,kBV06BN,CUx6BI,yFACE,qBV86BN,CW1+BA,cACE,UAAA,CACA,eX6+BF,CY9+BA,YACE,WZi/BF,CY7+BA,IACE,cAAA,CACA,eAAA,CACA,mBAAA,CACA,+CAAA,CACA,qCAAA,CACA,0BAAA,CAEA,oCAAA,CACA,oBAAA,CAEA,0FAAA,CAGA,kDZ4+BF,CY1+BE,QACE,QZ4+BJ,CYv+BA,WACE,oDAAA,CACA,iBAAA,CACA,iBAAA,CACA,kBAAA,CACA,kBZ0+BF,Ca//BE,4LACE,eAAA,CACA,iBAAA,CACA,iBAAA,CACA,oBb2gCJ,Ca9/BE,0cACE,kBbkhCJ,CchjCA,iBACE,WAAA,CACA,WAAA,CACA,SAAA,CAEA,gBAAA,CACA,cAAA,CAEA,mBAAA,CACA,kDAAA,CACA,+CdijCF,Cc/iCE,mBACE,iBAAA,CACA,kBdijCJ,Cc9iCE,gCACE,QAAA,CACA,kBAAA,CACA,sDAAA,CAEA,ed+iCJ,CerkCA,eACE,UAAA,CACA,eAAA,CACA,eAAA,CACA,mBAAA,CACA,0BfwkCF,CerkCA,eACE,mBAAA,CACA,gBAAA,CAEA,oEfukCF,CepkCE,kBACE,4CfskCJ,CenkCE,oCAGE,gBAAA,CAMA,oDAAA,CACA,sDf+jCJ,CerkCI,wCACE,afwkCN,CejkCI,4DACE,gBfokCN,CgBjmCA,UACE,cAAA,CACA,ehBomCF,CgBlmCE,aACE,cAAA,CACA,sDhBomCJ,CgB7lCA,aACE,oDAAA,CACA,mChBgmCF,CiB5mCA,eACE,YAAA,CACA,qBAAA,CACA,aAAA,CAEA,mFAAA,CAEA,oBjB6mCF,CiB1mCA,oBAEE,gBjB6mCF,CiB1mCA,4CAJE,6CjBknCF,CiB1mCA,cACE,aAAA,CACA,aAAA,CACA,cjB6mCF,CiBvmCA,0BACE,YAAA,CACA,kBAAA,CACA,4CjB0mCF,CiBxmCE,iCACE,UAAA,CACA,iBAAA,CACA,2CAAA,CACA,qCAAA,CACA,sCjB0mCJ,CiBtmCA,gBACE,qBAAA,CAKA,gRAAA,CAMA,UAAA,CAEA,4CAAA,CACA,sBAAA,CACA,UjBkmCF,CiBhmCE,sBACE,YjBkmCJ,CiB/lCE,kCACE,+CjBimCJ,CiBlmCE,sCACE,+CjBimCJ,CiBlmCE,6BACE,+CjBimCJ,CiB1lCA,cACE,uCAAA,CACA,0CAAA,CACA,kDjB6lCF,CiB3lCE,iBACE,SAAA,CACA,YAAA,CACA,eAAA,CAEA,YAAA,CACA,qBAAA,CAEA,ejB2lCJ,CiBzlCE,iBACE,iBAAA,CACA,QjB2lCJ,CiBzlCI,oBACE,kDjB2lCN,CiBxlCE,yBACE,qBAAA,CAEA,oBAAA,CACA,2CAAA,CAEA,WAAA,CACA,UAAA,CAEA,mFjBulCJ,CiBnlCI,wCACE,oXAAA,CACA,eAAA,CACA,qBjBqlCN,CiBhlCE,uCACE,ejBklCJ,CiB/kCE,oBACE,iBAAA,CACA,KAAA,CACA,OAAA,CACA,iCAAA,CACA,mCAAA,CAEA,cAAA,CAEA,YAAA,CACA,sBAAA,CACA,kBjB+kCJ,CiB7kCE,uBACE,0CAAA,CAEA,eAAA,CACA,wBAAA,CAEA,+CAAA,CAEA,mFjB4kCJ,CiBtkCI,yCACE,2CjBwkCN,CiBnkCA,kBACE,iBAAA,CACA,YjBskCF,CiB/jCE,qBACE,YjBkkCJ,CiBhkCE,kCACE,uBjBkkCJ,CiB9jCE,6BACE,ajBikCJ,CiB/jCE,0CACE,wBjBikCJ,CkBlvCA,qBACE,gCAAA,CACA,uClBqvCF,CkBnvCA,WACE,oCAAA,CACA,0CAAA,CACA,wBlBsvCF,CkBnvCA,QACE,YlBsvCF,CkBpvCA,UACE,8BAAA,CACA,eAAA,CAEA,qFAAA,CACA,0ClBsvCF,CkBnvCE,gBACE,alBqvCJ,CkBpvCI,mBACE,clBsvCN,CkBrvCI,kBACE,YlBuvCN,CkBrvCE,aACE,oBAAA,CACA,YAAA,CACA,eAAA,CACA,+ClBuvCJ,CkBtvCE,aACE,4ClBwvCJ,CkBtvCI,wBACE,oBlBwvCN,CkBtvCI,uCACE,elBwvCN,CkBtvCA,YACE,gBAAA,CAGA,iBlBuvCF,CkBtvCE,kBACE,elBwvCJ,CkBrvCA,UACE,8BAAA,CACA,4BlBwvCF,CkBvvCE,iBACE,qIlByvCJ,CmB7yCA,KACE,qCAAA,CACA,0CnBgzCF,CmBxyCI,gCACE,8BAAA,CACA,oBnB2yCN,CmBnyCA,cACE,qDAAA,CACA,oCnBsyCF,CmBhyCA,gBACE,6DAAA,CACA,0CnBmyCF,CmBhyCA,eACE,qCnBmyCF,CmBhyCA,0BACE,iDnBmyCF,CmBlyCE,uEAEE,wDnBmyCJ,CmBjyCE,iCACE,iDAAA,CACA,qCAAA,CAAA,6BnBmyCJ,CmBhyCA,gBACE,WAAA,CACA,uDAAA,CACA,0DnBmyCF,CmB3xCE,6CAHE,oCnBsyCJ,CmBnyCE,yBACE,oBnBkyCJ,CmBhyCI,+BACE,sDnBkyCN,CmBhyCI,wCAEE,oCnBiyCN,CmB9xCE,uBACE,uCnBgyCJ,CmB5xCI,2EAEE,+CnB6xCN,CmBzxCE,oBACE,wDnB2xCJ,CmB1xCI,0BACE,+DnB4xCN,CmBzxCE,kCACE,wDnB2xCJ,CmB1xCI,wCACE,sDnB4xCN,CmBpxCA,YACE,sCnBuxCF,CmBpxCA,WACE,iCnBuxCF,CmBpxCA,UACE,oDnBuxCF,CmBtxCE,qBACE,oBAAA,CACA,gCnBwxCJ,CmBtxCE,qCACE,wCnBwxCJ,CmBjxCA,QACE,qCAAA,CACA,0CnBoxCF,CmBlxCA,EACE,yBAAA,CAEA,uBAAA,CACA,yDAAA,CAAA,iDnBoxCF,CmBlxCE,QACE,8BAAA,CACA,gEAAA,CAAA,wDnBoxCJ,CmBjxCE,aACE,oBnBmxCJ,CmBlxCI,mBACE,yBAAA,CACA,uBAAA,CACA,yDAAA,CAAA,iDnBoxCN,CmB/wCA,aACE,8BnBkxCF,CoBv6CA,2BACE,mFpB06CF,CqB16CA,uBACE,cAAA,CACA,cAAA,CACA,erB66CF,CqB16CA,iBACE,WAAA,CACA,8ErB66CF,CsBv7CA,MACE,gDAAA,CACA,qDAAA,CACA,oDAAA,CACA,4CAAA,CACA,iEAAA,CACA,6CtB07CF","file":"default.css","sourcesContent":["/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n\nhtml {\n line-height: 1.15; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n ========================================================================== */\n\n/**\n * Remove the margin in all browsers.\n */\n\nbody {\n margin: 0;\n}\n\n/**\n * Render the `main` element consistently in IE.\n */\n\nmain {\n display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Remove the gray background on active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10.\n */\n\nimg {\n border-style: none;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput { /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect { /* 1 */\n text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\ndetails {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n display: list-item;\n}\n\n/* Misc\n ========================================================================== */\n\n/**\n * Add the correct display in IE 10+.\n */\n\ntemplate {\n display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n\n[hidden] {\n display: none;\n}\n","// This file defines all the knobs that can be tweaked by end users.\n\n// Overall Layout Variables\n//\n// These are set here, since CSS variables can't be used in media queries,\n// which is where these would be used.\n$content-padding: 3em;\n$content-padding--small: 1em;\n$content-width: 46em;\n$sidebar-width: 15em;\n$full-width: $content-width + 2 * ($content-padding + $sidebar-width);\n\n// Admonitions\n//\n// Structure of these: (color, key-in-$icons).\n// The colors are translated into CSS variables below, and icons are used for\n// the declarations.\n$admonition-default: #651fff \"abstract\";\n$admonitions: (\n // Each of these has an reST directives for it.\n \"caution\": #ff9100 \"spark\",\n \"warning\": #ff9100 \"warning\",\n \"danger\": #ff5252 \"spark\",\n \"attention\": #ff5252 \"warning\",\n \"error\": #ff5252 \"failure\",\n \"hint\": #00c852 \"question\",\n \"important\": #00bfa5 \"flame\",\n \"note\": #00b0ff \"pencil\",\n \"seealso\": #448aff \"info\",\n \"tip\": #00c852 \"info\",\n \"admonition-todo\": #808080 \"pencil\"\n);\n\n:root {\n //////////////////////////////////////////////////////////////////////////////\n // Fonts\n //////////////////////////////////////////////////////////////////////////////\n // These are adapted from https://systemfontstack.com/\n --font-stack: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial,\n sans-serif, Apple Color Emoji, Segoe UI Emoji;\n --font-stack--monospace: \"SFMono-Regular\", Menlo, Consolas, Monaco,\n Liberation Mono, Lucida Console, monospace;\n\n --font-size--normal: 100%;\n --font-size--small: 87.5%;\n --font-size--small--2: 81.25%;\n --font-size--small--3: 75%;\n --font-size--small--4: 62.5%;\n\n // Sidebar\n --sidebar-caption-font-size: var(--font-size--small--2);\n --sidebar-item-font-size: var(--font-size--small);\n --sidebar-search-input-font-size: var(--font-size--small);\n\n // Table of Contents\n --toc-font-size: var(--font-size--small--3);\n --toc-font-size--mobile: var(--font-size--normal);\n --toc-title-font-size: var(--font-size--small--4);\n\n // Admonitions\n --admonition-font-size: 0.8125rem;\n --admonition-title-font-size: 0.8125rem;\n\n // Code\n --code-font-size: var(--font-size--small--2);\n\n //////////////////////////////////////////////////////////////////////////////\n // Spacing\n //////////////////////////////////////////////////////////////////////////////\n --header-height: calc(\n var(--sidebar-item-line-height) + 4 * #{var(--sidebar-item-spacing-vertical)}\n );\n\n // Sidebar\n --sidebar-tree-space-above: 1.5rem;\n --sidebar-caption-space-above: 1rem;\n\n --sidebar-item-line-height: 1rem;\n --sidebar-item-spacing-vertical: 0.5rem;\n --sidebar-item-spacing-horizontal: 1rem;\n --sidebar-item-height: calc(\n var(--sidebar-item-line-height) + 2 *#{var(--sidebar-item-spacing-vertical)}\n );\n\n --sidebar-expander-width: var(--sidebar-item-height); // be square\n\n --sidebar-search-space-above: 0.5rem;\n --sidebar-search-input-spacing-vertical: 0.5rem;\n --sidebar-search-input-spacing-horizontal: 0.5rem;\n --sidebar-search-input-height: 1rem;\n --sidebar-search-icon-size: var(--sidebar-search-input-height);\n\n // Table of Contents\n --toc-title-padding: 0.25rem 0;\n --toc-spacing-vertical: 1.5rem;\n --toc-spacing-horizontal: 1.5rem;\n --toc-item-spacing-vertical: 0.4rem;\n --toc-item-spacing-horizontal: 1rem;\n\n //////////////////////////////////////////////////////////////////////////////\n // Icons\n //////////////////////////////////////////////////////////////////////////////\n @each $name, $glyph in $icons {\n --icon-#{$name}: #{$glyph};\n }\n --icon-admonition-default: var(--icon-#{nth($admonition-default, 2)});\n\n //////////////////////////////////////////////////////////////////////////////\n // Overall Colors\n // To give the user more control, avoid using these colors directly\n // outside of this file. Instead, try to define more variables here that\n // based on these, and use them in the actual stylesheets.\n //////////////////////////////////////////////////////////////////////////////\n --color-problematic: #cc0000;\n\n // Base Colors\n --color-foreground-primary: black; // for main text and headings\n --color-foreground-secondary: #5a5c63; // for secondary text\n --color-foreground-muted: #72747e; // for muted text\n --color-foreground-border: #878787; // for content borders\n\n --color-background-primary: white; // for content\n --color-background-secondary: #f8f9fb; // for navigation + ToC\n --color-background-hover: #efeff4ff; // for navigation-item hover\n --color-background-hover--transparent: #efeff400;\n --color-background-border: #eeebee; // for UI borders\n\n // Announcements\n --color-announcement-background: #000000dd;\n --color-announcement-text: #eeebee;\n\n // Brand colors\n --color-brand-primary: #2962ff;\n --color-brand-content: #2a5adf;\n\n // API documentation\n --color-api-overall: var(--color-foreground-muted);\n --color-api-name: var(--color-brand-content);\n --color-api-pre-name: var(--color-brand-content);\n --color-api-paren: var(--color-foreground-secondary);\n --color-api-keyword: var(--color-problematic);\n\n // Highlighted text (search)\n --color-highlighted-background: #ddeeff;\n --color-highlighted-text: var(--color-foreground-primary);\n\n // Admonitions!\n --color-admonition-background: transparent;\n --color-admonition-title: #{nth($admonition-default, 1)};\n --color-admonition-title-background: #{rgba(nth($admonition-default, 1), 0.1)};\n\n @each $name, $values in $admonitions {\n --color-admonition-title--#{$name}: #{nth($values, 1)};\n --color-admonition-title-background--#{$name}: #{rgba(\n nth($values, 1),\n 0.1\n )};\n }\n\n //////////////////////////////////////////////////////////////////////////////\n // Everything below this should be one of:\n // - var(...)\n // - *-gradient(...)\n // - special literal values (eg: transparent, none)\n //////////////////////////////////////////////////////////////////////////////\n\n // Header\n --color-header-background: var(--color-background-primary);\n --color-header-border: var(--color-background-border);\n --color-header-text: var(--color-foreground-primary);\n\n // Sidebar (left)\n --color-sidebar-background: var(--color-background-secondary);\n --color-sidebar-background-border: var(--color-background-border);\n\n --color-sidebar-brand-text: var(--color-foreground-primary);\n --color-sidebar-caption-text: var(--color-foreground-muted);\n --color-sidebar-link-text: var(--color-foreground-secondary);\n --color-sidebar-link-text--top-level: var(--color-brand-primary);\n\n --color-sidebar-item-background: var(--color-sidebar-background);\n --color-sidebar-item-background--current: var(\n --color-sidebar-item-background\n );\n --color-sidebar-item-background--hover: linear-gradient(\n 90deg,\n var(--color-background-hover--transparent) 0%,\n var(--color-background-hover) var(--sidebar-item-spacing-horizontal),\n var(--color-background-hover) 100%\n );\n\n --color-sidebar-item-expander-background: transparent;\n --color-sidebar-item-expander-background--hover: var(\n --color-background-hover\n );\n\n --color-sidebar-search-text: var(--color-foreground-primary);\n --color-sidebar-search-background: var(--color-background-secondary);\n --color-sidebar-search-background--focus: var(--color-background-primary);\n --color-sidebar-search-border: var(--color-background-border);\n --color-sidebar-search-icon: var(--color-foreground-muted);\n\n // Table of Contents\n --color-toc-background: var(--color-background-primary);\n --color-toc-title-text: var(--color-foreground-muted);\n --color-toc-item-text: var(--color-foreground-secondary);\n --color-toc-item-text--hover: var(--color-foreground-primary);\n --color-toc-item-text--active: var(--color-brand-primary);\n\n // Actual page contents\n --color-content-foreground: var(--color-foreground-primary);\n --color-content-background: transparent;\n\n --color-link: var(--color-brand-content);\n --color-link--hover: var(--color-brand-content);\n --color-link-underline: var(--color-background-border);\n --color-link-underline--hover: var(--color-foreground-border);\n}\n\n@media (prefers-color-scheme: dark) {\n :root {\n --color-problematic: #b81e1e;\n\n // Base Colors\n --color-foreground-primary: #ffffffd9; // for main text and headings\n --color-foreground-secondary: #9ca0a5; // for secondary text\n --color-foreground-muted: #81868d; // for muted text\n --color-foreground-border: #666666; // for content borders\n\n --color-background-primary: #131416; // for content\n --color-background-secondary: #1a1c1e; // for navigation + ToC\n --color-background-hover: #1e2124ff; // for navigation-item hover\n --color-background-hover--transparent: #1e212400;\n --color-background-border: #303335; // for UI borders\n\n // Announcements\n --color-announcement-background: #000000dd;\n --color-announcement-text: #eeebee;\n\n // Brand colors\n --color-brand-primary: #2b8cee;\n --color-brand-content: #368ce2;\n\n // Highlighted text (search)\n --color-highlighted-background: #083563;\n --color-highlighted-text: var(--color-foreground-primary);\n\n // Admonitions\n --color-admonition-background: #18181a;\n }\n}\n","@import \"normalize.css\";\n:root {\n --font-stack: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial,\n sans-serif, Apple Color Emoji, Segoe UI Emoji;\n --font-stack--monospace: \"SFMono-Regular\", Menlo, Consolas, Monaco,\n Liberation Mono, Lucida Console, monospace;\n --font-size--normal: 100%;\n --font-size--small: 87.5%;\n --font-size--small--2: 81.25%;\n --font-size--small--3: 75%;\n --font-size--small--4: 62.5%;\n --sidebar-caption-font-size: var(--font-size--small--2);\n --sidebar-item-font-size: var(--font-size--small);\n --sidebar-search-input-font-size: var(--font-size--small);\n --toc-font-size: var(--font-size--small--3);\n --toc-font-size--mobile: var(--font-size--normal);\n --toc-title-font-size: var(--font-size--small--4);\n --admonition-font-size: 0.8125rem;\n --admonition-title-font-size: 0.8125rem;\n --code-font-size: var(--font-size--small--2);\n --header-height: calc(\n var(--sidebar-item-line-height) + 4 * var(--sidebar-item-spacing-vertical)\n );\n --sidebar-tree-space-above: 1.5rem;\n --sidebar-caption-space-above: 1rem;\n --sidebar-item-line-height: 1rem;\n --sidebar-item-spacing-vertical: 0.5rem;\n --sidebar-item-spacing-horizontal: 1rem;\n --sidebar-item-height: calc(\n var(--sidebar-item-line-height) + 2 *var(--sidebar-item-spacing-vertical)\n );\n --sidebar-expander-width: var(--sidebar-item-height);\n --sidebar-search-space-above: 0.5rem;\n --sidebar-search-input-spacing-vertical: 0.5rem;\n --sidebar-search-input-spacing-horizontal: 0.5rem;\n --sidebar-search-input-height: 1rem;\n --sidebar-search-icon-size: var(--sidebar-search-input-height);\n --toc-title-padding: 0.25rem 0;\n --toc-spacing-vertical: 1.5rem;\n --toc-spacing-horizontal: 1.5rem;\n --toc-item-spacing-vertical: 0.4rem;\n --toc-item-spacing-horizontal: 1rem;\n --icon-search: url('data:image/svg+xml;charset=utf-8,');\n --icon-pencil: url('data:image/svg+xml;charset=utf-8,');\n --icon-abstract: url('data:image/svg+xml;charset=utf-8,');\n --icon-info: url('data:image/svg+xml;charset=utf-8,');\n --icon-flame: url('data:image/svg+xml;charset=utf-8,');\n --icon-question: url('data:image/svg+xml;charset=utf-8,');\n --icon-warning: url('data:image/svg+xml;charset=utf-8,');\n --icon-failure: url('data:image/svg+xml;charset=utf-8,');\n --icon-spark: url('data:image/svg+xml;charset=utf-8,');\n --icon-admonition-default: var(--icon-abstract);\n --color-problematic: #cc0000;\n --color-foreground-primary: black;\n --color-foreground-secondary: #5a5c63;\n --color-foreground-muted: #72747e;\n --color-foreground-border: #878787;\n --color-background-primary: white;\n --color-background-secondary: #f8f9fb;\n --color-background-hover: #efeff4ff;\n --color-background-hover--transparent: #efeff400;\n --color-background-border: #eeebee;\n --color-announcement-background: #000000dd;\n --color-announcement-text: #eeebee;\n --color-brand-primary: #2962ff;\n --color-brand-content: #2a5adf;\n --color-api-overall: var(--color-foreground-muted);\n --color-api-name: var(--color-brand-content);\n --color-api-pre-name: var(--color-brand-content);\n --color-api-paren: var(--color-foreground-secondary);\n --color-api-keyword: var(--color-problematic);\n --color-highlighted-background: #ddeeff;\n --color-highlighted-text: var(--color-foreground-primary);\n --color-admonition-background: transparent;\n --color-admonition-title: #651fff;\n --color-admonition-title-background: rgba(101, 31, 255, 0.1);\n --color-admonition-title--caution: #ff9100;\n --color-admonition-title-background--caution: rgba(255, 145, 0, 0.1);\n --color-admonition-title--warning: #ff9100;\n --color-admonition-title-background--warning: rgba(255, 145, 0, 0.1);\n --color-admonition-title--danger: #ff5252;\n --color-admonition-title-background--danger: rgba(255, 82, 82, 0.1);\n --color-admonition-title--attention: #ff5252;\n --color-admonition-title-background--attention: rgba(255, 82, 82, 0.1);\n --color-admonition-title--error: #ff5252;\n --color-admonition-title-background--error: rgba(255, 82, 82, 0.1);\n --color-admonition-title--hint: #00c852;\n --color-admonition-title-background--hint: rgba(0, 200, 82, 0.1);\n --color-admonition-title--important: #00bfa5;\n --color-admonition-title-background--important: rgba(0, 191, 165, 0.1);\n --color-admonition-title--note: #00b0ff;\n --color-admonition-title-background--note: rgba(0, 176, 255, 0.1);\n --color-admonition-title--seealso: #448aff;\n --color-admonition-title-background--seealso: rgba(68, 138, 255, 0.1);\n --color-admonition-title--tip: #00c852;\n --color-admonition-title-background--tip: rgba(0, 200, 82, 0.1);\n --color-admonition-title--admonition-todo: #808080;\n --color-admonition-title-background--admonition-todo: rgba(128, 128, 128, 0.1);\n --color-header-background: var(--color-background-primary);\n --color-header-border: var(--color-background-border);\n --color-header-text: var(--color-foreground-primary);\n --color-sidebar-background: var(--color-background-secondary);\n --color-sidebar-background-border: var(--color-background-border);\n --color-sidebar-brand-text: var(--color-foreground-primary);\n --color-sidebar-caption-text: var(--color-foreground-muted);\n --color-sidebar-link-text: var(--color-foreground-secondary);\n --color-sidebar-link-text--top-level: var(--color-brand-primary);\n --color-sidebar-item-background: var(--color-sidebar-background);\n --color-sidebar-item-background--current: var(\n --color-sidebar-item-background\n );\n --color-sidebar-item-background--hover: linear-gradient(\n 90deg,\n var(--color-background-hover--transparent) 0%,\n var(--color-background-hover) var(--sidebar-item-spacing-horizontal),\n var(--color-background-hover) 100%\n );\n --color-sidebar-item-expander-background: transparent;\n --color-sidebar-item-expander-background--hover: var(\n --color-background-hover\n );\n --color-sidebar-search-text: var(--color-foreground-primary);\n --color-sidebar-search-background: var(--color-background-secondary);\n --color-sidebar-search-background--focus: var(--color-background-primary);\n --color-sidebar-search-border: var(--color-background-border);\n --color-sidebar-search-icon: var(--color-foreground-muted);\n --color-toc-background: var(--color-background-primary);\n --color-toc-title-text: var(--color-foreground-muted);\n --color-toc-item-text: var(--color-foreground-secondary);\n --color-toc-item-text--hover: var(--color-foreground-primary);\n --color-toc-item-text--active: var(--color-brand-primary);\n --color-content-foreground: var(--color-foreground-primary);\n --color-content-background: transparent;\n --color-link: var(--color-brand-content);\n --color-link--hover: var(--color-brand-content);\n --color-link-underline: var(--color-background-border);\n --color-link-underline--hover: var(--color-foreground-border);\n}\n\n@media (prefers-color-scheme: dark) {\n :root {\n --color-problematic: #b81e1e;\n --color-foreground-primary: #ffffffd9;\n --color-foreground-secondary: #9ca0a5;\n --color-foreground-muted: #81868d;\n --color-foreground-border: #666666;\n --color-background-primary: #131416;\n --color-background-secondary: #1a1c1e;\n --color-background-hover: #1e2124ff;\n --color-background-hover--transparent: #1e212400;\n --color-background-border: #303335;\n --color-announcement-background: #000000dd;\n --color-announcement-text: #eeebee;\n --color-brand-primary: #2b8cee;\n --color-brand-content: #368ce2;\n --color-highlighted-background: #083563;\n --color-highlighted-text: var(--color-foreground-primary);\n --color-admonition-background: #18181a;\n }\n}\nbody {\n overflow-y: scroll;\n}\n\nhtml,\nbody {\n height: 100%;\n}\n\n.page {\n display: flex;\n min-height: 100%;\n}\n\n.mobile-header {\n width: 100%;\n height: var(--header-height);\n background-color: var(--color-header-background);\n color: var(--color-header-text);\n border-bottom: 1px solid var(--color-header-border);\n z-index: 10;\n display: none;\n}\n.mobile-header.scrolled {\n border-bottom: none;\n box-shadow: 0 0 0.2rem rgba(0, 0, 0, 0.1), 0 0.2rem 0.4rem rgba(0, 0, 0, 0.2);\n}\n\n.main {\n display: flex;\n flex: 1;\n}\n\n.sidebar-drawer {\n box-sizing: border-box;\n display: flex;\n justify-content: flex-end;\n width: calc((100% - 82em) / 2 + 15em);\n min-width: 15em;\n}\n\n.sidebar-container,\n.toc-drawer {\n width: 15em;\n}\n\n.sidebar-sticky,\n.toc-sticky {\n position: sticky;\n top: 0;\n height: 100vh;\n height: min(100%, 100vh);\n display: flex;\n flex-direction: column;\n}\n\n.sidebar-scroll,\n.toc-scroll {\n flex-shrink: 1;\n overflow: auto;\n scroll-behavior: smooth;\n}\n\n.content {\n padding: 0 3em;\n width: 46em;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n}\n\n.icon {\n display: inline-block;\n height: 1rem;\n width: 1rem;\n}\n.icon svg {\n width: 100%;\n height: 100%;\n}\n\n.announcement {\n height: var(--header-height);\n display: flex;\n align-items: center;\n overflow-x: auto;\n}\n\n.announcement + .page {\n min-height: calc(100% - var(--header-height));\n}\n\n.announcement-content {\n box-sizing: border-box;\n padding: 0.5rem;\n min-width: 100%;\n white-space: nowrap;\n text-align: center;\n}\n\n.toc-overlay-icon {\n display: none;\n float: right;\n height: 1.5rem;\n width: 1.5rem;\n margin-top: 1.5rem;\n align-items: center;\n justify-content: right;\n}\n\n.sidebar-toggle {\n position: absolute;\n display: none;\n}\n\n.sidebar-toggle[name=__toc] {\n left: 20px;\n}\n\n.sidebar-toggle:checked {\n left: 40px;\n}\n\n.overlay {\n position: fixed;\n top: 0;\n width: 0;\n height: 0;\n transition: width 0ms, height 0ms, opacity 250ms ease-out;\n opacity: 0;\n background-color: rgba(0, 0, 0, 0.54);\n}\n\n.sidebar-overlay {\n z-index: 20;\n}\n\n.toc-overlay {\n z-index: 40;\n}\n\n.sidebar-drawer {\n z-index: 30;\n transition: left 250ms ease-in-out;\n}\n\n.toc-drawer {\n z-index: 50;\n transition: right 250ms ease-in-out;\n}\n\n#__navigation:checked ~ .sidebar-overlay {\n width: 100%;\n height: 100%;\n opacity: 1;\n}\n#__navigation:checked ~ .page .sidebar-drawer {\n top: 0;\n left: 0;\n}\n\n#__toc:checked ~ .toc-overlay {\n width: 100%;\n height: 100%;\n opacity: 1;\n}\n#__toc:checked ~ .page .toc-drawer {\n top: 0;\n right: 0;\n}\n\n@media (min-width: 97em) {\n html {\n font-size: 110%;\n }\n}\n@media (max-width: 82em) {\n .toc-overlay-icon {\n display: flex;\n cursor: pointer;\n }\n\n .sidebar-drawer {\n width: calc( (100% - 67em) / 2 + 15em );\n }\n\n .toc-drawer {\n position: fixed;\n height: 100vh;\n top: 0;\n right: -15em;\n }\n\n .toc-tree {\n font-size: var(--toc-font-size--mobile);\n }\n}\n@media (max-width: 67em) {\n .sidebar-drawer {\n position: fixed;\n height: 100vh;\n width: 15em;\n top: 0;\n left: -15em;\n }\n\n .mobile-header {\n position: sticky;\n top: 0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n .mobile-header .nav-overlay-icon {\n cursor: pointer;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n .mobile-header .nav-overlay-icon .icon {\n color: var(--color-foreground-secondary);\n height: 1.25rem;\n width: 1.25rem;\n }\n .mobile-header .header-left,\n.mobile-header .header-right {\n height: var(--header-height);\n width: var(--header-height);\n }\n\n :target {\n scroll-margin-top: var(--header-height);\n }\n\n .page {\n flex-direction: column;\n justify-content: center;\n }\n\n .content {\n margin-left: auto;\n margin-right: auto;\n }\n}\n@media (max-width: 52em) {\n .content {\n width: 100%;\n overflow-x: auto;\n }\n}\n@media (max-width: 46em) {\n .content {\n padding: 0 1em;\n }\n\n article div.sidebar {\n float: none;\n width: 100%;\n margin: 1rem 0;\n }\n}\nfooter {\n font-size: var(--font-size--small);\n display: flex;\n flex-direction: column;\n margin-top: 2rem;\n}\n\n.related-information {\n margin-top: 1rem;\n padding: 0.75rem;\n padding-bottom: 1rem;\n border-top: 1px solid var(--color-background-border);\n line-height: 1.5;\n color: var(--color-foreground-secondary);\n}\n\n.related-pages a {\n display: flex;\n align-items: center;\n text-decoration: none;\n}\n.related-pages a:hover .page-info .title {\n text-decoration: underline;\n color: var(--color-link);\n text-decoration-color: var(--color-link-underline);\n}\n.related-pages a svg,\n.related-pages a svg > use {\n flex-shrink: 0;\n color: var(--color-foreground-border);\n width: 0.75rem;\n height: 0.75rem;\n margin: 0 0.5rem;\n}\n.related-pages a.next-page {\n max-width: 50%;\n float: right;\n clear: right;\n text-align: right;\n}\n.related-pages a.prev-page {\n max-width: 50%;\n float: left;\n clear: left;\n}\n.related-pages a.prev-page svg {\n transform: rotate(180deg);\n}\n\n.page-info {\n display: flex;\n flex-direction: column;\n}\n.next-page .page-info {\n align-items: flex-end;\n}\n.page-info .context {\n display: flex;\n align-items: center;\n padding-bottom: 0.1rem;\n color: var(--color-foreground-muted);\n font-size: var(--font-size--small);\n text-decoration: none;\n}\n\nhtml {\n font-family: var(--font-stack);\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: var(--font-stack--monospace);\n}\n\nbody {\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\narticle {\n line-height: 1.5;\n}\n\nh1 {\n font-size: 2.25rem;\n}\n\nh2 {\n font-size: 1.75rem;\n}\n\nh3 {\n font-size: 1.25rem;\n}\n\nh4 {\n font-size: 1rem;\n}\n\nh5 {\n font-size: 0.875rem;\n}\n\nh6 {\n font-size: 0.75rem;\n}\n\nh1,\nh2 {\n margin-top: 1.5rem;\n margin-bottom: 1rem;\n font-weight: 300;\n}\n\nh3 {\n margin-top: 1.5rem;\n margin-bottom: 0.75rem;\n font-weight: 400;\n}\n\nh4,\nh5,\nh6 {\n text-transform: uppercase;\n margin-top: 1rem;\n margin-bottom: 0.5rem;\n font-weight: 700;\n}\n\np {\n margin-top: 0.75rem;\n margin-bottom: 0.75rem;\n}\n\nhr.docutils {\n height: 0.0625rem;\n padding: 0;\n margin: 2rem 0;\n background-color: var(--color-background-border);\n border: 0;\n}\n\n.centered {\n text-align: center;\n}\n\n.admonition {\n margin: 1rem auto;\n padding: 0 0.5rem 0.5rem 0.5rem;\n background: var(--color-admonition-background);\n border-radius: 0.2rem;\n border-left: 0.2rem solid var(--color-admonition-title);\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1);\n font-size: var(--admonition-font-size);\n overflow: hidden;\n page-break-inside: avoid;\n}\n.admonition > :nth-child(2) {\n margin-top: 0;\n}\n.admonition > :last-child {\n margin-bottom: 0;\n}\n.admonition p.admonition-title {\n position: relative;\n margin: 0 -0.5rem 0.5rem;\n padding: 0.5rem 0.5rem 0.5rem 2rem;\n font-weight: 500;\n font-size: var(--admonition-title-font-size);\n background-color: var(--color-admonition-title-background);\n line-height: 1.3;\n}\n.admonition p.admonition-title::before {\n content: \"\";\n position: absolute;\n left: 0.5rem;\n width: 1rem;\n height: 1rem;\n background-color: var(--color-admonition-title);\n mask-image: var(--icon-admonition-default);\n mask-repeat: no-repeat;\n}\n.admonition.caution {\n border-left-color: var(--color-admonition-title--caution);\n}\n.admonition.caution .admonition-title {\n background-color: var(--color-admonition-title-background--caution);\n}\n.admonition.caution .admonition-title::before {\n background-color: var(--color-admonition-title--caution);\n mask-image: var(--icon-spark);\n}\n.admonition.warning {\n border-left-color: var(--color-admonition-title--warning);\n}\n.admonition.warning .admonition-title {\n background-color: var(--color-admonition-title-background--warning);\n}\n.admonition.warning .admonition-title::before {\n background-color: var(--color-admonition-title--warning);\n mask-image: var(--icon-warning);\n}\n.admonition.danger {\n border-left-color: var(--color-admonition-title--danger);\n}\n.admonition.danger .admonition-title {\n background-color: var(--color-admonition-title-background--danger);\n}\n.admonition.danger .admonition-title::before {\n background-color: var(--color-admonition-title--danger);\n mask-image: var(--icon-spark);\n}\n.admonition.attention {\n border-left-color: var(--color-admonition-title--attention);\n}\n.admonition.attention .admonition-title {\n background-color: var(--color-admonition-title-background--attention);\n}\n.admonition.attention .admonition-title::before {\n background-color: var(--color-admonition-title--attention);\n mask-image: var(--icon-warning);\n}\n.admonition.error {\n border-left-color: var(--color-admonition-title--error);\n}\n.admonition.error .admonition-title {\n background-color: var(--color-admonition-title-background--error);\n}\n.admonition.error .admonition-title::before {\n background-color: var(--color-admonition-title--error);\n mask-image: var(--icon-failure);\n}\n.admonition.hint {\n border-left-color: var(--color-admonition-title--hint);\n}\n.admonition.hint .admonition-title {\n background-color: var(--color-admonition-title-background--hint);\n}\n.admonition.hint .admonition-title::before {\n background-color: var(--color-admonition-title--hint);\n mask-image: var(--icon-question);\n}\n.admonition.important {\n border-left-color: var(--color-admonition-title--important);\n}\n.admonition.important .admonition-title {\n background-color: var(--color-admonition-title-background--important);\n}\n.admonition.important .admonition-title::before {\n background-color: var(--color-admonition-title--important);\n mask-image: var(--icon-flame);\n}\n.admonition.note {\n border-left-color: var(--color-admonition-title--note);\n}\n.admonition.note .admonition-title {\n background-color: var(--color-admonition-title-background--note);\n}\n.admonition.note .admonition-title::before {\n background-color: var(--color-admonition-title--note);\n mask-image: var(--icon-pencil);\n}\n.admonition.seealso {\n border-left-color: var(--color-admonition-title--seealso);\n}\n.admonition.seealso .admonition-title {\n background-color: var(--color-admonition-title-background--seealso);\n}\n.admonition.seealso .admonition-title::before {\n background-color: var(--color-admonition-title--seealso);\n mask-image: var(--icon-info);\n}\n.admonition.tip {\n border-left-color: var(--color-admonition-title--tip);\n}\n.admonition.tip .admonition-title {\n background-color: var(--color-admonition-title-background--tip);\n}\n.admonition.tip .admonition-title::before {\n background-color: var(--color-admonition-title--tip);\n mask-image: var(--icon-info);\n}\n.admonition.admonition-todo {\n border-left-color: var(--color-admonition-title--admonition-todo);\n}\n.admonition.admonition-todo .admonition-title {\n background-color: var(--color-admonition-title-background--admonition-todo);\n}\n.admonition.admonition-todo .admonition-title::before {\n background-color: var(--color-admonition-title--admonition-todo);\n mask-image: var(--icon-pencil);\n}\n\n.admonition-todo .admonition-title {\n text-transform: uppercase;\n}\n\ndl.py dd, dl.cpp dd, dl.c dd, dl.js dd {\n margin-left: 2rem;\n}\ndl.py dd > :first-child, dl.cpp dd > :first-child, dl.c dd > :first-child, dl.js dd > :first-child {\n margin-top: 0.125rem;\n}\ndl.py dd > :last-child, dl.cpp dd > :last-child, dl.c dd > :last-child, dl.js dd > :last-child {\n margin-bottom: 0.75rem;\n}\ndl.py .field-list, dl.cpp .field-list, dl.c .field-list, dl.js .field-list {\n margin-bottom: 0.75rem;\n}\ndl.py .field-list dt, dl.cpp .field-list dt, dl.c .field-list dt, dl.js .field-list dt {\n text-transform: uppercase;\n font-size: var(--font-size--small);\n}\ndl.py .field-list dd:empty, dl.cpp .field-list dd:empty, dl.c .field-list dd:empty, dl.js .field-list dd:empty {\n margin-bottom: 0.5rem;\n}\ndl.py .field-list dd > ul, dl.cpp .field-list dd > ul, dl.c .field-list dd > ul, dl.js .field-list dd > ul {\n margin-left: -1.2rem;\n}\ndl.py .field-list dd > ul > li > p:nth-child(2), dl.cpp .field-list dd > ul > li > p:nth-child(2), dl.c .field-list dd > ul > li > p:nth-child(2), dl.js .field-list dd > ul > li > p:nth-child(2) {\n margin-top: 0;\n}\ndl.py .field-list dd > ul > li > p + p:last-child:empty, dl.cpp .field-list dd > ul > li > p + p:last-child:empty, dl.c .field-list dd > ul > li > p + p:last-child:empty, dl.js .field-list dd > ul > li > p + p:last-child:empty {\n margin-top: 0;\n margin-bottom: 0;\n}\ndl.py > dt, dl.cpp > dt, dl.c > dt, dl.js > dt {\n color: var(--color-api-overall);\n}\n\ndl.class > dt .property, dl.function > dt .property, dl.method > dt .property, dl.enum > dt .property, dl.enum-class > dt .property, dl.enum-struct > dt .property, dl.type > dt .property {\n color: var(--color-api-keyword);\n}\n\n.sig-name {\n font-weight: bold;\n color: var(--color-api-name);\n}\n\n.sig-prename {\n color: var(--color-api-pre-name);\n}\n\n.sig-paren {\n color: var(--color-api-paren);\n}\n\n.sig-param {\n font-style: normal;\n}\n\n.versionmodified {\n font-style: italic;\n}\n\ndiv.versionadded p, div.versionchanged p, div.deprecated p {\n margin-top: 0.125rem;\n margin-bottom: 0.125rem;\n}\n\n.viewcode-link, .viewcode-back {\n float: right;\n font-size: var(--font-size--small);\n}\n\narticle p.caption,\ntable > caption,\n.code-block-caption {\n font-size: var(--font-size--small);\n text-align: center;\n}\n\n.toctree-wrapper.compound .caption {\n text-align: initial;\n font-size: 1em;\n margin-bottom: 0;\n}\n.toctree-wrapper.compound > ul {\n margin-top: 0;\n margin-bottom: 0;\n}\n\ncode.literal {\n background: var(--color-background-secondary);\n border-radius: 0.2em;\n font-size: var(--font-size--small--2);\n padding: 0.1em 0.2em;\n}\n\narticle div[class*=\" highlight-\"],\narticle div[class^=highlight-] {\n margin: 1em 0;\n display: flex;\n}\n\npre {\n margin: 0;\n padding: 0;\n}\narticle pre {\n line-height: 1.5;\n}\npre.literal-block, .highlight pre {\n font-size: var(--code-font-size);\n padding: 0.625rem 0.875rem;\n}\npre.literal-block {\n overflow: auto;\n margin-top: 1rem;\n margin-bottom: 1rem;\n border-radius: 0.2rem;\n background-color: var(--color-code-background);\n color: var(--color-code-foreground);\n}\n\n.highlight {\n flex-grow: 1;\n border-radius: 0.2rem;\n overflow: auto;\n}\n\n.highlighttable {\n width: 100%;\n display: block;\n}\n.highlighttable tbody {\n display: block;\n}\n.highlighttable tr {\n display: flex;\n}\n.highlighttable td.linenos {\n background-color: var(--color-code-background);\n color: var(--color-code-foreground);\n padding: 0.625rem 0.875rem;\n padding-right: 0;\n border-top-left-radius: 0.2rem;\n border-bottom-left-radius: 0.2rem;\n}\n.highlighttable .linenodiv {\n font-size: var(--code-font-size);\n padding-right: 0.5rem;\n box-shadow: -0.0625rem 0 var(--color-code-foreground) inset;\n opacity: 0.5;\n}\n.highlighttable td.code {\n padding: 0;\n display: block;\n flex: 1;\n overflow: hidden;\n}\n.highlighttable td.code .highlight {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.footnote-reference {\n font-size: var(--font-size--small--4);\n vertical-align: super;\n}\n\ndl.footnote {\n font-size: var(--font-size--small);\n color: var(--color-foreground-secondary);\n display: grid;\n grid-template-columns: max-content auto;\n}\ndl.footnote dt {\n margin: 0;\n}\ndl.footnote dt > .fn-backref {\n margin-left: 0.25rem;\n}\ndl.footnote dt:after {\n content: \":\";\n}\ndl.footnote dt .brackets:before {\n content: \"[\";\n}\ndl.footnote dt .brackets:after {\n content: \"]\";\n}\n\nimg {\n box-sizing: border-box;\n max-width: 100%;\n height: auto;\n}\n\narticle .figure {\n border-radius: 0.2rem;\n padding: 0.5rem;\n}\narticle .figure :last-child {\n margin-bottom: 0;\n}\narticle .align-left {\n float: left;\n clear: left;\n margin: 0 1rem 1rem;\n}\narticle .align-right {\n float: right;\n clear: right;\n margin: 0 1rem 1rem;\n}\narticle .align-center, article .figure.align-default,\narticle .legend .align-default {\n text-align: center;\n margin-left: 50%;\n transform: translate(-50%);\n}\nul,\nol {\n padding-left: 1.2rem;\n margin-top: 1rem;\n margin-bottom: 1rem;\n}\nul li > p:first-child,\nol li > p:first-child {\n margin-top: 0.25rem;\n margin-bottom: 0.25rem;\n}\nul li > p:last-child,\nol li > p:last-child {\n margin-top: 0.25rem;\n}\nul li > ul,\nul li > ol,\nol li > ul,\nol li > ol {\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n}\n\n.simple li > ul,\n.simple li > ol,\n.toctree-wrapper li > ul,\n.toctree-wrapper li > ol {\n margin-top: 0;\n margin-bottom: 0;\n}\n\n.field-list dt,\n.option-list dt,\ndl.simple dt,\ndl.footnote dt,\ndl.glossary dt {\n display: inline-block;\n margin-top: 0.25rem;\n font-weight: 500;\n}\n.field-list dt .classifier::before,\n.option-list dt .classifier::before,\ndl.simple dt .classifier::before,\ndl.footnote dt .classifier::before,\ndl.glossary dt .classifier::before {\n content: \":\";\n margin-left: 0.2rem;\n margin-right: 0.2rem;\n}\n.field-list dd > p:first-child,\n.field-list dd ul,\n.option-list dd > p:first-child,\n.option-list dd ul,\ndl.simple dd > p:first-child,\ndl.simple dd ul,\ndl.footnote dd > p:first-child,\ndl.footnote dd ul,\ndl.glossary dd > p:first-child,\ndl.glossary dd ul {\n margin-top: 0.125rem;\n}\n.field-list dd ul,\n.option-list dd ul,\ndl.simple dd ul,\ndl.footnote dd ul,\ndl.glossary dd ul {\n margin-bottom: 0.125rem;\n}\n\n.math-wrapper {\n width: 100%;\n overflow-x: auto;\n}\n\nabbr[title] {\n cursor: help;\n}\n\nkbd {\n margin: 0 0.2rem;\n padding: 0 0.2rem;\n border-radius: 0.2rem;\n border: 1px solid var(--color-foreground-border);\n color: var(--color-foreground-primary);\n vertical-align: text-bottom;\n font-size: var(--font-size--small--3);\n display: inline-block;\n box-shadow: 0 0.0625rem 0 rgba(0, 0, 0, 0.2), inset 0 0 0 0.125rem var(--color-background-primary);\n background-color: var(--color-background-secondary);\n}\nkbd > kbd {\n margin: 0;\n}\n\nblockquote {\n border-left: 1px solid var(--color-foreground-border);\n font-style: italic;\n margin-left: 0.5rem;\n margin-right: 0.5rem;\n padding: 0.5rem 1rem;\n}\n\nh1 > .headerlink,\nh2 > .headerlink,\nh3 > .headerlink,\nh4 > .headerlink,\nh5 > .headerlink,\nh6 > .headerlink,\ndl dt > .headerlink,\np.caption > .headerlink,\ntable > caption > .headerlink,\n.code-block-caption > .headerlink {\n font-weight: 100;\n margin-left: 0.5rem;\n visibility: hidden;\n text-decoration: none;\n}\nh1:hover > .headerlink,\nh2:hover > .headerlink,\nh3:hover > .headerlink,\nh4:hover > .headerlink,\nh5:hover > .headerlink,\nh6:hover > .headerlink,\ndl dt:hover > .headerlink,\np.caption:hover > .headerlink,\ntable > caption:hover > .headerlink,\n.code-block-caption:hover > .headerlink {\n visibility: visible;\n}\n\n:target > h1:first-child > .headerlink,\n:target > h2:first-child > .headerlink,\n:target > h3:first-child > .headerlink,\n:target > h4:first-child > .headerlink,\n:target > h5:first-child > .headerlink,\n:target > h6:first-child > .headerlink {\n visibility: visible;\n}\n\narticle .sidebar {\n float: right;\n clear: right;\n width: 30%;\n margin-left: 1rem;\n margin-right: 0;\n border-radius: 0.2rem;\n background-color: var(--color-background-secondary);\n border: var(--color-background-border) 1px solid;\n}\narticle .sidebar > * {\n padding-left: 1rem;\n padding-right: 1rem;\n}\narticle .sidebar .sidebar-title {\n margin: 0;\n padding: 0.5rem 1rem;\n border-bottom: var(--color-background-border) 1px solid;\n font-weight: 500;\n}\n\n.table-wrapper {\n width: 100%;\n overflow-x: auto;\n margin-top: 1rem;\n margin-bottom: 0.5rem;\n padding: 0.2rem 0.2rem 0.75rem;\n}\n\ntable.docutils {\n border-radius: 0.2rem;\n border-spacing: 0;\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1);\n}\ntable.docutils th {\n background: var(--color-background-secondary);\n}\ntable.docutils td,\ntable.docutils th {\n padding: 0 0.25rem;\n border-left: 1px solid var(--color-background-border);\n border-bottom: 1px solid var(--color-background-border);\n}\ntable.docutils td p,\ntable.docutils th p {\n margin: 0.25rem;\n}\ntable.docutils td:first-child,\ntable.docutils th:first-child {\n border-left: none;\n}\n\nul.search {\n padding-left: 0;\n list-style: none;\n}\nul.search li {\n padding: 1rem 0;\n border-bottom: 1px solid var(--color-background-border);\n}\n\n.highlighted {\n background-color: var(--color-highlighted-background);\n color: var(--color-highlighted-text);\n}\n\n.sidebar-brand {\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);\n text-decoration: none;\n}\n\n.sidebar-brand-text {\n margin: var(--sidebar-item-spacing-vertical) 0;\n font-size: 1.5rem;\n}\n\n.sidebar-logo-container {\n margin: var(--sidebar-item-spacing-vertical) 0;\n}\n\n.sidebar-logo {\n margin: 0 auto;\n display: block;\n max-width: 100%;\n}\n\n.sidebar-search-container {\n display: flex;\n align-items: center;\n margin-top: var(--sidebar-search-space-above);\n}\n.sidebar-search-container::before {\n content: \"\";\n position: absolute;\n left: var(--sidebar-item-spacing-horizontal);\n width: var(--sidebar-search-icon-size);\n height: var(--sidebar-search-icon-size);\n}\n\n.sidebar-search {\n box-sizing: border-box;\n padding-top: var(--sidebar-search-input-spacing-vertical);\n padding-bottom: var(--sidebar-search-input-spacing-vertical);\n padding-right: var(--sidebar-search-input-spacing-horizontal);\n padding-left: calc( var(--sidebar-item-spacing-horizontal) + var(--sidebar-search-input-spacing-horizontal) + var(--sidebar-search-icon-size) );\n width: 100%;\n color: var(--color-sidebar-search-foreground);\n background: transparent;\n z-index: 10;\n}\n.sidebar-search:focus {\n outline: none;\n}\n.sidebar-search::placeholder {\n font-size: var(--sidebar-search-input-font-size);\n}\n\n.sidebar-tree {\n font-size: var(--sidebar-item-font-size);\n margin-top: var(--sidebar-tree-space-above);\n margin-bottom: var(--sidebar-item-spacing-vertical);\n}\n.sidebar-tree ul {\n padding: 0;\n margin-top: 0;\n margin-bottom: 0;\n display: flex;\n flex-direction: column;\n list-style: none;\n}\n.sidebar-tree li {\n position: relative;\n margin: 0;\n}\n.sidebar-tree li > ul {\n margin-left: var(--sidebar-item-spacing-horizontal);\n}\n.sidebar-tree .reference {\n box-sizing: border-box;\n display: inline-block;\n line-height: var(--sidebar-item-line-height);\n height: 100%;\n width: 100%;\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);\n}\n.sidebar-tree .reference.external::after {\n content: url('data:image/svg+xml,');\n margin: 0 0.25rem;\n vertical-align: center;\n}\n.sidebar-tree .current-page > .reference {\n font-weight: bold;\n}\n.sidebar-tree label {\n position: absolute;\n top: 0;\n right: 0;\n height: var(--sidebar-item-height);\n width: var(--sidebar-expander-width);\n cursor: pointer;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.sidebar-tree .caption {\n font-size: var(--sidebar-caption-font-size);\n font-weight: bold;\n text-transform: uppercase;\n margin: var(--sidebar-caption-space-above) 0 0 0;\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);\n}\n.sidebar-tree li.has-children > .reference {\n padding-right: var(--sidebar-expander-width);\n}\n\n.toctree-checkbox {\n position: absolute;\n display: none;\n}\n\n.toctree-checkbox ~ ul {\n display: none;\n}\n.toctree-checkbox ~ label .icon svg {\n transform: rotate(90deg);\n}\n\n.toctree-checkbox:checked ~ ul {\n display: block;\n}\n.toctree-checkbox:checked ~ label .icon svg {\n transform: rotate(-90deg);\n}\n\n.toc-title-container {\n padding: var(--toc-title-padding);\n padding-top: var(--toc-spacing-vertical);\n}\n\n.toc-title {\n font-size: var(--toc-title-font-size);\n padding-left: var(--toc-spacing-horizontal);\n text-transform: uppercase;\n}\n\n.no-toc {\n display: none;\n}\n\n.toc-tree {\n font-size: var(--toc-font-size);\n line-height: 1.3;\n padding-left: calc(var(--toc-spacing-horizontal) - var(--toc-item-spacing-horizontal));\n padding-bottom: var(--toc-spacing-vertical);\n}\n.toc-tree > ul > li {\n padding-top: 0;\n}\n.toc-tree > ul > li > ul {\n padding-left: 0;\n}\n.toc-tree > ul > li > a {\n display: none;\n}\n.toc-tree ul {\n list-style-type: none;\n margin-top: 0;\n margin-bottom: 0;\n padding-left: var(--toc-item-spacing-horizontal);\n}\n.toc-tree li {\n padding-top: var(--toc-item-spacing-vertical);\n}\n.toc-tree li .reference {\n text-decoration: none;\n}\n.toc-tree li.scroll-current > .reference {\n font-weight: bold;\n}\n\n.toc-scroll {\n max-height: 100vh;\n overflow-y: hidden;\n}\n.toc-scroll:hover {\n overflow-y: auto;\n}\n\n.contents {\n color: var(--color-problematic);\n background: rgba(255, 0, 0, 0.25);\n}\n.contents::before {\n content: \"ERROR: Adding a table of contents in Furo-based documentation is unnecessary, and does not work well with existing styling.\";\n}\n\nbody {\n color: var(--color-foreground-primary);\n background: var(--color-background-primary);\n}\n\n.mobile-header .header-center a {\n color: var(--color-header-text);\n text-decoration: none;\n}\n\n.announcement {\n background-color: var(--color-announcement-background);\n color: var(--color-announcement-text);\n}\n\n.sidebar-drawer {\n border-right: 1px solid var(--color-sidebar-background-border);\n background: var(--color-sidebar-background);\n}\n\n.sidebar-brand {\n color: var(--color-sidebar-brand-text);\n}\n\n.sidebar-search-container {\n background: var(--color-sidebar-search-background);\n}\n.sidebar-search-container:hover, .sidebar-search-container:focus-within {\n background: var(--color-sidebar-search-background--focus);\n}\n.sidebar-search-container::before {\n background-color: var(--color-sidebar-search-icon);\n mask-image: var(--icon-search);\n}\n\n.sidebar-search {\n border: none;\n border-top: 1px solid var(--color-sidebar-search-border);\n border-bottom: 1px solid var(--color-sidebar-search-border);\n}\n\n.sidebar-tree .icon {\n color: var(--color-sidebar-link-text);\n}\n.sidebar-tree .reference {\n text-decoration: none;\n color: var(--color-sidebar-link-text);\n}\n.sidebar-tree .reference:hover {\n background: var(--color-sidebar-item-background--hover);\n}\n.sidebar-tree .reference.external::after {\n color: var(--color-sidebar-link-text);\n}\n.sidebar-tree .caption {\n color: var(--color-sidebar-caption-text);\n}\n.sidebar-tree .toctree-l1 > .reference, .sidebar-tree .toctree-l1 > label .icon {\n color: var(--color-sidebar-link-text--top-level);\n}\n.sidebar-tree label {\n background: var(--color-sidebar-item-expander-background);\n}\n.sidebar-tree label:hover {\n background: var(--color-sidebar-item-expander-background--hover);\n}\n.sidebar-tree .current > .reference {\n background: var(--color-sidebar-item-background--current);\n}\n.sidebar-tree .current > .reference:hover {\n background: var(--color-sidebar-item-background--hover);\n}\n\n.toc-drawer {\n background: var(--color-toc-background);\n}\n\n.toc-title {\n color: var(--color-toc-title-text);\n}\n\n.toc-tree {\n border-left: 1px solid var(--color-background-border);\n}\n.toc-tree .reference {\n text-decoration: none;\n color: var(--color-toc-item-text);\n}\n.toc-tree .scroll-current > .reference {\n color: var(--color-toc-item-text--active);\n}\n\narticle {\n color: var(--color-content-foreground);\n background: var(--color-content-background);\n}\n\na {\n text-decoration: underline;\n color: var(--color-link);\n text-decoration-color: var(--color-link-underline);\n}\na:hover {\n color: var(--color-link--hover);\n text-decoration-color: var(--color-link-underline--hover);\n}\na.muted-link {\n text-decoration: none;\n}\na.muted-link:hover {\n text-decoration: underline;\n color: var(--color-link);\n text-decoration-color: var(--color-link-underline);\n}\n\n.problematic {\n color: var(--color-problematic);\n}\n\n#furo-sidebar-ad-placement {\n padding: var(--sidebar-item-padding-vertical) var(--sidebar-item-padding-horizontal);\n}\n\n[role=main] .container {\n max-width: initial;\n padding-left: initial;\n padding-right: initial;\n}\n\n.shadow.docutils {\n border: none;\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important;\n}\n\n:root {\n --tabs--label-text: var(--color-foreground-muted);\n --tabs--label-text--active: var(--color-brand-content);\n --tabs--label-text--hover: var(--color-brand-content);\n --tabs--label-background--active: transparent;\n --tabs--label-background--hover: var(--color-background-secondary);\n --tabs--border: var(--color-background-border);\n}","// This file contains the styles for the overall layouting of the documentation\n// skeleton, including the responsive changes as well as sidebar toggles.\n//\n// This is implemented as a mobile-last design, which isn't ideal, but it is\n// reasonably good-enough and I got pretty tired by the time I'd finished this\n// to move the rules around to fix this. Shouldn't take more than 3-4 hours,\n// if you know what you're doing tho.\n\n//\n// Overalls\n//\nbody {\n overflow-y: scroll; // always have the scrollbar\n}\nhtml,\nbody {\n height: 100%;\n}\n.page {\n display: flex;\n // fill the viewport for pages with little content.\n min-height: 100%;\n}\n.mobile-header {\n width: 100%;\n height: var(--header-height);\n background-color: var(--color-header-background);\n color: var(--color-header-text);\n border-bottom: 1px solid var(--color-header-border);\n\n // Looks like sub-script/super-script have this, and we need this to\n // be \"on top\" of those.\n z-index: 10;\n\n // Add shadow when scrolled\n &.scrolled {\n border-bottom: none;\n box-shadow: 0 0 0.2rem rgba(0, 0, 0, 0.1),\n 0 0.2rem 0.4rem rgba(0, 0, 0, 0.2);\n }\n\n // We don't show the header on large screens.\n display: none;\n}\n.main {\n display: flex;\n flex: 1;\n}\n\n// Sidebar (left) also covers the entire left portion of screen.\n.sidebar-drawer {\n box-sizing: border-box;\n\n display: flex;\n justify-content: flex-end;\n // These next two lines took me two days to figure out.\n width: calc((100% - #{$full-width}) / 2 + #{$sidebar-width});\n min-width: $sidebar-width;\n}\n\n// Scroll-along sidebars\n.sidebar-container,\n.toc-drawer {\n width: $sidebar-width;\n}\n.sidebar-sticky,\n.toc-sticky {\n position: sticky;\n top: 0;\n height: 100vh;\n height: min(100%, 100vh);\n\n display: flex;\n flex-direction: column;\n}\n\n.sidebar-scroll,\n.toc-scroll {\n flex-shrink: 1;\n\n overflow: auto;\n scroll-behavior: smooth;\n}\n\n// Central items.\n.content {\n padding: 0 $content-padding;\n width: $content-width;\n\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n}\n\n.icon {\n display: inline-block;\n height: 1rem;\n width: 1rem;\n svg {\n width: 100%;\n height: 100%;\n }\n}\n\n// TODO: figure out what could cause content to flow \"out\" of .content and\n// add an overflow-x on it.\n\n//\n// Accommodate announcement banner\n//\n.announcement {\n height: var(--header-height);\n display: flex;\n align-items: center;\n overflow-x: auto;\n}\n.announcement + .page {\n min-height: calc(100% - var(--header-height));\n}\n.announcement-content {\n box-sizing: border-box;\n padding: 0.5rem;\n min-width: 100%;\n white-space: nowrap;\n text-align: center;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Toggles for elements\n////////////////////////////////////////////////////////////////////////////////\n.toc-overlay-icon {\n display: none;\n float: right;\n\n height: 1.5rem;\n width: 1.5rem;\n margin-top: 1.5rem;\n\n align-items: center;\n justify-content: right;\n}\n.sidebar-toggle {\n position: absolute;\n display: none;\n}\n// \n.sidebar-toggle[name=\"__toc\"] {\n left: 20px;\n}\n.sidebar-toggle:checked {\n left: 40px;\n}\n// \n.overlay {\n position: fixed;\n top: 0;\n width: 0;\n height: 0;\n\n transition: width 0ms, height 0ms, opacity 250ms ease-out;\n\n opacity: 0;\n background-color: rgba(0, 0, 0, 0.54);\n}\n.sidebar-overlay {\n z-index: 20;\n}\n.toc-overlay {\n z-index: 40;\n}\n\n// Keep things on top and smooth.\n.sidebar-drawer {\n z-index: 30;\n transition: left 250ms ease-in-out;\n}\n.toc-drawer {\n z-index: 50;\n transition: right 250ms ease-in-out;\n}\n\n// Show the Sidebar\n#__navigation:checked {\n & ~ .sidebar-overlay {\n width: 100%;\n height: 100%;\n opacity: 1;\n }\n & ~ .page {\n .sidebar-drawer {\n top: 0;\n left: 0;\n }\n }\n}\n// Show the toc sidebar\n#__toc:checked {\n & ~ .toc-overlay {\n width: 100%;\n height: 100%;\n opacity: 1;\n }\n & ~ .page {\n .toc-drawer {\n top: 0;\n right: 0;\n }\n }\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Responsive layouting\n////////////////////////////////////////////////////////////////////////////////\n// Make things a bit bigger on bigger screens.\n@media (min-width: $full-width + $sidebar-width) {\n html {\n font-size: 110%;\n }\n}\n\n@media (max-width: $full-width) {\n // Collapse \"toc\" into the icon.\n .toc-overlay-icon {\n display: flex;\n cursor: pointer;\n }\n\n .sidebar-drawer {\n width: calc(\n (100% - #{$full-width - $sidebar-width}) / 2 + #{$sidebar-width}\n );\n }\n .toc-drawer {\n position: fixed;\n height: 100vh;\n top: 0;\n right: -$sidebar-width;\n }\n .toc-tree {\n font-size: var(--toc-font-size--mobile);\n }\n}\n\n@media (max-width: $full-width - $sidebar-width) {\n // Collapse \"navigation\".\n .sidebar-drawer {\n position: fixed;\n height: 100vh;\n width: $sidebar-width;\n\n top: 0;\n left: -$sidebar-width;\n }\n\n // Show the header.\n .mobile-header {\n position: sticky;\n top: 0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n .nav-overlay-icon {\n cursor: pointer;\n display: flex;\n justify-content: center;\n align-items: center;\n .icon {\n color: var(--color-foreground-secondary);\n height: 1.25rem;\n width: 1.25rem;\n }\n }\n .header-left,\n .header-right {\n height: var(--header-height);\n width: var(--header-height);\n }\n }\n\n // Add a scroll margin for the content\n :target {\n scroll-margin-top: var(--header-height);\n }\n\n // Center the page, and accommodate for the header.\n .page {\n flex-direction: column;\n justify-content: center;\n }\n .content {\n margin-left: auto;\n margin-right: auto;\n }\n}\n@media (max-width: $content-width + 2* $content-padding) {\n // Content should respect window limits.\n .content {\n width: 100%;\n overflow-x: auto;\n }\n}\n@media (max-width: $content-width) {\n .content {\n padding: 0 $content-padding--small;\n }\n // Don't float sidebars to the right.\n article div.sidebar {\n float: none;\n width: 100%;\n margin: 1rem 0;\n }\n}\n","// This file contains the styles used for stylizing the footer that's shown\n// below the content.\n\nfooter {\n font-size: var(--font-size--small);\n display: flex;\n flex-direction: column;\n\n margin-top: 2rem;\n}\n\n// Bottom of page information\n.related-information {\n margin-top: 1rem;\n\n padding: 0.75rem;\n padding-bottom: 1rem;\n\n border-top: 1px solid var(--color-background-border);\n\n line-height: 1.5;\n color: var(--color-foreground-secondary);\n}\n\n// Next/Prev page information\n.related-pages {\n a {\n display: flex;\n align-items: center;\n\n text-decoration: none;\n &:hover .page-info .title {\n text-decoration: underline;\n color: var(--color-link);\n text-decoration-color: var(--color-link-underline);\n }\n\n svg,\n svg > use {\n flex-shrink: 0;\n\n color: var(--color-foreground-border);\n\n width: 0.75rem;\n height: 0.75rem;\n margin: 0 0.5rem;\n }\n &.next-page {\n max-width: 50%;\n\n float: right;\n clear: right;\n text-align: right;\n }\n &.prev-page {\n max-width: 50%;\n\n float: left;\n clear: left;\n\n svg {\n transform: rotate(180deg);\n }\n }\n }\n}\n\n.page-info {\n display: flex;\n flex-direction: column;\n\n .next-page & {\n align-items: flex-end;\n }\n\n .context {\n display: flex;\n align-items: center;\n\n padding-bottom: 0.1rem;\n\n color: var(--color-foreground-muted);\n font-size: var(--font-size--small);\n text-decoration: none;\n }\n}\n","// This file contains the styling for making the content throughout the page,\n// including fonts, paragraphs, headings and spacing among these elements.\n\nhtml {\n font-family: var(--font-stack);\n}\npre,\ncode,\nkbd,\nsamp {\n font-family: var(--font-stack--monospace);\n}\n\n// Make fonts look slightly nicer.\nbody {\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n// Line height from Bootstrap 4.1\narticle {\n line-height: 1.5;\n}\n\n//\n// Headings\n//\nh1 {\n font-size: 2.25rem;\n}\nh2 {\n font-size: 1.75rem;\n}\nh3 {\n font-size: 1.25rem;\n}\nh4 {\n font-size: 1rem;\n}\nh5 {\n font-size: 0.875rem;\n}\nh6 {\n font-size: 0.75rem;\n}\n\n// Main headings\nh1,\nh2 {\n margin-top: 1.5rem;\n margin-bottom: 1rem;\n font-weight: 300;\n}\n\nh3 {\n margin-top: 1.5rem;\n margin-bottom: 0.75rem;\n font-weight: 400;\n}\n\n// You're in-too-deep headings\nh4,\nh5,\nh6 {\n text-transform: uppercase;\n margin-top: 1rem;\n margin-bottom: 0.5rem;\n font-weight: 700;\n}\n\n// Paragraph\np {\n margin-top: 0.75rem;\n margin-bottom: 0.75rem;\n}\n\n// Horizontal rules\nhr.docutils {\n height: 0.0625rem;\n padding: 0;\n margin: 2rem 0;\n background-color: var(--color-background-border);\n border: 0;\n}\n\n.centered {\n text-align: center;\n}\n","// Definitely inspired by mkdocs-material.\n.admonition {\n margin: 1rem auto;\n padding: 0 0.5rem 0.5rem 0.5rem;\n\n background: var(--color-admonition-background);\n\n border-radius: 0.2rem;\n border-left: 0.2rem solid var(--color-admonition-title);\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05),\n 0 0 0.0625rem rgba(0, 0, 0, 0.1);\n\n font-size: var(--admonition-font-size);\n\n overflow: hidden;\n page-break-inside: avoid;\n\n // First element should have no margin, since the title has it.\n > :nth-child(2) {\n margin-top: 0;\n }\n // Last item should have no margin, since we'll control that w/ padding\n > :last-child {\n margin-bottom: 0;\n }\n\n // Defaults for all admonitions\n p.admonition-title {\n position: relative;\n margin: 0 -0.5rem 0.5rem;\n padding: 0.5rem 0.5rem 0.5rem 2rem;\n\n font-weight: 500;\n font-size: var(--admonition-title-font-size);\n background-color: var(--color-admonition-title-background);\n\n line-height: 1.3;\n\n // Our fancy icon\n &::before {\n content: \"\";\n position: absolute;\n left: 0.5rem;\n width: 1rem;\n height: 1rem;\n // color: var(--color-admonition-title);\n background-color: var(--color-admonition-title);\n\n mask-image: var(--icon-admonition-default);\n mask-repeat: no-repeat;\n }\n }\n\n //\n // Variants\n //\n @each $type, $value in $admonitions {\n &.#{$type} {\n border-left-color: var(--color-admonition-title--#{$type});\n .admonition-title {\n background-color: var(--color-admonition-title-background--#{$type});\n &::before {\n background-color: var(--color-admonition-title--#{$type});\n mask-image: var(--icon-#{nth($value, 2)});\n }\n }\n }\n }\n}\n\n.admonition-todo .admonition-title {\n text-transform: uppercase;\n}\n","// This file stylizes the API documentation (stuff generated by autodoc). It's\n// deeply nested due to how autodoc structures the HTML without enough classes\n// to select the relevant items.\n\n// API docs!\ndl.py, dl.cpp, dl.c, dl.js\n // Tweak the spacing of all the things!\n dd\n margin-left: 2rem\n > :first-child\n margin-top: 0.125rem\n > :last-child\n margin-bottom: 0.75rem\n\n .field-list\n margin-bottom: 0.75rem\n dt\n text-transform: uppercase\n font-size: var(--font-size--small)\n\n dd:empty\n margin-bottom: 0.5rem\n dd > ul\n margin-left: -1.2rem\n > li\n > p:nth-child(2)\n margin-top: 0\n // When the last-empty-paragraph follows a paragraph, it doesn't need\n // to augument the existing spacing.\n > p + p:last-child:empty\n margin-top: 0\n margin-bottom: 0\n\n // Colorize the elements\n > dt\n color: var(--color-api-overall)\n\ndl.class, dl.function, dl.method, dl.enum, dl.enum-class, dl.enum-struct, dl.type\n > dt .property\n color: var(--color-api-keyword)\n\n.sig-name\n font-weight: bold\n color: var(--color-api-name)\n.sig-prename\n color: var(--color-api-pre-name)\n.sig-paren\n color: var(--color-api-paren)\n.sig-param\n font-style: normal\n\n.versionmodified\n font-style: italic\ndiv.versionadded, div.versionchanged, div.deprecated\n p\n margin-top: 0.125rem\n margin-bottom: 0.125rem\n\n.viewcode-link, .viewcode-back\n float: right\n font-size: var(--font-size--small)\n","// Captions\narticle p.caption,\ntable > caption,\n.code-block-caption {\n font-size: var(--font-size--small);\n text-align: center;\n}\n\n// Caption above a TOCTree\n// TODO: Figure out if I want to improve this in some way.\n.toctree-wrapper.compound {\n .caption {\n text-align: initial;\n font-size: 1em;\n margin-bottom: 0;\n }\n > ul {\n margin-top: 0;\n margin-bottom: 0;\n }\n}\n","// Inline code\ncode.literal {\n background: var(--color-background-secondary);\n border-radius: 0.2em;\n // Make the font smaller, and use padding to recover.\n font-size: var(--font-size--small--2);\n padding: 0.1em 0.2em;\n}\n\n// Code and Literal Blocks\n$code-spacing-vertical: 0.625rem;\n$code-spacing-horizontal: 0.875rem;\n\narticle {\n // Wraps every literal block + line numbers.\n div[class*=\" highlight-\"],\n div[class^=\"highlight-\"] {\n margin: 1em 0;\n display: flex;\n }\n}\n\npre {\n margin: 0;\n padding: 0;\n\n // Needed to have more specificity than pygments' \"pre\" selector. :(\n article & {\n line-height: 1.5;\n }\n\n &.literal-block,\n .highlight & {\n font-size: var(--code-font-size);\n padding: $code-spacing-vertical $code-spacing-horizontal;\n }\n // Make it look like all the other blocks.\n &.literal-block {\n overflow: auto;\n\n margin-top: 1rem;\n margin-bottom: 1rem;\n\n border-radius: 0.2rem;\n background-color: var(--color-code-background);\n color: var(--color-code-foreground);\n }\n}\n\n// All code is always contained in a pre\n.highlight {\n flex-grow: 1;\n border-radius: 0.2rem;\n overflow: auto;\n}\n// Added when there's line numbers associated with a literal block.\n.highlighttable {\n width: 100%;\n display: block;\n tbody {\n display: block;\n }\n tr {\n display: flex;\n }\n // Line numbers\n td.linenos {\n background-color: var(--color-code-background);\n color: var(--color-code-foreground);\n padding: $code-spacing-vertical $code-spacing-horizontal;\n padding-right: 0;\n border-top-left-radius: 0.2rem;\n border-bottom-left-radius: 0.2rem;\n }\n .linenodiv {\n font-size: var(--code-font-size);\n\n padding-right: 0.5rem;\n box-shadow: -0.0625rem 0 var(--color-code-foreground) inset;\n opacity: 0.5; // I hate myself.\n }\n // Actual code\n td.code {\n padding: 0;\n display: block;\n flex: 1;\n overflow: hidden;\n\n .highlight {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n }\n}\n","// Inline Footnote Reference\n.footnote-reference {\n font-size: var(--font-size--small--4);\n vertical-align: super;\n}\n\n// Definition list, listing the content of each note.\ndl.footnote {\n font-size: var(--font-size--small);\n color: var(--color-foreground-secondary);\n\n display: grid;\n grid-template-columns: max-content auto;\n dt {\n margin: 0;\n > .fn-backref {\n margin-left: 0.25rem;\n }\n\n &:after {\n content: \":\";\n }\n .brackets {\n &:before {\n content: \"[\";\n }\n &:after {\n content: \"]\";\n }\n }\n }\n}\n","//\n// Figures\n//\nimg {\n box-sizing: border-box;\n max-width: 100%;\n height: auto;\n}\n\narticle {\n .figure {\n border-radius: 0.2rem;\n\n padding: 0.5rem;\n :last-child {\n margin-bottom: 0;\n }\n }\n .align-left {\n float: left;\n clear: left;\n margin: 0 1rem 1rem;\n }\n .align-right {\n float: right;\n clear: right;\n margin: 0 1rem 1rem;\n }\n .align-center {\n text-align: center;\n margin-left: 50%;\n transform: translate(-50%);\n }\n\n .figure.align-default,\n .legend .align-default {\n @extend .align-center;\n }\n}\n","ul,\nol {\n padding-left: 1.2rem;\n\n // Space lists out like paragraphs\n margin-top: 1rem;\n margin-bottom: 1rem;\n // reduce margins within li.\n li {\n > p:first-child {\n margin-top: 0.25rem;\n margin-bottom: 0.25rem;\n }\n > p:last-child {\n margin-top: 0.25rem;\n }\n\n > ul,\n > ol {\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n }\n }\n}\n// Don't space lists out when they're \"simple\" or in a `.. toctree::`\n.simple,\n.toctree-wrapper {\n li {\n > ul,\n > ol {\n margin-top: 0;\n margin-bottom: 0;\n }\n }\n}\n\n// Definition Lists\n.field-list,\n.option-list,\ndl.simple,\ndl.footnote,\ndl.glossary {\n dt {\n display: inline-block;\n margin-top: 0.25rem;\n font-weight: 500;\n\n .classifier::before {\n content: \":\";\n margin-left: 0.2rem;\n margin-right: 0.2rem;\n }\n }\n\n dd {\n > p:first-child,\n ul {\n margin-top: 0.125rem;\n }\n ul {\n margin-bottom: 0.125rem;\n }\n }\n}\n",".math-wrapper {\n width: 100%;\n overflow-x: auto;\n}\n","// Abbreviations\nabbr[title] {\n cursor: help;\n}\n\n// Keyboard / Mouse \"instructions\"\nkbd {\n margin: 0 0.2rem;\n padding: 0 0.2rem;\n border-radius: 0.2rem;\n border: 1px solid var(--color-foreground-border);\n color: var(--color-foreground-primary);\n vertical-align: text-bottom;\n\n font-size: var(--font-size--small--3);\n display: inline-block;\n\n box-shadow: 0 0.0625rem 0 rgba(0, 0, 0, 0.2),\n inset 0 0 0 0.125rem var(--color-background-primary);\n\n background-color: var(--color-background-secondary);\n\n > kbd {\n margin: 0;\n }\n}\n\n// Blockquote\nblockquote {\n border-left: 1px solid var(--color-foreground-border);\n font-style: italic;\n margin-left: 0.5rem;\n margin-right: 0.5rem;\n padding: 0.5rem 1rem;\n}\n","// Adapted from Sphinx-RTD-theme's corresponding CSS\n// https://github.com/readthedocs/sphinx_rtd_theme/blob/1a32899b/src/sass/_theme_rst.sass#L201\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\ndl dt,\np.caption,\ntable > caption,\n.code-block-caption {\n > .headerlink {\n font-weight: 100;\n margin-left: 0.5rem;\n visibility: hidden;\n text-decoration: none;\n }\n &:hover > .headerlink {\n visibility: visible;\n }\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n :target > &:first-child > .headerlink {\n visibility: visible;\n }\n}\n","article .sidebar {\n float: right;\n clear: right;\n width: 30%;\n\n margin-left: 1rem;\n margin-right: 0;\n\n border-radius: 0.2rem;\n background-color: var(--color-background-secondary);\n border: var(--color-background-border) 1px solid;\n\n > * {\n padding-left: 1rem;\n padding-right: 1rem;\n }\n\n .sidebar-title {\n margin: 0;\n padding: 0.5rem 1rem;\n border-bottom: var(--color-background-border) 1px solid;\n\n font-weight: 500;\n }\n}\n// TODO: subtitle\n// TODO: dedicated variables?\n",".table-wrapper {\n width: 100%;\n overflow-x: auto;\n margin-top: 1rem;\n margin-bottom: 0.5rem;\n padding: 0.2rem 0.2rem 0.75rem;\n}\n\ntable.docutils {\n border-radius: 0.2rem;\n border-spacing: 0;\n\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05),\n 0 0 0.0625rem rgba(0, 0, 0, 0.1);\n\n th {\n background: var(--color-background-secondary);\n }\n\n td,\n th {\n // Space things out properly\n padding: 0 0.25rem;\n p {\n margin: 0.25rem;\n }\n\n // Get the borders looking just-right.\n border-left: 1px solid var(--color-background-border);\n border-bottom: 1px solid var(--color-background-border);\n\n &:first-child {\n border-left: none;\n }\n }\n}\n","//\n// Search Page Listing\n//\nul.search {\n padding-left: 0;\n list-style: none;\n\n li {\n padding: 1rem 0;\n border-bottom: 1px solid var(--color-background-border);\n }\n}\n\n//\n// Highlighted by links in search page\n//\n.highlighted {\n background-color: var(--color-highlighted-background);\n color: var(--color-highlighted-text);\n}\n","// This file contains the styles for the contents of the left sidebar, which\n// contains the navigation tree, logo, search etc.\n\n////////////////////////////////////////////////////////////////////////////////\n// Brand on top of the scrollable tree.\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-brand {\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n\n padding: var(--sidebar-item-spacing-vertical)\n var(--sidebar-item-spacing-horizontal);\n text-decoration: none;\n}\n\n.sidebar-brand-text {\n margin: var(--sidebar-item-spacing-vertical) 0;\n font-size: 1.5rem;\n}\n\n.sidebar-logo-container {\n margin: var(--sidebar-item-spacing-vertical) 0;\n}\n\n.sidebar-logo {\n margin: 0 auto;\n display: block;\n max-width: 100%;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Search\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-search-container {\n display: flex;\n align-items: center;\n margin-top: var(--sidebar-search-space-above);\n\n &::before {\n content: \"\";\n position: absolute;\n left: var(--sidebar-item-spacing-horizontal);\n width: var(--sidebar-search-icon-size);\n height: var(--sidebar-search-icon-size);\n }\n}\n\n.sidebar-search {\n box-sizing: border-box;\n\n padding-top: var(--sidebar-search-input-spacing-vertical);\n padding-bottom: var(--sidebar-search-input-spacing-vertical);\n padding-right: var(--sidebar-search-input-spacing-horizontal);\n padding-left: calc(\n var(--sidebar-item-spacing-horizontal) +\n var(--sidebar-search-input-spacing-horizontal) +\n var(--sidebar-search-icon-size)\n );\n\n width: 100%;\n\n color: var(--color-sidebar-search-foreground);\n background: transparent;\n z-index: 10;\n\n &:focus {\n outline: none;\n }\n\n &::placeholder {\n font-size: var(--sidebar-search-input-font-size);\n }\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Structure/Skeleton of the navigation tree (left)\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-tree {\n font-size: var(--sidebar-item-font-size);\n margin-top: var(--sidebar-tree-space-above);\n margin-bottom: var(--sidebar-item-spacing-vertical);\n\n ul {\n padding: 0;\n margin-top: 0;\n margin-bottom: 0;\n\n display: flex;\n flex-direction: column;\n\n list-style: none;\n }\n li {\n position: relative;\n margin: 0;\n\n > ul {\n margin-left: var(--sidebar-item-spacing-horizontal);\n }\n }\n .reference {\n box-sizing: border-box;\n // Fill the parent.\n display: inline-block;\n line-height: var(--sidebar-item-line-height);\n\n height: 100%;\n width: 100%;\n\n padding: var(--sidebar-item-spacing-vertical)\n var(--sidebar-item-spacing-horizontal);\n\n // Add a nice little \"external-link\" arrow here.\n &.external::after {\n content: url('data:image/svg+xml,');\n margin: 0 0.25rem;\n vertical-align: center;\n }\n }\n\n // Make the current page reference bold.\n .current-page > .reference {\n font-weight: bold;\n }\n\n label {\n position: absolute;\n top: 0;\n right: 0;\n height: var(--sidebar-item-height);\n width: var(--sidebar-expander-width);\n\n cursor: pointer;\n\n display: flex;\n justify-content: center;\n align-items: center;\n }\n .caption {\n font-size: var(--sidebar-caption-font-size);\n\n font-weight: bold;\n text-transform: uppercase;\n\n margin: var(--sidebar-caption-space-above) 0 0 0;\n\n padding: var(--sidebar-item-spacing-vertical)\n var(--sidebar-item-spacing-horizontal);\n }\n // If it has children, add a bit more padding to wrap the content to avoid\n // overlapping with the