[pypy-commit] pypy.org default: merge nikola into default

mattip pypy.commits at gmail.com
Mon Feb 10 09:37:23 EST 2020


Author: Matti Picus <matti.picus at gmail.com>
Branch: 
Changeset: r978:504f296f216d
Date: 2020-02-10 16:35 +0200
http://bitbucket.org/pypy/pypy.org/changeset/504f296f216d/

Log:	merge nikola into default

diff too long, truncating to 2000 out of 11293 lines

diff --git a/.hgignore b/.hgignore
--- a/.hgignore
+++ b/.hgignore
@@ -1,1 +1,9 @@
+syntax: glob
+
+*.sw[pon]
 .*~
+__pycache__
+venv_nikola/
+cache/
+.doit.db
+source/.articlestore
diff --git a/Makefile b/Makefile
new file mode 100644
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,47 @@
+ifeq ($(origin .RECIPEPREFIX), undefined)
+    $(error This Make does not support .RECIPEPREFIX. Please use GNU Make 4.0 or later)
+endif
+.RECIPEPREFIX = >
+
+all: build
+
+.PHONY: clean build help import_blogger
+
+
+venv_nikola/bin/nikola:  ## create a virtualenv to build the website
+> @virtualenv -ppython3 ./venv_nikola
+> @venv_nikola/bin/python -mpip install nikola==8.0.3 jinja2 aiohttp watchdog
+
+plugins/import_blogger: venv_nikola/bin/nikola
+> venv_nikola/bin/nikola plugin -i import_blogger
+> venv_nikola/bin/pip install feedparser
+
+build: venv_nikola/bin/nikola  ## build the website if needed, the result is in ./public
+> venv_nikola/bin/nikola build
+
+auto: venv_nikola/bin/nikola ## build and serve the website, autoupdate on changes
+> venv_nikola/bin/nikola auto -a 0.0.0.0
+
+clean:  venv_nikola/bin/nikola  ## clean the website, usually not needed at all
+> venv_nikola/bin/nikola clean
+
+import_blogger: plugins/import_blogger  ## download and import the content from morepypy.blogspot.com
+> @if [ -z "${BLOGGER_XML}" ] || [ ! -s "${BLOGGER_XML}" ]; then \
+     echo "ERROR: BLOGGER_XML not defined or not a file"; \
+     echo "    Log into www.blogger.com, go to the morepypy settings,"; \
+     echo "    settings -> other -> Import & back up -> Back up content"; \
+     echo "    save to a location, then rerun this as"; \
+     echo "    \"BLOGGER_XML=location make import_blogger\""; \
+     exit 255; \
+  fi
+> @echo "\nImporting from ${BLOGGER_XML}"
+# TODO: improve import script with --export-comments (see static_comments plugin)
+> venv_nikola/bin/nikola import_blogger -o . -d ${BLOGGER_XML}
+> @echo Done. Don\'t forget to build the site
+
+# Add help text after each target name starting with '\#\#'
+help:   ## Show this help.
+> @echo "\nHelp for building the website, based on nikola"
+> @echo "Possible commands are:"
+> @grep -h "##" $(MAKEFILE_LIST) | grep -v grep | sed -e 's/\(.*\):.*##\(.*\)/    \1: \2/'
+ 
diff --git a/conf.py b/conf.py
new file mode 100644
--- /dev/null
+++ b/conf.py
@@ -0,0 +1,1388 @@
+# -*- coding: utf-8 -*-
+
+import time
+
+# !! This is the configuration of Nikola. !! #
+# !!  You should edit it to your liking.  !! #
+
+
+# ! Some settings can be different in different languages.
+# ! A comment stating (translatable) is used to denote those.
+# ! There are two ways to specify a translatable setting:
+# ! (a) BLOG_TITLE = "My Blog"
+# ! (b) BLOG_TITLE = {"en": "My Blog", "es": "Mi Blog"}
+# ! Option (a) is used when you don't want that setting translated.
+# ! Option (b) is used for settings that are different in different languages.
+
+
+# Data about this site
+BLOG_AUTHOR = "The PyPy Team"  # (translatable)
+BLOG_TITLE = "PyPy"  # (translatable)
+# This is the main URL for your site. It will be used
+# in a prominent link. Don't forget the protocol (http/https)!
+SITE_URL = "https://www.pypy.org/"
+# This is the URL where Nikola's output will be deployed.
+# If not set, defaults to SITE_URL
+# BASE_URL = "https://www.pypy.org/"
+BLOG_EMAIL = "pypy-dev at pypy.org"
+BLOG_DESCRIPTION = "A Faster Python"  # (translatable)
+
+# Nikola is multilingual!
+#
+# Currently supported languages are:
+#
+# en        English
+# af        Afrikaans
+# ar        Arabic
+# az        Azerbaijani
+# bg        Bulgarian
+# bs        Bosnian
+# ca        Catalan
+# cs        Czech [ALTERNATIVELY cz]
+# da        Danish
+# de        German
+# el        Greek [NOT gr]
+# eo        Esperanto
+# es        Spanish
+# et        Estonian
+# eu        Basque
+# fa        Persian
+# fi        Finnish
+# fr        French
+# fur       Friulian
+# gl        Galician
+# he        Hebrew
+# hi        Hindi
+# hr        Croatian
+# hu        Hungarian
+# ia        Interlingua
+# id        Indonesian
+# it        Italian
+# ja        Japanese [NOT jp]
+# ko        Korean
+# lt        Lithuanian
+# ml        Malayalam
+# nb        Norwegian (Bokmål)
+# nl        Dutch
+# pa        Punjabi
+# pl        Polish
+# pt        Portuguese
+# pt_br     Portuguese (Brazil)
+# ru        Russian
+# sk        Slovak
+# sl        Slovene
+# sq        Albanian
+# sr        Serbian (Cyrillic)
+# sr_latin  Serbian (Latin)
+# sv        Swedish
+# te        Telugu
+# th        Thai
+# tr        Turkish [NOT tr_TR]
+# uk        Ukrainian
+# ur        Urdu
+# vi        Vietnamese
+# zh_cn     Chinese (Simplified)
+# zh_tw     Chinese (Traditional)
+#
+# If you want to use Nikola with a non-supported language you have to provide
+# a module containing the necessary translations
+# (cf. the modules at nikola/data/themes/base/messages/).
+# If a specific post is not translated to a language, then the version
+# in the default language will be shown instead.
+
+# What is the default language?
+DEFAULT_LANG = "en"
+
+# What other languages do you have?
+# The format is {"translationcode" : "path/to/translation" }
+# the path will be used as a prefix for the generated pages location
+TRANSLATIONS = {
+    DEFAULT_LANG: "",
+    # Example for another language:
+    # "es": "./es",
+}
+
+# What will translated input files be named like?
+
+# If you have a page something.rst, then something.pl.rst will be considered
+# its Polish translation.
+#     (in the above example: path == "something", ext == "rst", lang == "pl")
+# this pattern is also used for metadata:
+#     something.meta -> something.pl.meta
+
+TRANSLATIONS_PATTERN = '{path}.{lang}.{ext}'
+
+# Links for the sidebar / navigation bar.  (translatable)
+# This is a dict.  The keys are languages, and values are tuples.
+#
+# For regular links:
+#     ('https://getnikola.com/', 'Nikola Homepage')
+#
+# For submenus:
+#     (
+#         (
+#             ('https://apple.com/', 'Apple'),
+#             ('https://orange.com/', 'Orange'),
+#         ),
+#         'Fruits'
+#     )
+#
+# WARNING: Support for submenus is theme-dependent.
+#          Only one level of submenus is supported.
+# WARNING: Some themes, including the default Bootstrap 4 theme,
+#          may present issues if the menu is too large.
+#          (in Bootstrap, the navbar can grow too large and cover contents.)
+# WARNING: If you link to directories, make sure to follow
+#          ``STRIP_INDEXES``.  If it’s set to ``True``, end your links
+#          with a ``/``, otherwise end them with ``/index.html`` — or
+#          else they won’t be highlighted when active.
+
+# PyPy templates out the logo into a div, so it is not here
+
+NAVIGATION_LINKS = {
+    DEFAULT_LANG: (
+        
+        (
+            (
+                ('/features.html', 'What is PyPy?'),
+                ('/compat.html', 'Compatibility'),
+                ('/performance.html', 'Performance'),
+            ),
+            'Features',
+        ),
+        ('/download.html', 'Download'),
+        ('http://doc.pypy.org', 'Dev Documentation'),
+        ('http://morepypy.blogspot.com', 'Blog'),
+        (
+            (
+                ('/people.html', 'People'),
+                ('/contact.html', 'Contact'),
+            ),
+            'About',
+        ),
+        #("/rss.xml", "RSS feed"),
+    ),
+}
+
+# Alternative navigation links. Works the same way NAVIGATION_LINKS does,
+# although themes may not always support them. (translatable)
+# (Bootstrap 4: right-side of navbar, Bootblog 4: right side of title)
+#
+# Not supported in the PyPy theme
+NAVIGATION_ALT_LINKS = {
+    DEFAULT_LANG: ()
+}
+
+# Name of the theme to use.
+THEME = 'pypy'
+
+# Primary color of your theme. This will be used to customize your theme.
+# Must be a HEX value.
+THEME_COLOR = '#5670d4'
+
+# Theme configuration. Fully theme-dependent. (translatable)
+# Examples below are for bootblog4.
+# bootblog4 supports: featured_large featured_small featured_on_mobile
+#                     featured_large_image_on_mobile featured_strip_html sidebar
+# bootstrap4 supports: navbar_light (defaults to False)
+THEME_CONFIG = {
+    DEFAULT_LANG: {
+        # Show the latest featured post in a large box, with the previewimage as its background.
+        'featured_large': False,
+        # Show the first (remaining) two featured posts in small boxes.
+        'featured_small': False,
+        # Show featured posts on mobile.
+        'featured_on_mobile': True,
+        # Show image in `featured_large` on mobile.
+        # `featured_small` displays them only on desktop.
+        'featured_large_image_on_mobile': True,
+        # Strip HTML from featured post text.
+        'featured_strip_html': False,
+        # Contents of the sidebar, If empty, the sidebar is not displayed.
+        'sidebar': ''
+    }
+}
+
+# POSTS and PAGES contains (wildcard, destination, template) tuples.
+# (translatable)
+#
+# The wildcard is used to generate a list of source files
+# (whatever/thing.rst, for example).
+#
+# That fragment could have an associated metadata file (whatever/thing.meta),
+# and optionally translated files (example for Spanish, with code "es"):
+#     whatever/thing.es.rst and whatever/thing.es.meta
+#
+#     This assumes you use the default TRANSLATIONS_PATTERN.
+#
+# From those files, a set of HTML fragment files will be generated:
+# cache/whatever/thing.html (and maybe cache/whatever/thing.html.es)
+#
+# These files are combined with the template to produce rendered
+# pages, which will be placed at
+# output/TRANSLATIONS[lang]/destination/pagename.html
+#
+# where "pagename" is the "slug" specified in the metadata file.
+# The page might also be placed in /destination/pagename/index.html
+# if PRETTY_URLS are enabled.
+#
+# The difference between POSTS and PAGES is that POSTS are added
+# to feeds, indexes, tag lists and archives and are considered part
+# of a blog, while PAGES are just independent HTML pages.
+#
+# Finally, note that destination can be translated, i.e. you can
+# specify a different translation folder per language. Example:
+#     PAGES = (
+#         ("pages/*.rst", {"en": "pages", "de": "seiten"}, "page.tmpl"),
+#         ("pages/*.md", {"en": "pages", "de": "seiten"}, "page.tmpl"),
+#     )
+
+POSTS = (
+    ("posts/*.txt", "posts", "post.tmpl"),
+    ("posts/*.rst", "posts", "post.tmpl"),
+    ("posts/*.md", "posts", "post.tmpl"),
+    ("posts/*.html", "posts", "post.tmpl"),
+)
+PAGES = (
+    ("pages/*.rst", "", "page.tmpl"),
+    ("pages/*.md", "", "page.tmpl"),
+    ("pages/*.txt", "", "page.tmpl"),
+    ("pages/*.html", "", "page.tmpl"),
+)
+
+
+# Below this point, everything is optional
+
+# Post's dates are considered in UTC by default, if you want to use
+# another time zone, please set TIMEZONE to match. Check the available
+# list from Wikipedia:
+# https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
+# (e.g. 'Europe/Zurich')
+# Also, if you want to use a different time zone in some of your posts,
+# you can use the ISO 8601/RFC 3339 format (ex. 2012-03-30T23:00:00+02:00)
+TIMEZONE = "UTC"
+
+# If you want to use ISO 8601 (also valid RFC 3339) throughout Nikola
+# (especially in new_post), set this to True.
+# Note that this does not affect DATE_FORMAT.
+# FORCE_ISO8601 = False
+
+# Date format used to display post dates. (translatable)
+# Used by babel.dates, CLDR style: http://cldr.unicode.org/translation/date-time
+# You can also use 'full', 'long', 'medium', or 'short'
+# DATE_FORMAT = 'YYYY-MM-dd HH:mm'
+
+# Date format used to display post dates, if local dates are used. (translatable)
+# Used by moment.js: https://momentjs.com/docs/#/displaying/format/
+# JS_DATE_FORMAT = 'YYYY-MM-DD HH:mm'
+
+# Date fanciness.
+#
+# 0 = using DATE_FORMAT and TIMEZONE
+# 1 = using JS_DATE_FORMAT and local user time (via moment.js)
+# 2 = using a string like “2 days ago”
+#
+# Your theme must support it, Bootstrap already does.
+# DATE_FANCINESS = 0
+
+# Customize the locale/region used for a language.
+# For example, to use British instead of US English: LOCALES = {'en': 'en_GB'}
+# LOCALES = {}
+
+# One or more folders containing files to be copied as-is into the output.
+# The format is a dictionary of {source: relative destination}.
+# Default is:
+# FILES_FOLDERS = {'files': ''}
+# Which means copy 'files' into 'output'
+
+# One or more folders containing code listings to be processed and published on
+# the site. The format is a dictionary of {source: relative destination}.
+# Default is:
+# LISTINGS_FOLDERS = {'listings': 'listings'}
+# Which means process listings from 'listings' into 'output/listings'
+
+# A mapping of languages to file-extensions that represent that language.
+# Feel free to add or delete extensions to any list, but don't add any new
+# compilers unless you write the interface for it yourself.
+#
+# The default compiler for `new_post` is the first entry in the POSTS tuple.
+#
+# 'rest' is reStructuredText
+# 'markdown' is Markdown
+# 'html' assumes the file is HTML and just copies it
+COMPILERS = {
+    "rest": ('.rst', '.txt'),
+    "markdown": ('.md', '.mdown', '.markdown'),
+    "textile": ('.textile',),
+    "txt2tags": ('.t2t',),
+    "bbcode": ('.bb',),
+    "wiki": ('.wiki',),
+    "ipynb": ('.ipynb',),
+    "html": ('.html', '.htm'),
+    # PHP files are rendered the usual way (i.e. with the full templates).
+    # The resulting files have .php extensions, making it possible to run
+    # them without reconfiguring your server to recognize them.
+    "php": ('.php',),
+    # Pandoc detects the input from the source filename
+    # but is disabled by default as it would conflict
+    # with many of the others.
+    # "pandoc": ('.rst', '.md', '.txt'),
+}
+
+# Enable reST directives that insert the contents of external files such
+# as "include" and "raw." This maps directly to the docutils file_insertion_enabled
+# config. See: http://docutils.sourceforge.net/docs/user/config.html#file-insertion-enabled
+# REST_FILE_INSERTION_ENABLED = True
+
+# Create by default posts in one file format?
+# Set to False for two-file posts, with separate metadata.
+# ONE_FILE_POSTS = True
+
+# Preferred metadata format for new posts
+# "Nikola": reST comments, wrapped in a HTML comment if needed (default)
+# "YAML": YAML wrapped in "---"
+# "TOML": TOML wrapped in "+++"
+# "Pelican": Native markdown metadata or reST docinfo fields. Nikola style for other formats.
+# METADATA_FORMAT = "Nikola"
+
+# Use date-based path when creating posts?
+# Can be enabled on a per-post basis with `nikola new_post -d`.
+# The setting is ignored when creating pages.
+# NEW_POST_DATE_PATH = False
+
+# What format to use when creating posts with date paths?
+# Default is '%Y/%m/%d', other possibilities include '%Y' or '%Y/%m'.
+# NEW_POST_DATE_PATH_FORMAT = '%Y/%m/%d'
+
+# If this is set to True, the DEFAULT_LANG version will be displayed for
+# untranslated posts.
+# If this is set to False, then posts that are not translated to a language
+# LANG will not be visible at all in the pages in that language.
+# SHOW_UNTRANSLATED_POSTS = True
+
+# Nikola supports logo display.  If you have one, you can put the URL here.
+# Final output is <img src="LOGO_URL" id="logo" alt="BLOG_TITLE">.
+# The URL may be relative to the site root.
+# LOGO_URL = ''
+
+# If you want to hide the title of your website (for example, if your logo
+# already contains the text), set this to False.
+# SHOW_BLOG_TITLE = True
+SHOW_BLOG_TITLE = False
+
+# Paths for different autogenerated bits. These are combined with the
+# translation paths.
+
+# Final locations are:
+# output / TRANSLATION[lang] / TAG_PATH / index.html (list of tags)
+# output / TRANSLATION[lang] / TAG_PATH / tag.html (list of posts for a tag)
+# output / TRANSLATION[lang] / TAG_PATH / tag RSS_EXTENSION (RSS feed for a tag)
+# (translatable)
+# TAG_PATH = "categories"
+
+# By default, the list of tags is stored in
+#     output / TRANSLATION[lang] / TAG_PATH / index.html
+# (see explanation for TAG_PATH). This location can be changed to
+#     output / TRANSLATION[lang] / TAGS_INDEX_PATH
+# with an arbitrary relative path TAGS_INDEX_PATH.
+# (translatable)
+# TAGS_INDEX_PATH = "tags.html"
+
+# If TAG_PAGES_ARE_INDEXES is set to True, each tag's page will contain
+# the posts themselves. If set to False, it will be just a list of links.
+# TAG_PAGES_ARE_INDEXES = False
+
+# Set descriptions for tag pages to make them more interesting. The
+# default is no description. The value is used in the meta description
+# and displayed underneath the tag list or index page’s title.
+# TAG_DESCRIPTIONS = {
+#    DEFAULT_LANG: {
+#        "blogging": "Meta-blog posts about blogging.",
+#        "open source": "My contributions to my many, varied, ever-changing, and eternal libre software projects."
+#    },
+# }
+
+# Set special titles for tag pages. The default is "Posts about TAG".
+# TAG_TITLES = {
+#    DEFAULT_LANG: {
+#        "blogging": "Meta-posts about blogging",
+#        "open source": "Posts about open source software"
+#    },
+# }
+
+# If you do not want to display a tag publicly, you can mark it as hidden.
+# The tag will not be displayed on the tag list page and posts.
+# Tag pages will still be generated.
+HIDDEN_TAGS = ['mathjax']
+
+# Only include tags on the tag list/overview page if there are at least
+# TAGLIST_MINIMUM_POSTS number of posts or more with every tag. Every tag
+# page is still generated, linked from posts, and included in the sitemap.
+# However, more obscure tags can be hidden from the tag index page.
+# TAGLIST_MINIMUM_POSTS = 1
+
+# A list of dictionaries specifying tags which translate to each other.
+# Format: a list of dicts {language: translation, language2: translation2, …}
+# For example:
+#   [
+#     {'en': 'private', 'de': 'Privat'},
+#     {'en': 'work', 'fr': 'travail', 'de': 'Arbeit'},
+#   ]
+# TAG_TRANSLATIONS = []
+
+# If set to True, a tag in a language will be treated as a translation
+# of the literally same tag in all other languages. Enable this if you
+# do not translate tags, for example.
+# TAG_TRANSLATIONS_ADD_DEFAULTS = True
+
+# Final locations are:
+# output / TRANSLATION[lang] / CATEGORY_PATH / index.html (list of categories)
+# output / TRANSLATION[lang] / CATEGORY_PATH / CATEGORY_PREFIX category.html (list of posts for a category)
+# output / TRANSLATION[lang] / CATEGORY_PATH / CATEGORY_PREFIX category RSS_EXTENSION (RSS feed for a category)
+# (translatable)
+# CATEGORY_PATH = "categories"
+# CATEGORY_PREFIX = "cat_"
+
+# By default, the list of categories is stored in
+#     output / TRANSLATION[lang] / CATEGORY_PATH / index.html
+# (see explanation for CATEGORY_PATH). This location can be changed to
+#     output / TRANSLATION[lang] / CATEGORIES_INDEX_PATH
+# with an arbitrary relative path CATEGORIES_INDEX_PATH.
+# (translatable)
+# CATEGORIES_INDEX_PATH = "categories.html"
+
+# If CATEGORY_ALLOW_HIERARCHIES is set to True, categories can be organized in
+# hierarchies. For a post, the whole path in the hierarchy must be specified,
+# using a forward slash ('/') to separate paths. Use a backslash ('\') to escape
+# a forward slash or a backslash (i.e. '\//\\' is a path specifying the
+# subcategory called '\' of the top-level category called '/').
+CATEGORY_ALLOW_HIERARCHIES = False
+# If CATEGORY_OUTPUT_FLAT_HIERARCHY is set to True, the output written to output
+# contains only the name of the leaf category and not the whole path.
+CATEGORY_OUTPUT_FLAT_HIERARCHY = False
+
+# If CATEGORY_PAGES_ARE_INDEXES is set to True, each category's page will contain
+# the posts themselves. If set to False, it will be just a list of links.
+# CATEGORY_PAGES_ARE_INDEXES = False
+
+# Set descriptions for category pages to make them more interesting. The
+# default is no description. The value is used in the meta description
+# and displayed underneath the category list or index page’s title.
+# CATEGORY_DESCRIPTIONS = {
+#    DEFAULT_LANG: {
+#        "blogging": "Meta-blog posts about blogging.",
+#        "open source": "My contributions to my many, varied, ever-changing, and eternal libre software projects."
+#    },
+# }
+
+# Set special titles for category pages. The default is "Posts about CATEGORY".
+# CATEGORY_TITLES = {
+#    DEFAULT_LANG: {
+#        "blogging": "Meta-posts about blogging",
+#        "open source": "Posts about open source software"
+#    },
+# }
+
+# If you do not want to display a category publicly, you can mark it as hidden.
+# The category will not be displayed on the category list page.
+# Category pages will still be generated.
+HIDDEN_CATEGORIES = []
+
+# A list of dictionaries specifying categories which translate to each other.
+# Format: a list of dicts {language: translation, language2: translation2, …}
+# See TAG_TRANSLATIONS example above.
+# CATEGORY_TRANSLATIONS = []
+
+# If set to True, a category in a language will be treated as a translation
+# of the literally same category in all other languages. Enable this if you
+# do not translate categories, for example.
+# CATEGORY_TRANSLATIONS_ADD_DEFAULTS = True
+
+# If no category is specified in a post, the destination path of the post
+# can be used in its place. This replaces the sections feature. Using
+# category hierarchies is recommended.
+# CATEGORY_DESTPATH_AS_DEFAULT = False
+
+# If True, the prefix will be trimmed from the category name, eg. if the
+# POSTS destination is "foo/bar", and the path is "foo/bar/baz/quux",
+# the category will be "baz/quux" (or "baz" if only the first directory is considered).
+# Note that prefixes coming from translations are always ignored.
+# CATEGORY_DESTPATH_TRIM_PREFIX = False
+
+# If True, only the first directory of a path will be used.
+# CATEGORY_DESTPATH_FIRST_DIRECTORY_ONLY = True
+
+# Map paths to prettier category names. (translatable)
+# CATEGORY_DESTPATH_NAMES = {
+#    DEFAULT_LANG: {
+#        'webdev': 'Web Development',
+#        'webdev/django': 'Web Development/Django',
+#        'random': 'Odds and Ends',
+#    },
+# }
+
+# By default, category indexes will appear in CATEGORY_PATH and use
+# CATEGORY_PREFIX. If this is enabled, those settings will be ignored (except
+# for the index) and instead, they will follow destination paths (eg. category
+# 'foo' might appear in 'posts/foo'). If the category does not come from a
+# destpath, first entry in POSTS followed by the category name will be used.
+# For this setting, category hierarchies are required and cannot be flattened.
+# CATEGORY_PAGES_FOLLOW_DESTPATH = False
+
+# If ENABLE_AUTHOR_PAGES is set to True and there is more than one
+# author, author pages are generated.
+# ENABLE_AUTHOR_PAGES = True
+
+# Path to author pages. Final locations are:
+# output / TRANSLATION[lang] / AUTHOR_PATH / index.html (list of authors)
+# output / TRANSLATION[lang] / AUTHOR_PATH / author.html (list of posts by an author)
+# output / TRANSLATION[lang] / AUTHOR_PATH / author RSS_EXTENSION (RSS feed for an author)
+# (translatable)
+# AUTHOR_PATH = "authors"
+
+# If AUTHOR_PAGES_ARE_INDEXES is set to True, each author's page will contain
+# the posts themselves. If set to False, it will be just a list of links.
+# AUTHOR_PAGES_ARE_INDEXES = False
+
+# Set descriptions for author pages to make them more interesting. The
+# default is no description. The value is used in the meta description
+# and displayed underneath the author list or index page’s title.
+# AUTHOR_PAGES_DESCRIPTIONS = {
+#    DEFAULT_LANG: {
+#        "Juanjo Conti": "Python coder and writer.",
+#        "Roberto Alsina": "Nikola father."
+#    },
+# }
+
+
+# If you do not want to display an author publicly, you can mark it as hidden.
+# The author will not be displayed on the author list page and posts.
+# Tag pages will still be generated.
+HIDDEN_AUTHORS = ['Guest']
+
+# Final location for the main blog page and sibling paginated pages is
+# output / TRANSLATION[lang] / INDEX_PATH / index-*.html
+# (translatable)
+INDEX_PATH = "blog"
+
+# Optional HTML that displayed on “main” blog index.html files.
+# May be used for a greeting. (translatable)
+FRONT_INDEX_HEADER = {
+    DEFAULT_LANG: ''
+}
+
+# Create per-month archives instead of per-year
+# CREATE_MONTHLY_ARCHIVE = False
+# Create one large archive instead of per-year
+# CREATE_SINGLE_ARCHIVE = False
+# Create year, month, and day archives each with a (long) list of posts
+# (overrides both CREATE_MONTHLY_ARCHIVE and CREATE_SINGLE_ARCHIVE)
+# CREATE_FULL_ARCHIVES = False
+# If monthly archives or full archives are created, adds also one archive per day
+# CREATE_DAILY_ARCHIVE = False
+# Create previous, up, next navigation links for archives
+# CREATE_ARCHIVE_NAVIGATION = False
+# Final locations for the archives are:
+# output / TRANSLATION[lang] / ARCHIVE_PATH / ARCHIVE_FILENAME
+# output / TRANSLATION[lang] / ARCHIVE_PATH / YEAR / index.html
+# output / TRANSLATION[lang] / ARCHIVE_PATH / YEAR / MONTH / index.html
+# output / TRANSLATION[lang] / ARCHIVE_PATH / YEAR / MONTH / DAY / index.html
+# (translatable)
+# ARCHIVE_PATH = ""
+# ARCHIVE_FILENAME = "archive.html"
+
+# If ARCHIVES_ARE_INDEXES is set to True, each archive page which contains a list
+# of posts will contain the posts themselves. If set to False, it will be just a
+# list of links.
+# ARCHIVES_ARE_INDEXES = False
+
+# URLs to other posts/pages can take 3 forms:
+# rel_path: a relative URL to the current page/post (default)
+# full_path: a URL with the full path from the root
+# absolute: a complete URL (that includes the SITE_URL)
+# URL_TYPE = 'rel_path'
+
+# Extension for RSS feed files
+# RSS_EXTENSION = ".xml"
+
+# RSS filename base (without extension); used for indexes and galleries.
+# (translatable)
+# RSS_FILENAME_BASE = "rss"
+
+# Final location for the blog main RSS feed is:
+# output / TRANSLATION[lang] / RSS_PATH / RSS_FILENAME_BASE RSS_EXTENSION
+# (translatable)
+# RSS_PATH = ""
+
+# Final location for the blog main Atom feed is:
+# output / TRANSLATION[lang] / ATOM_PATH / ATOM_FILENAME_BASE ATOM_EXTENSION
+# (translatable)
+# ATOM_PATH = ""
+
+# Atom filename base (without extension); used for indexes.
+# (translatable)
+ATOM_FILENAME_BASE = "feed"
+
+# Extension for Atom feed files
+# ATOM_EXTENSION = ".atom"
+
+# Slug the Tag URL. Easier for users to type, special characters are
+# often removed or replaced as well.
+# SLUG_TAG_PATH = True
+
+# Slug the Author URL. Easier for users to type, special characters are
+# often removed or replaced as well.
+# SLUG_AUTHOR_PATH = True
+
+# A list of redirection tuples, [("foo/from.html", "/bar/to.html")].
+#
+# A HTML file will be created in output/foo/from.html that redirects
+# to the "/bar/to.html" URL. notice that the "from" side MUST be a
+# relative URL.
+#
+# If you don't need any of these, just set to []
+REDIRECTIONS = []
+
+# Presets of commands to execute to deploy. Can be anything, for
+# example, you may use rsync:
+# "rsync -rav --delete output/ joe at my.site:/srv/www/site"
+# And then do a backup, or run `nikola ping` from the `ping`
+# plugin (`nikola plugin -i ping`).  Or run `nikola check -l`.
+# You may also want to use github_deploy (see below).
+# You can define multiple presets and specify them as arguments
+# to `nikola deploy`.  If no arguments are specified, a preset
+# named `default` will be executed.  You can use as many presets
+# in a `nikola deploy` command as you like.
+# DEPLOY_COMMANDS = {
+#     'default': [
+#         "rsync -rav --delete output/ joe at my.site:/srv/www/site",
+#     ]
+# }
+
+# github_deploy configuration
+# For more details, read the manual:
+# https://getnikola.com/handbook.html#deploying-to-github
+# You will need to configure the deployment branch on GitHub.
+GITHUB_SOURCE_BRANCH = 'src'
+GITHUB_DEPLOY_BRANCH = 'master'
+
+# The name of the remote where you wish to push to, using github_deploy.
+GITHUB_REMOTE_NAME = 'origin'
+
+# Whether or not github_deploy should commit to the source branch automatically
+# before deploying.
+GITHUB_COMMIT_SOURCE = True
+
+# Where the output site should be located
+# If you don't use an absolute path, it will be considered as relative
+# to the location of conf.py
+# OUTPUT_FOLDER = 'output'
+OUTPUT_FOLDER = 'public'
+
+# where the "cache" of partial generated content should be located
+# default: 'cache'
+# CACHE_FOLDER = 'cache'
+
+# Filters to apply to the output.
+# A directory where the keys are either: a file extensions, or
+# a tuple of file extensions.
+#
+# And the value is a list of commands to be applied in order.
+#
+# Each command must be either:
+#
+# A string containing a '%s' which will
+# be replaced with a filename. The command *must* produce output
+# in place.
+#
+# Or:
+#
+# A python callable, which will be called with the filename as
+# argument.
+#
+# By default, only .php files uses filters to inject PHP into
+# Nikola’s templates. All other filters must be enabled through FILTERS.
+#
+# Many filters are shipped with Nikola. A list is available in the manual:
+# <https://getnikola.com/handbook.html#post-processing-filters>
+#
+# from nikola import filters
+# FILTERS = {
+#    ".html": [filters.typogrify],
+#    ".js": [filters.closure_compiler],
+#    ".jpg": ["jpegoptim --strip-all -m75 -v %s"],
+# }
+
+# Executable for the "yui_compressor" filter (defaults to 'yui-compressor').
+# YUI_COMPRESSOR_EXECUTABLE = 'yui-compressor'
+
+# Executable for the "closure_compiler" filter (defaults to 'closure-compiler').
+# CLOSURE_COMPILER_EXECUTABLE = 'closure-compiler'
+
+# Executable for the "optipng" filter (defaults to 'optipng').
+# OPTIPNG_EXECUTABLE = 'optipng'
+
+# Executable for the "jpegoptim" filter (defaults to 'jpegoptim').
+# JPEGOPTIM_EXECUTABLE = 'jpegoptim'
+
+# Executable for the "html_tidy_withconfig", "html_tidy_nowrap",
+# "html_tidy_wrap", "html_tidy_wrap_attr" and "html_tidy_mini" filters
+# (defaults to 'tidy5').
+# HTML_TIDY_EXECUTABLE = 'tidy5'
+
+# List of XPath expressions which should be used for finding headers
+# ({hx} is replaced by headers h1 through h6).
+# You must change this if you use a custom theme that does not use
+# "e-content entry-content" as a class for post and page contents.
+# HEADER_PERMALINKS_XPATH_LIST = ['*//div[@class="e-content entry-content"]//{hx}']
+# Include *every* header (not recommended):
+# HEADER_PERMALINKS_XPATH_LIST = ['*//{hx}']
+
+# File blacklist for header permalinks. Contains output path
+# (eg. 'output/index.html')
+# HEADER_PERMALINKS_FILE_BLACKLIST = []
+
+# Expert setting! Create a gzipped copy of each generated file. Cheap server-
+# side optimization for very high traffic sites or low memory servers.
+# GZIP_FILES = False
+# File extensions that will be compressed
+# GZIP_EXTENSIONS = ('.txt', '.htm', '.html', '.css', '.js', '.json', '.atom', '.xml')
+# Use an external gzip command? None means no.
+# Example: GZIP_COMMAND = "pigz -k {filename}"
+# GZIP_COMMAND = None
+# Make sure the server does not return a "Accept-Ranges: bytes" header for
+# files compressed by this option! OR make sure that a ranged request does not
+# return partial content of another representation for these resources. Do not
+# use this feature if you do not understand what this means.
+
+# #############################################################################
+# Image Gallery Options
+# #############################################################################
+
+# One or more folders containing galleries. The format is a dictionary of
+# {"source": "relative_destination"}, where galleries are looked for in
+# "source/" and the results will be located in
+# "OUTPUT_PATH/relative_destination/gallery_name"
+# Default is:
+# GALLERY_FOLDERS = {"galleries": "galleries"}
+GALLERY_FOLDERS = {}
+# More gallery options:
+# THUMBNAIL_SIZE = 180
+# MAX_IMAGE_SIZE = 1280
+# USE_FILENAME_AS_TITLE = True
+# EXTRA_IMAGE_EXTENSIONS = []
+#
+# If set to False, it will sort by filename instead. Defaults to True
+# GALLERY_SORT_BY_DATE = True
+
+# If set to True, EXIF data will be copied when an image is thumbnailed or
+# resized. (See also EXIF_WHITELIST)
+# PRESERVE_EXIF_DATA = False
+
+# If you have enabled PRESERVE_EXIF_DATA, this option lets you choose EXIF
+# fields you want to keep in images. (See also PRESERVE_EXIF_DATA)
+#
+# For a full list of field names, please see here:
+# http://www.cipa.jp/std/documents/e/DC-008-2012_E.pdf
+#
+# This is a dictionary of lists. Each key in the dictionary is the
+# name of a IDF, and each list item is a field you want to preserve.
+# If you have a IDF with only a '*' item, *EVERY* item in it will be
+# preserved. If you don't want to preserve anything in a IDF, remove it
+# from the setting. By default, no EXIF information is kept.
+# Setting the whitelist to anything other than {} implies
+# PRESERVE_EXIF_DATA is set to True
+# To preserve ALL EXIF data, set EXIF_WHITELIST to {"*": "*"}
+
+# EXIF_WHITELIST = {}
+
+# Some examples of EXIF_WHITELIST settings:
+
+# Basic image information:
+# EXIF_WHITELIST['0th'] = [
+#    "Orientation",
+#    "XResolution",
+#    "YResolution",
+# ]
+
+# If you want to keep GPS data in the images:
+# EXIF_WHITELIST['GPS'] = ["*"]
+
+# Embedded thumbnail information:
+# EXIF_WHITELIST['1st'] = ["*"]
+
+# If set to True, any ICC profile will be copied when an image is thumbnailed or
+# resized.
+# PRESERVE_ICC_PROFILES = False
+
+# Folders containing images to be used in normal posts or pages.
+# IMAGE_FOLDERS is a dictionary of the form {"source": "destination"},
+# where "source" is the folder containing the images to be published, and
+# "destination" is the folder under OUTPUT_PATH containing the images copied
+# to the site. Thumbnail images will be created there as well.
+
+# To reference the images in your posts, include a leading slash in the path.
+# For example, if IMAGE_FOLDERS = {'images': 'images'}, write
+#
+#   .. image:: /images/tesla.jpg
+#
+# See the Nikola Handbook for details (in the “Embedding Images” and
+# “Thumbnails” sections)
+
+# Images will be scaled down according to IMAGE_THUMBNAIL_SIZE and MAX_IMAGE_SIZE
+# options, but will have to be referenced manually to be visible on the site
+# (the thumbnail has ``.thumbnail`` added before the file extension by default,
+# but a different naming template can be configured with IMAGE_THUMBNAIL_FORMAT).
+
+IMAGE_FOLDERS = {'image': 'images'}
+# IMAGE_THUMBNAIL_SIZE = 400
+# IMAGE_THUMBNAIL_FORMAT = '{name}.thumbnail{ext}'
+
+# #############################################################################
+# HTML fragments and diverse things that are used by the templates
+# #############################################################################
+
+# Data about post-per-page indexes.
+# INDEXES_PAGES defaults to ' old posts, page %d' or ' page %d' (translated),
+# depending on the value of INDEXES_PAGES_MAIN.
+#
+# (translatable) If the following is empty, defaults to BLOG_TITLE:
+# INDEXES_TITLE = ""
+#
+# (translatable) If the following is empty, defaults to ' [old posts,] page %d' (see above):
+# INDEXES_PAGES = ""
+#
+# If the following is True, INDEXES_PAGES is also displayed on the main (the
+# newest) index page (index.html):
+# INDEXES_PAGES_MAIN = False
+#
+# If the following is True, index-1.html has the oldest posts, index-2.html the
+# second-oldest posts, etc., and index.html has the newest posts. This ensures
+# that all posts on index-x.html will forever stay on that page, now matter how
+# many new posts are added.
+# If False, index-1.html has the second-newest posts, index-2.html the third-newest,
+# and index-n.html the oldest posts. When this is active, old posts can be moved
+# to other index pages when new posts are added.
+# INDEXES_STATIC = True
+#
+# (translatable) If PRETTY_URLS is set to True, this setting will be used to create
+# prettier URLs for index pages, such as page/2/index.html instead of index-2.html.
+# Valid values for this settings are:
+#   * False,
+#   * a list or tuple, specifying the path to be generated,
+#   * a dictionary mapping languages to lists or tuples.
+# Every list or tuple must consist of strings which are used to combine the path;
+# for example:
+#     ['page', '{number}', '{index_file}']
+# The replacements
+#     {number}     --> (logical) page number;
+#     {old_number} --> the page number inserted into index-n.html before (zero for
+#                      the main page);
+#     {index_file} --> value of option INDEX_FILE
+# are made.
+# Note that in case INDEXES_PAGES_MAIN is set to True, a redirection will be created
+# for the full URL with the page number of the main page to the normal (shorter) main
+# page URL.
+# INDEXES_PRETTY_PAGE_URL = False
+#
+# If the following is true, a page range navigation will be inserted to indices.
+# Please note that this will undo the effect of INDEXES_STATIC, as all index pages
+# must be recreated whenever the number of pages changes.
+# SHOW_INDEX_PAGE_NAVIGATION = False
+
+# If the following is True, a meta name="generator" tag is added to pages. The
+# generator tag is used to specify the software used to generate the page
+# (it promotes Nikola).
+# META_GENERATOR_TAG = True
+
+# Color scheme to be used for code blocks. If your theme provides
+# "assets/css/code.css" this is ignored. Set to None to disable.
+# Can be any of:
+# algol, algol_nu, autumn, borland, bw, colorful, default, emacs, friendly,
+# fruity, igor, lovelace, manni, monokai, murphy, native, paraiso-dark,
+# paraiso-light, pastie, perldoc, rrt, tango, trac, vim, vs, xcode
+# This list MAY be incomplete since pygments adds styles every now and then.
+# Check with list(pygments.styles.get_all_styles()) in an interpreter.
+#
+# CODE_COLOR_SCHEME = 'default'
+
+# FAVICONS contains (name, file, size) tuples.
+# Used to create favicon link like this:
+# <link rel="name" href="file" sizes="size"/>
+FAVICONS = (
+     ("icon", "/favicon2.ico", "16x16"),
+     ("icon", "/favicon32x32.ico", "32x32"),
+)
+
+# Show teasers (instead of full posts) in indexes? Defaults to False.
+# INDEX_TEASERS = False
+
+# HTML fragments with the Read more... links.
+# The following tags exist and are replaced for you:
+# {link}                        A link to the full post page.
+# {read_more}                   The string “Read more” in the current language.
+# {reading_time}                An estimate of how long it will take to read the post.
+# {remaining_reading_time}      An estimate of how long it will take to read the post, sans the teaser.
+# {min_remaining_read}          The string “{remaining_reading_time} min remaining to read” in the current language.
+# {paragraph_count}             The amount of paragraphs in the post.
+# {remaining_paragraph_count}   The amount of paragraphs in the post, sans the teaser.
+# {post_title}                  The title of the post.
+# {{                            A literal { (U+007B LEFT CURLY BRACKET)
+# }}                            A literal } (U+007D RIGHT CURLY BRACKET)
+
+# 'Read more...' for the index page, if INDEX_TEASERS is True (translatable)
+INDEX_READ_MORE_LINK = '<p class="more"><a href="{link}">{read_more}…</a></p>'
+# 'Read more...' for the feeds, if FEED_TEASERS is True (translatable)
+FEED_READ_MORE_LINK = '<p><a href="{link}">{read_more}…</a> ({min_remaining_read})</p>'
+
+# Append a URL query to the FEED_READ_MORE_LINK in Atom and RSS feeds. Advanced
+# option used for traffic source tracking.
+# Minimum example for use with Piwik: "pk_campaign=feed"
+# The following tags exist and are replaced for you:
+# {feedRelUri}                  A relative link to the feed.
+# {feedFormat}                  The name of the syndication format.
+# Example using replacement for use with Google Analytics:
+# "utm_source={feedRelUri}&utm_medium=nikola_feed&utm_campaign={feedFormat}_feed"
+FEED_LINKS_APPEND_QUERY = False
+
+# A HTML fragment describing the license, for the sidebar.
+# (translatable)
+LICENSE = ""
+# I recommend using the Creative Commons' wizard:
+# https://creativecommons.org/choose/
+# LICENSE = """
+# <a rel="license" href="https://creativecommons.org/licenses/by-nc-sa/4.0/">
+# <img alt="Creative Commons License BY-NC-SA"
+# style="border-width:0; margin-bottom:12px;"
+# src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png"></a>"""
+
+# A small copyright notice for the page footer (in HTML).
+# (translatable)
+CONTENT_FOOTER = """
+<div class="myfooter">
+  <div>
+    <img src="images/pypy-logo-nav-grey.png" alt="PyPy Logo" />
+  </div>
+  <div class=logotext>
+     Contents © {date} <a href="mailto:{email}">{author}</a>
+    Powered by <a href="https://getnikola.com" rel="nofollow">Nikola</a> {license}
+  </div>
+</div>
+"""
+
+# Things that will be passed to CONTENT_FOOTER.format().  This is done
+# for translatability, as dicts are not formattable.  Nikola will
+# intelligently format the setting properly.
+# The setting takes a dict. The keys are languages. The values are
+# tuples of tuples of positional arguments and dicts of keyword arguments
+# to format().  For example, {'en': (('Hello'), {'target': 'World'})}
+# results in CONTENT_FOOTER['en'].format('Hello', target='World').
+# If you need to use the literal braces '{' and '}' in your footer text, use
+# '{{' and '}}' to escape them (str.format is used)
+# WARNING: If you do not use multiple languages with CONTENT_FOOTER, this
+#          still needs to be a dict of this format.  (it can be empty if you
+#          do not need formatting)
+# (translatable)
+CONTENT_FOOTER_FORMATS = {
+    DEFAULT_LANG: (
+        (),
+        {
+            "email": BLOG_EMAIL,
+            "author": BLOG_AUTHOR,
+            "date": time.gmtime().tm_year,
+            "license": LICENSE
+        }
+    )
+}
+
+# A simple copyright tag for inclusion in RSS feeds that works just
+# like CONTENT_FOOTER and CONTENT_FOOTER_FORMATS
+RSS_COPYRIGHT = 'Contents © {date} <a href="mailto:{email}">{author}</a> {license}'
+RSS_COPYRIGHT_PLAIN = 'Contents © {date} {author} {license}'
+RSS_COPYRIGHT_FORMATS = CONTENT_FOOTER_FORMATS
+
+# To use comments, you can choose between different third party comment
+# systems.  The following comment systems are supported by Nikola:
+#   disqus, facebook, intensedebate, isso, muut, commento
+# You can leave this option blank to disable comments.
+COMMENT_SYSTEM = ""
+# And you also need to add your COMMENT_SYSTEM_ID which
+# depends on what comment system you use. The default is
+# "nikolademo" which is a test account for Disqus. More information
+# is in the manual.
+COMMENT_SYSTEM_ID = ""
+
+# Create index.html for page folders?
+# WARNING: if a page would conflict with the index file (usually
+#          caused by setting slug to `index`), the PAGE_INDEX
+#          will not be generated for that directory.
+# PAGE_INDEX = False
+# Enable comments on pages (i.e. not posts)?
+# COMMENTS_IN_PAGES = False
+# Enable comments on picture gallery pages?
+# COMMENTS_IN_GALLERIES = False
+
+# What file should be used for directory indexes?
+# Defaults to index.html
+# Common other alternatives: default.html for IIS, index.php
+# INDEX_FILE = "index.html"
+
+# If a link ends in /index.html,  drop the index.html part.
+# http://mysite/foo/bar/index.html => http://mysite/foo/bar/
+# (Uses the INDEX_FILE setting, so if that is, say, default.html,
+# it will instead /foo/default.html => /foo)
+STRIP_INDEXES = True
+
+# List of files relative to the server root (!) that will be asked to be excluded
+# from indexing and other robotic spidering. * is supported. Will only be effective
+# if SITE_URL points to server root. The list is used to exclude resources from
+# /robots.txt and /sitemap.xml, and to inform search engines about /sitemapindex.xml.
+# ROBOTS_EXCLUSIONS = ["/archive.html", "/category/*.html"]
+
+# Instead of putting files in <slug>.html, put them in <slug>/index.html.
+# No web server configuration is required. Also enables STRIP_INDEXES.
+# This can be disabled on a per-page/post basis by adding
+#    .. pretty_url: False
+# to the metadata.
+#PRETTY_URLS = False
+PRETTY_URLS = False
+
+# If True, publish future dated posts right away instead of scheduling them.
+# Defaults to False.
+# FUTURE_IS_NOW = False
+
+# If True, future dated posts are allowed in deployed output
+# Only the individual posts are published/deployed; not in indexes/sitemap
+# Generally, you want FUTURE_IS_NOW and DEPLOY_FUTURE to be the same value.
+# DEPLOY_FUTURE = False
+# If False, draft posts will not be deployed
+# DEPLOY_DRAFTS = True
+
+# Allows scheduling of posts using the rule specified here (new_post -s)
+# Specify an iCal Recurrence Rule: http://www.kanzaki.com/docs/ical/rrule.html
+# SCHEDULE_RULE = ''
+# If True, use the scheduling rule to all posts (not pages!) by default
+# SCHEDULE_ALL = False
+
+# Do you want a add a Mathjax config file?
+# MATHJAX_CONFIG = ""
+
+# If you want support for the $.$ syntax (which may conflict with running
+# text!), just use this config:
+# MATHJAX_CONFIG = """
+# <script type="text/x-mathjax-config">
+# MathJax.Hub.Config({
+#     tex2jax: {
+#         inlineMath: [ ['$','$'], ["\\\(","\\\)"] ],
+#         displayMath: [ ['$$','$$'], ["\\\[","\\\]"] ],
+#         processEscapes: true
+#     },
+#     displayAlign: 'center', // Change this to 'left' if you want left-aligned equations.
+#     "HTML-CSS": {
+#         styles: {'.MathJax_Display': {"margin": 0}}
+#     }
+# });
+# </script>
+# """
+
+# Want to use KaTeX instead of MathJax? While KaTeX may not support every
+# feature yet, it's faster and the output looks better.
+# USE_KATEX = False
+
+# KaTeX auto-render settings. If you want support for the $.$ syntax (which may
+# conflict with running text!), just use this config:
+# KATEX_AUTO_RENDER = """
+# delimiters: [
+#     {left: "$$", right: "$$", display: true},
+#     {left: "\\\\[", right: "\\\\]", display: true},
+#     {left: "\\\\begin{equation*}", right: "\\\\end{equation*}", display: true},
+#     {left: "$", right: "$", display: false},
+#     {left: "\\\\(", right: "\\\\)", display: false}
+# ]
+# """
+
+# Do you want to customize the nbconversion of your IPython notebook?
+# IPYNB_CONFIG = {}
+# With the following example configuration you can use a custom jinja template
+# called `toggle.tpl` which has to be located in your site/blog main folder:
+# IPYNB_CONFIG = {'Exporter': {'template_file': 'toggle'}}
+
+# What Markdown extensions to enable?
+# You will also get gist, nikola and podcast because those are
+# done in the code, hope you don't mind ;-)
+# Note: most Nikola-specific extensions are done via the Nikola plugin system,
+#       with the MarkdownExtension class and should not be added here.
+# Defaults are markdown.extensions.(fenced_code|codehilite|extra)
+# markdown.extensions.meta is required for Markdown metadata.
+MARKDOWN_EXTENSIONS = ['markdown.extensions.fenced_code', 'markdown.extensions.codehilite', 'markdown.extensions.extra']
+
+# Options to be passed to markdown extensions (See https://python-markdown.github.io/reference/)
+# Default is {} (no config at all)
+# MARKDOWN_EXTENSION_CONFIGS = {}
+
+
+# Extra options to pass to the pandoc command.
+# by default, it's empty, is a list of strings, for example
+# ['-F', 'pandoc-citeproc', '--bibliography=/Users/foo/references.bib']
+# Pandoc does not demote headers by default.  To enable this, you can use, for example
+# ['--base-header-level=2']
+# PANDOC_OPTIONS = []
+
+# Social buttons. This is sample code for AddThis (which was the default for a
+# long time). Insert anything you want here, or even make it empty (which is
+# the default right now)
+# (translatable)
+# SOCIAL_BUTTONS_CODE = """
+# <!-- Social buttons -->
+# <div id="addthisbox" class="addthis_toolbox addthis_peekaboo_style addthis_default_style addthis_label_style addthis_32x32_style">
+# <a class="addthis_button_more">Share</a>
+# <ul><li><a class="addthis_button_facebook"></a>
+# <li><a class="addthis_button_google_plusone_share"></a>
+# <li><a class="addthis_button_linkedin"></a>
+# <li><a class="addthis_button_twitter"></a>
+# </ul>
+# </div>
+# <script src="https://s7.addthis.com/js/300/addthis_widget.js#pubid=ra-4f7088a56bb93798"></script>
+# <!-- End of social buttons -->
+# """
+
+# Show link to source for the posts?
+# SHOW_SOURCELINK = True
+# Copy the source files for your pages?
+# Setting it to False implies SHOW_SOURCELINK = False
+# COPY_SOURCES = True
+
+# Modify the number of Post per Index Page
+# Defaults to 10
+# INDEX_DISPLAY_POST_COUNT = 10
+
+# By default, Nikola generates RSS files for the website and for tags, and
+# links to it.  Set this to False to disable everything RSS-related.
+# GENERATE_RSS = True
+
+# By default, Nikola does not generates Atom files for indexes and links to
+# them. Generate Atom for tags by setting TAG_PAGES_ARE_INDEXES to True.
+# Atom feeds are built based on INDEX_DISPLAY_POST_COUNT and not FEED_LENGTH
+# Switch between plain-text summaries and full HTML content using the
+# FEED_TEASER option. FEED_LINKS_APPEND_QUERY is also respected. Atom feeds
+# are generated even for old indexes and have pagination link relations
+# between each other. Old Atom feeds with no changes are marked as archived.
+# GENERATE_ATOM = False
+
+# Only include teasers in Atom and RSS feeds. Disabling include the full
+# content. Defaults to True.
+# FEED_TEASERS = True
+
+# Strip HTML from Atom and RSS feed summaries and content. Defaults to False.
+# FEED_PLAIN = False
+
+# Number of posts in Atom and RSS feeds.
+# FEED_LENGTH = 10
+
+# RSS_LINK is a HTML fragment to link the RSS or Atom feeds. If set to None,
+# the base.tmpl will use the feed Nikola generates. However, you may want to
+# change it for a FeedBurner feed or something else.
+# RSS_LINK = None
+
+# A search form to search this site, for the sidebar. You can use a Google
+# custom search (https://www.google.com/cse/)
+# Or a DuckDuckGo search: https://duckduckgo.com/search_box.html
+# Default is no search form.
+# (translatable)
+# SEARCH_FORM = ""
+#
+# This search form works for any site and looks good in the "site" theme where
+# it appears on the navigation bar:
+#
+# SEARCH_FORM = """
+# <!-- DuckDuckGo custom search -->
+# <form method="get" id="search" action="https://duckduckgo.com/"
+#  class="navbar-form pull-left">
+# <input type="hidden" name="sites" value="%s">
+# <input type="hidden" name="k8" value="#444444">
+# <input type="hidden" name="k9" value="#D51920">
+# <input type="hidden" name="kt" value="h">
+# <input type="text" name="q" maxlength="255"
+#  placeholder="Search…" class="span2" style="margin-top: 4px;">
+# <input type="submit" value="DuckDuckGo Search" style="visibility: hidden;">
+# </form>
+# <!-- End of custom search -->
+# """ % SITE_URL
+#
+# If you prefer a Google search form, here's an example that should just work:
+# SEARCH_FORM = """
+# <!-- Google custom search -->
+# <form method="get" action="https://www.google.com/search" class="navbar-form navbar-right" role="search">
+# <div class="form-group">
+# <input type="text" name="q" class="form-control" placeholder="Search">
+# </div>
+# <button type="submit" class="btn btn-primary">
+# 	<span class="glyphicon glyphicon-search"></span>
+# </button>
+# <input type="hidden" name="sitesearch" value="%s">
+# </form>
+# <!-- End of custom search -->
+# """ % SITE_URL
+
+# Use content distribution networks for jQuery, twitter-bootstrap css and js,
+# and html5shiv (for older versions of Internet Explorer)
+# If this is True, jQuery and html5shiv are served from the Google CDN and
+# Bootstrap is served from BootstrapCDN (provided by MaxCDN)
+# Set this to False if you want to host your site without requiring access to
+# external resources.
+# USE_CDN = False
+
+# Check for USE_CDN compatibility.
+# If you are using custom themes, have configured the CSS properly and are
+# receiving warnings about incompatibility but believe they are incorrect, you
+# can set this to False.
+# USE_CDN_WARNING = True
+
+# Extra things you want in the pages HEAD tag. This will be added right
+# before </head>
+# (translatable)
+# EXTRA_HEAD_DATA = ""
+# Google Analytics or whatever else you use. Added to the bottom of <body>
+# in the default template (base.tmpl).
+# (translatable)
+# BODY_END = ""
+
+# The possibility to extract metadata from the filename by using a
+# regular expression.
+# To make it work you need to name parts of your regular expression.
+# The following names will be used to extract metadata:
+# - title
+# - slug
+# - date
+# - tags
+# - link
+# - description
+#
+# An example re is the following:
+# '.*\/(?P<date>\d{4}-\d{2}-\d{2})-(?P<slug>.*)-(?P<title>.*)\.rst'
+# (Note the '.*\/' in the beginning -- matches source paths relative to conf.py)
+# FILE_METADATA_REGEXP = None
+
+# Should titles fetched from file metadata be unslugified (made prettier?)
+# FILE_METADATA_UNSLUGIFY_TITLES = True
+
+# If enabled, extract metadata from docinfo fields in reST documents.
+# If your text files start with a level 1 heading, it will be treated as the
+# document title and will be removed from the text.
+# USE_REST_DOCINFO_METADATA = False
+
+# If enabled, hide docinfo fields in reST document output
+# HIDE_REST_DOCINFO = False
+
+# Map metadata from other formats to Nikola names.
+# Supported formats: yaml, toml, rest_docinfo, markdown_metadata
+# METADATA_MAPPING = {}
+#
+# Example for Pelican compatibility:
+# METADATA_MAPPING = {
+#     "rest_docinfo": {"summary": "description", "modified": "updated"},
+#     "markdown_metadata": {"summary": "description", "modified": "updated"}
+# }
+# Other examples: https://getnikola.com/handbook.html#mapping-metadata-from-other-formats
+
+# Map metadata between types/values. (Runs after METADATA_MAPPING.)
+# Supported formats: nikola, yaml, toml, rest_docinfo, markdown_metadata
+# The value on the right should be a dict of callables.
+# METADATA_VALUE_MAPPING = {}
+# Examples:
+# METADATA_VALUE_MAPPING = {
+#     "yaml": {"keywords": lambda value: ', '.join(value)},  # yaml: 'keywords' list -> str
+#     "nikola": {
+#         "widgets": lambda value: value.split(', '),  # nikola: 'widgets' comma-separated string -> list
+#         "tags": str.lower  # nikola: force lowercase 'tags' (input would be string)
+#      }
+# }
+
+# Additional metadata that is added to a post when creating a new_post
+# ADDITIONAL_METADATA = {}
+
+# Nikola supports Twitter Card summaries, but they are disabled by default.
+# They make it possible for you to attach media to Tweets that link
+# to your content.
+#
+# Uncomment and modify to following lines to match your accounts.
+# Images displayed come from the `previewimage` meta tag.
+# You can specify the card type by using the `card` parameter in TWITTER_CARD.
+# TWITTER_CARD = {
+#     # 'use_twitter_cards': True,  # enable Twitter Cards
+#     # 'card': 'summary',          # Card type, you can also use 'summary_large_image',
+#                                   # see https://dev.twitter.com/cards/types
+#     # 'site': '@website',         # twitter nick for the website
+#     # 'creator': '@username',     # Username for the content creator / author.
+# }
+
+# Bundle JS and CSS into single files to make site loading faster in a HTTP/1.1
+# environment but is not recommended for HTTP/2.0 when caching is used.
+# Defaults to True.
+# USE_BUNDLES = True
+USE_BUNDLES = False
+
+# Plugins you don't want to use. Be careful :-)
+# DISABLED_PLUGINS = ["render_galleries"]
+
+# Special settings to disable only parts of the indexes plugin.
+# Use with care.
+# DISABLE_INDEXES = False
+# DISABLE_MAIN_ATOM_FEED = False
+# DISABLE_MAIN_RSS_FEED = False
+
+# Add the absolute paths to directories containing plugins to use them.
+# For example, the `plugins` directory of your clone of the Nikola plugins
+# repository.
+# EXTRA_PLUGINS_DIRS = []
+
+# Add the absolute paths to directories containing themes to use them.
+# For example, the `v7` directory of your clone of the Nikola themes
+# repository.
+# EXTRA_THEMES_DIRS = []
+
+# List of regular expressions, links matching them will always be considered
+# valid by "nikola check -l"
+# LINK_CHECK_WHITELIST = []
+
+# If set to True, enable optional hyphenation in your posts (requires pyphen)
+# Enabling hyphenation has been shown to break math support in some cases,
+# use with caution.
+# HYPHENATE = False
+
+# The <hN> tags in HTML generated by certain compilers (reST/Markdown)
+# will be demoted by that much (1 → h1 will become h2 and so on)
+# This was a hidden feature of the Markdown and reST compilers in the
+# past.  Useful especially if your post titles are in <h1> tags too, for
+# example.
+# (defaults to 1.)
+# DEMOTE_HEADERS = 1
+
+# If you don’t like slugified file names ([a-z0-9] and a literal dash),
+# and would prefer to use all the characters your file system allows.
+# USE WITH CARE!  This is also not guaranteed to be perfect, and may
+# sometimes crash Nikola, your web server, or eat your cat.
+# USE_SLUGIFY = True
+
+# If set to True, the tags 'draft', 'mathjax' and 'private' have special
+# meaning. If set to False, these tags are handled like regular tags.
+USE_TAG_METADATA = False
+
+# If set to True, a warning is issued if one of the 'draft', 'mathjax'
+# and 'private' tags are found in a post. Useful for checking that
+# migration was successful.
+WARN_ABOUT_TAG_METADATA = False
+
+# Templates will use those filters, along with the defaults.
+# Consult your engine's documentation on filters if you need help defining
+# those.
+# TEMPLATE_FILTERS = {}
+
+# Put in global_context things you want available on all your templates.
+# It can be anything, data, functions, modules, etc.
+GLOBAL_CONTEXT = {}
+
+# Add functions here and they will be called with template
+# GLOBAL_CONTEXT as parameter when the template is about to be
+# rendered
+GLOBAL_CONTEXT_FILLER = []
diff --git a/files/favicon.ico b/files/favicon.ico
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..00cf381e7e01e4603affa3da5a27d99b17943bc0
GIT binary patch

[cut]

diff --git a/files/favicon2.ico b/files/favicon2.ico
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..8e5cc5a9e03ea82a00f1602329e014c635580911
GIT binary patch

[cut]

diff --git a/files/favicon32x32.ico b/files/favicon32x32.ico
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9e34b3f45ddaa0e318068a513ad43e4f5bb7d7fd
GIT binary patch

[cut]

diff --git a/image/pypy-logo-nav-grey.png b/image/pypy-logo-nav-grey.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0ac40afe49713efe05dd296a619862e5ee7f00cb
GIT binary patch

[cut]

diff --git a/image/pypy-logo-nav.png b/image/pypy-logo-nav.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a148179fdec1a217eea30534a8790214e8d3ad9e
GIT binary patch

[cut]

diff --git a/image/pypy-logo.svg b/image/pypy-logo.svg
new file mode 100644
--- /dev/null
+++ b/image/pypy-logo.svg
@@ -0,0 +1,220 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 23.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 361.4 170.8" style="enable-background:new 0 0 361.4 170.8;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#90A99C;}
+	.st1{fill:#D1DCC0;}
+	.st2{opacity:0.6;fill:url(#SVGID_1_);}
+	.st3{opacity:0.6;fill:url(#SVGID_2_);}
+	.st4{opacity:0.6;fill:url(#SVGID_3_);}
+	.st5{opacity:0.6;fill:url(#SVGID_4_);}
+	.st6{opacity:0.6;fill:url(#SVGID_5_);}
+	.st7{fill:#193440;}
+	.st8{opacity:0.6;fill:url(#SVGID_6_);}
+	.st9{fill:#3F616E;}
+	.st10{opacity:0.6;fill:url(#SVGID_7_);}
+	.st11{fill:#FFFFFF;}
+</style>
+<g>
+	<path class="st0" d="M83.5,3.3c-6.8,0-12.2,1.5-18.6,3l5.1,32.5c1,0.6,1.9,1.4,2.8,2.3c3.5-0.8,7.2-1.3,10.9-1.3
+		c2.1,0,4.1,0.1,6.1,0.4c-1.3-0.7-2.2-1.7-2.1-2.8c0.1-1.9,3.1-3.2,6.6-2.9c3.5,0.3,6.2,2,6.1,3.9c-0.1,1.6-2.2,2.7-4.9,2.9
+		c19.4,5,34,22.2,35,43c0.1,0.9,0.1,1.8,0.1,2.8l0,0c0,48-47.1,83.8-47.1,83.8s0,0,0,0c46.2,0,83.7-37.5,83.7-83.8
+		C167.3,40.8,129.8,3.3,83.5,3.3z M116.4,43.6c-0.7-0.7-1.3-1.3-2-1.8l3.2-0.6C117.2,42,116.8,42.8,116.4,43.6z"/>
+	<path class="st1" d="M83.8,3.3C37.5,3.3,0,40.8,0,87.1s37.5,83.8,83.8,83.8s83.8-37.5,83.8-83.8S130,3.3,83.8,3.3z M117.6,41.1
+		c-0.4,0.9-0.8,1.7-1.2,2.5c-0.7-0.7-1.3-1.3-2-1.8L117.6,41.1z M126.3,106.3c-0.2,0.4-0.4,0.9-0.6,1.3c-2.6,5.2-6.1,9.8-10.4,13.7
+		c-0.7,0.6-1.4,1.2-2.1,1.8c-1,0.8-2.1,1.6-3.2,2.4c-1.2,0.8-2.5,1.6-3.9,2.3c-6.6,3.6-14.2,5.7-22.3,5.7c-8.1,0-15.7-2-22.3-5.7
+		c-1.3-0.7-2.6-1.5-3.9-2.3c-1.1-0.8-2.2-1.6-3.2-2.4c-0.7-0.6-1.4-1.2-2.1-1.8c-0.6-0.5-1.1-1-1.6-1.6c-3.5-3.5-6.5-7.6-8.8-12.1
+		c-0.2-0.4-0.4-0.9-0.6-1.3c-2.8-6-4.3-12.6-4.3-19.7c0-12.9,5.2-24.6,13.7-33.1c0.5-0.5,1.1-1,1.6-1.6c1.7-1.5,3.4-2.9,5.3-4.2
+		c3.4-2.3,7.2-4.2,11.2-5.5c-0.6-0.6-1.2-1.2-1.9-1.7c-1.5-1-3.3-1.6-5.2-1.9c-1.9-0.4-3.9-0.4-5.9-0.3c-2,0.1-4,0.4-6,0.9
+		c1.9-0.8,3.8-1.5,5.9-1.9c2-0.5,4.1-0.8,6.3-0.8c2.1,0,4.4,0.3,6.5,1.2c1.7,0.7,3.2,1.9,4.5,3.3c3.5-0.8,7.2-1.3,11-1.3
+		c2.1,0,4.1,0.2,6.2,0.4c-1.4-0.7-2.2-1.7-2.1-2.8c0.1-1.9,3.1-3.2,6.6-2.9c3.5,0.3,6.2,2,6.1,3.9c-0.1,1.6-2.2,2.7-5,2.9
+		c5.2,1.3,10.1,3.5,14.4,6.5c12.5,8.4,20.7,22.7,20.7,38.8C130.6,93.6,129.1,100.3,126.3,106.3z"/>
+	<g>
+		<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="88.7372" y1="39.4964" x2="83.9239" y2="37.7445">
+			<stop  offset="0" style="stop-color:#FFFFFF"/>
+			<stop  offset="0.1884" style="stop-color:#FCFCFC"/>
+			<stop  offset="0.3217" style="stop-color:#F3F3F3"/>
+			<stop  offset="0.4381" style="stop-color:#E3E3E3"/>
+			<stop  offset="0.5447" style="stop-color:#CDCDCD"/>
+			<stop  offset="0.6448" style="stop-color:#B1B1B1"/>
+			<stop  offset="0.7399" style="stop-color:#8E8E8E"/>
+			<stop  offset="0.8311" style="stop-color:#646464"/>
+			<stop  offset="0.917" style="stop-color:#353535"/>
+			<stop  offset="1" style="stop-color:#000000"/>
+		</linearGradient>
+		<path class="st2" d="M86,38.3c-0.5,0.2-1,0.4-1.4,0.5c-0.4,0.1-0.8,0.2-1.2,0.4c1.8,0,3.6,0.1,5.4,0.2c-0.6-0.6-1-1.3-1-1.9
+			c-0.1,0.1-0.2,0.1-0.3,0.2C87,37.9,86.5,38.1,86,38.3z"/>
+		<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="176.7438" y1="61.1448" x2="73.7115" y2="23.6441">
+			<stop  offset="0" style="stop-color:#FFFFFF"/>
+			<stop  offset="0.1884" style="stop-color:#FCFCFC"/>
+			<stop  offset="0.3217" style="stop-color:#F3F3F3"/>
+			<stop  offset="0.4381" style="stop-color:#E3E3E3"/>
+			<stop  offset="0.5447" style="stop-color:#CDCDCD"/>
+			<stop  offset="0.6448" style="stop-color:#B1B1B1"/>
+			<stop  offset="0.7399" style="stop-color:#8E8E8E"/>
+			<stop  offset="0.8311" style="stop-color:#646464"/>
+			<stop  offset="0.917" style="stop-color:#353535"/>
+			<stop  offset="1" style="stop-color:#000000"/>
+		</linearGradient>
+		<path class="st3" d="M83.5,3.3c-0.8,0-1.6,0-2.4,0.1c0.1,0,0.3,0.1,0.5,0.1c0.2,0,0.5,0.1,0.8,0.2c0.2,0,0.3,0.1,0.5,0.1
+			c0.2,0,0.3,0.1,0.5,0.2c0.4,0.1,0.8,0.2,1.2,0.4C85,4.4,85.5,4.6,86,4.8c0.5,0.2,1,0.5,1.5,0.7c0.5,0.3,1,0.6,1.6,0.9
+			c0.3,0.2,0.5,0.4,0.8,0.6c0.3,0.2,0.5,0.4,0.8,0.6C91.2,8,91.7,8.4,92.2,9c1,1,1.9,2.2,2.7,3.5c0.8,1.3,1.4,2.8,1.8,4.3
+			c0.1,0.4,0.2,0.8,0.3,1.2l0.1,0.3l0,0.3l0.1,0.6l0.1,0.6c0,0.2,0,0.4,0,0.6l0,0.6l0,0.3l0,0.2l0,0.1l0,0l0,0l-0.1,1.3l0,0.3
+			c0,0.1,0,0.2,0,0.3L97.2,24l-0.1,0.6l0,0.3L97,25.1c-0.1,0.4-0.2,0.8-0.3,1.2c-0.5,1.5-1,3-1.8,4.3c-0.8,1.3-1.7,2.5-2.7,3.5
+			c-0.2,0.2-0.3,0.3-0.5,0.5c0.8-0.1,1.7-0.2,2.7-0.1c3.5,0.3,6.2,2,6.1,3.9c-0.1,0.9-0.8,1.6-1.8,2.1c45.5,7.5,68.6,46.6,68.6,46.6
+			C167.3,40.8,129.8,3.3,83.5,3.3z M116.4,43.6c-0.7-0.7-1.3-1.3-2-1.8l3.2-0.6C117.2,42,116.8,42.8,116.4,43.6z"/>
+	</g>
+	<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="8.7971" y1="77.1246" x2="113.9849" y2="137.8548">
+		<stop  offset="0" style="stop-color:#FFFFFF"/>
+		<stop  offset="0.1884" style="stop-color:#FCFCFC"/>
+		<stop  offset="0.3217" style="stop-color:#F3F3F3"/>
+		<stop  offset="0.4381" style="stop-color:#E3E3E3"/>
+		<stop  offset="0.5447" style="stop-color:#CDCDCD"/>
+		<stop  offset="0.6448" style="stop-color:#B1B1B1"/>
+		<stop  offset="0.7399" style="stop-color:#8E8E8E"/>
+		<stop  offset="0.8311" style="stop-color:#646464"/>
+		<stop  offset="0.917" style="stop-color:#353535"/>
+		<stop  offset="1" style="stop-color:#000000"/>
+	</linearGradient>
+	<path class="st4" d="M130.6,87c0-0.9,0-1.9-0.1-2.8c0-0.1,0-0.1,0-0.2c0,0.9,0.1,1.7,0.1,2.6c0,7-1.6,13.7-4.3,19.7
+		c-0.2,0.4-0.4,0.9-0.6,1.3c-2.6,5.2-6.1,9.8-10.4,13.7c-0.7,0.6-1.4,1.2-2.1,1.8c-1,0.8-2.1,1.6-3.2,2.4c-1.2,0.8-2.5,1.6-3.9,2.3
+		c-6.6,3.6-14.2,5.7-22.3,5.7c-0.9,0-1.9,0-2.8-0.1c0.9,0.1,1.8,0.1,2.8,0.1c0,0-77.9,9.7-83-41.5c-0.2,0-0.4,0.1-0.5,0.1
+		c2.6,43.9,38.9,78.6,83.4,78.7c0,0,0,0,0,0S130.7,135.1,130.6,87L130.6,87z"/>
+	<path class="st1" d="M83.5,3.3c-6.8,0-12.2,1.5-18.6,3l2.8,31.3c0.2,0.1,0.3,0.1,0.5,0.2c0.5,0.2,1.1,0.5,1.6,0.8c0,0,0,0,0,0
+		c0.5,0.3,1,0.6,1.4,1l12.1-0.4c1.8,0,3.6,0.1,5.4,0.2c-0.1-0.1-0.1-0.1-0.2-0.2c-0.1-0.1-0.2-0.3-0.3-0.4c-0.1-0.1-0.1-0.1-0.1-0.2
+		c-0.1-0.1-0.1-0.3-0.2-0.4c0-0.1-0.1-0.1-0.1-0.2c-0.1-0.2-0.1-0.4-0.1-0.6c0.1-1.9,3.1-3.2,6.6-2.9c3.5,0.3,6.2,2,6.1,3.9
+		c0,0.2-0.1,0.4-0.2,0.6c-0.1,0.1-0.2,0.3-0.3,0.4c0,0-0.1,0.1-0.1,0.2c-0.2,0.2-0.3,0.3-0.5,0.5c0,0,0,0,0,0
+		c-0.2,0.2-0.5,0.3-0.7,0.4c45.5,7.5,68.6,46.6,68.6,46.6C167.3,40.8,129.8,3.3,83.5,3.3z"/>
+	<g>
+		<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="85.0501" y1="41.2733" x2="86.087" y2="38.4245">
+			<stop  offset="0" style="stop-color:#FFFFFF"/>
+			<stop  offset="0.1884" style="stop-color:#FCFCFC"/>
+			<stop  offset="0.3217" style="stop-color:#F3F3F3"/>
+			<stop  offset="0.4381" style="stop-color:#E3E3E3"/>
+			<stop  offset="0.5447" style="stop-color:#CDCDCD"/>
+			<stop  offset="0.6448" style="stop-color:#B1B1B1"/>
+			<stop  offset="0.7399" style="stop-color:#8E8E8E"/>
+			<stop  offset="0.8311" style="stop-color:#646464"/>
+			<stop  offset="0.917" style="stop-color:#353535"/>
+			<stop  offset="1" style="stop-color:#000000"/>
+		</linearGradient>
+		<path class="st5" d="M89.9,40.2c-0.4-0.2-0.8-0.5-1.1-0.8c-1.8-0.1-3.6-0.2-5.4-0.2c0.4-0.1,0.8-0.2,1.2-0.4l-2.8,0.7l-0.7,0.3
+			c0.9,0,1.7-0.1,2.6-0.1C85.8,39.8,87.9,39.9,89.9,40.2z"/>
+		<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="93.95" y1="174.5922" x2="138.1377" y2="53.1876">
+			<stop  offset="0" style="stop-color:#FFFFFF"/>
+			<stop  offset="0.1884" style="stop-color:#FCFCFC"/>
+			<stop  offset="0.3217" style="stop-color:#F3F3F3"/>
+			<stop  offset="0.4381" style="stop-color:#E3E3E3"/>
+			<stop  offset="0.5447" style="stop-color:#CDCDCD"/>
+			<stop  offset="0.6448" style="stop-color:#B1B1B1"/>
+			<stop  offset="0.7399" style="stop-color:#8E8E8E"/>
+			<stop  offset="0.8311" style="stop-color:#646464"/>
+			<stop  offset="0.917" style="stop-color:#353535"/>
+			<stop  offset="1" style="stop-color:#000000"/>
+		</linearGradient>
+		<path class="st6" d="M98.7,40.5c-0.8,0.4-1.9,0.7-3.1,0.8c19.4,5,34,22.2,35,43c0.1,0.9,0.1,1.8,0.1,2.8l0,0
+			c0,48-47.1,83.8-47.1,83.8s0,0,0,0c46.2,0,83.7-37.5,83.7-83.8C167.3,87.1,144.2,48,98.7,40.5z"/>
+	</g>
+	<g>
+		<path class="st7" d="M319.7,78.5c0-0.9,0-2.9,0.1-5.7c0-2.9,0.1-5.7,0.1-8.4c0-4.3-1.2-7.6-3.5-10.1c-2.3-2.4-5.8-3.7-10.5-3.7
+			c-1,0-2.4,0-4.1,0.1c-1.7,0-3,0.1-3.9,0.1c-0.7,0-2.2,0-4.5-0.1c-2.3,0-3.8-0.1-4.5-0.1c-2.9,0-4.4,1.4-4.4,4.3
+			c0,1.2,0,5.6,0.1,13c0,7.4,0.1,12.9,0.1,16.4c0,7.8,0,19.6-0.1,32.1h0c0,3.4,2.7,6.1,6.1,6.1c3.4,0,6.1-2.7,6.1-6.1v-7
+			c0-0.6,0.3-0.9,0.9-0.9h8.2c4.5,0,8-1.2,10.3-3.7c2.3-2.4,3.5-6,3.5-10.6c0-2.4,0-5.3-0.1-8.5C319.7,82.5,319.7,80.1,319.7,78.5z
+			 M307.5,93.4c0,2.7-1.3,4.1-4,4.1h-5.8c-0.5,0-0.8-0.3-0.8-0.8V62.8c0-0.5,0.3-0.8,0.8-0.8h5.7c2.7,0,4.1,1.4,4.1,4.1V93.4z"/>
+	</g>
+	<g>
+		<path class="st7" d="M235.7,78.5c0-0.9,0-2.9,0.1-5.7c0-2.9,0.1-5.7,0.1-8.4c0-4.3-1.2-7.6-3.5-10.1c-2.3-2.4-5.8-3.7-10.5-3.7
+			c-1,0-2.4,0-4.1,0.1c-1.7,0-3,0.1-3.9,0.1c-0.7,0-2.2,0-4.5-0.1c-2.3,0-3.8-0.1-4.5-0.1c-2.9,0-4.4,1.4-4.4,4.3
+			c0,1.2,0,5.6,0.1,13c0,7.4,0.1,12.9,0.1,16.4c0,7.8,0,19.6-0.1,32.1h0c0,3.4,2.7,6.1,6.1,6.1c3.4,0,6.1-2.7,6.1-6.1h0v-7
+			c0-0.6,0.3-0.9,0.9-0.9h8.2c4.5,0,8-1.2,10.3-3.7c2.3-2.4,3.5-6,3.5-10.6c0-2.4,0-5.3-0.1-8.5C235.7,82.5,235.7,80.1,235.7,78.5z
+			 M223.5,93.4c0,2.7-1.3,4.1-4,4.1h-5.8c-0.5,0-0.8-0.3-0.8-0.8V62.8c0-0.5,0.3-0.8,0.8-0.8h5.7c2.7,0,4.1,1.4,4.1,4.1V93.4z"/>
+	</g>
+	<path class="st7" d="M361.4,94.4c0-1.4,0-4.1-0.1-8.3c0-4.2-0.1-7.2-0.1-9l0.1-20.3c0-3.4-2.8-6.1-6.1-6.1c-3.4,0-6.1,2.7-6.1,6.1
+		h0v36.4c0,2.7-1.5,4.1-4.5,4.1h-0.8h-0.8c-3,0-4.5-1.4-4.5-4.1V56.8h0c0-3.4-2.7-6.1-6.1-6.1c-3.4,0-6.1,2.7-6.1,6.1l0.1,20.3
+		c0,1.8,0,4.8-0.1,9c0,4.2-0.1,6.9-0.1,8.3c0,4.2,1.2,7.6,3.5,10.2c2.3,2.6,5.7,3.9,10.2,3.9h3.8h0.6c-0.9,2.4-1.7,4.3-2.3,5.8
+		c-1.2,3.1,0.3,6.6,3.4,7.8c3.1,1.2,6.6-0.3,7.8-3.4l0,0l7-18.3C361,98.6,361.4,96.6,361.4,94.4z"/>
+	<path class="st7" d="M277.4,94.4c0-1.4,0-4.1-0.1-8.3c0-4.2-0.1-7.2-0.1-9l0.1-20.3c0-3.4-2.8-6.1-6.1-6.1c-3.4,0-6.1,2.7-6.1,6.1
+		h0v36.4c0,2.7-1.5,4.1-4.5,4.1h-0.8h-0.8c-3,0-4.5-1.4-4.5-4.1V56.8h0c0-3.4-2.7-6.1-6.1-6.1c-3.4,0-6.1,2.7-6.1,6.1l0.1,20.3
+		c0,1.8,0,4.8-0.1,9c0,4.2-0.1,6.9-0.1,8.3c0,4.2,1.2,7.6,3.5,10.2c2.3,2.6,5.7,3.9,10.2,3.9h3.8h0.6c-0.9,2.4-1.7,4.3-2.3,5.8
+		c-1.2,3.1,0.3,6.6,3.4,7.8c3.1,1.2,6.6-0.3,7.8-3.4l0,0l7-18.3C277,98.6,277.4,96.6,277.4,94.4z"/>
+	<path class="st0" d="M87.8,37.4c0.1-1.4,1.7-2.4,3.9-2.8c0.2-0.2,0.3-0.3,0.5-0.5c1-1,1.9-2.2,2.7-3.5c0.8-1.3,1.4-2.8,1.8-4.3
+		c0.1-0.4,0.2-0.8,0.3-1.2l0.1-0.3l0-0.3l0.1-0.6l0.1-0.6c0-0.1,0-0.2,0-0.3l0-0.3l0.1-1.3l0,0l0,0l0-0.1l0-0.2l0-0.3l0-0.6
+		c0-0.2,0-0.4,0-0.6l-0.1-0.6l-0.1-0.6l0-0.3L97,18c-0.1-0.4-0.2-0.8-0.3-1.2c-0.5-1.5-1-3-1.8-4.3c-0.8-1.3-1.7-2.5-2.7-3.5
+		c-0.5-0.5-1-1-1.5-1.4c-0.2-0.2-0.5-0.4-0.8-0.6c-0.3-0.2-0.5-0.4-0.8-0.6c-0.5-0.3-1.1-0.7-1.6-0.9C87,5.2,86.5,5,86,4.8
+		c-0.5-0.2-1-0.4-1.4-0.5c-0.4-0.1-0.8-0.2-1.2-0.4c-0.2-0.1-0.4-0.1-0.5-0.2c-0.2,0-0.3-0.1-0.5-0.1c-0.3-0.1-0.6-0.1-0.8-0.2
+		c-0.3-0.1-0.6-0.1-0.6-0.1C59.8,4,39.9,12.6,24.8,27.7C9.1,43.4,0.4,64.3,0.4,86.6c0,0.5,0,0.9,0,1.4c1.3,55.7,83.3,45.5,83.3,45.5
+		c-25.8,0-46.9-21-46.9-46.9c0-14.5,6.7-27.5,17-36.1c0.1-0.1,0.3-0.2,0.4-0.3c1-0.8,2.1-1.6,3.1-2.3c0.2-0.1,0.4-0.2,0.6-0.4
+		c1.1-0.7,2.1-1.3,3.2-2c0.2-0.1,0.4-0.2,0.6-0.3c1.1-0.6,2.2-1.1,3.4-1.6c0.2-0.1,0.5-0.2,0.7-0.3c0.9-0.4,1.9-0.7,2.8-1
+		c-0.6-0.6-1.2-1.2-1.9-1.7c-1.5-1-3.3-1.6-5.2-1.9c-1.9-0.4-3.9-0.4-5.9-0.3c-2,0.1-4,0.4-6,0.9c1.9-0.8,3.8-1.5,5.9-1.9
+		c2-0.5,4.1-0.8,6.3-0.8c2.1,0,4.4,0.3,6.5,1.2c1.7,0.7,3.2,1.9,4.5,3.3c0.4-0.1,0.7-0.2,1.1-0.3c0.3-0.1,0.5-0.1,0.8-0.2
+		c1.2-0.2,2.5-0.4,3.7-0.6c0.3,0,0.6-0.1,0.9-0.1c0.6-0.1,1.1-0.1,1.6-0.2c0,0,0,0,0,0s0.2,0,0.6-0.1c0.2,0,0.5-0.1,0.8-0.2
+		c0.1,0,0.3-0.1,0.5-0.1c0.2,0,0.3-0.1,0.5-0.2c0.4-0.1,0.8-0.2,1.2-0.4c0.4-0.2,0.9-0.3,1.4-0.5c0.5-0.2,1-0.5,1.5-0.7
+		C87.6,37.6,87.7,37.5,87.8,37.4C87.8,37.4,87.8,37.4,87.8,37.4z"/>
+	<linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="48.9086" y1="3.3284" x2="48.9086" y2="134.1741">
+		<stop  offset="0" style="stop-color:#FFFFFF"/>
+		<stop  offset="0.1884" style="stop-color:#FCFCFC"/>
+		<stop  offset="0.3217" style="stop-color:#F3F3F3"/>
+		<stop  offset="0.4381" style="stop-color:#E3E3E3"/>
+		<stop  offset="0.5447" style="stop-color:#CDCDCD"/>
+		<stop  offset="0.6448" style="stop-color:#B1B1B1"/>
+		<stop  offset="0.7399" style="stop-color:#8E8E8E"/>
+		<stop  offset="0.8311" style="stop-color:#646464"/>
+		<stop  offset="0.917" style="stop-color:#353535"/>
+		<stop  offset="1" style="stop-color:#000000"/>
+	</linearGradient>
+	<path class="st8" d="M87.8,37.4c0-0.3,0.1-0.5,0.2-0.8c0,0,0,0,0,0c0,0,0,0,0,0c0.1-0.1,0.2-0.3,0.3-0.4c0,0,0,0,0,0c0,0,0,0,0,0
+		c0.4-0.5,1-0.9,1.8-1.2c0,0,0,0,0,0c0,0,0,0,0,0c0.1,0,0.2-0.1,0.3-0.1c0,0,0,0,0,0l0,0c0.4-0.1,0.8-0.3,1.3-0.3l0,0l0,0
+		c0,0,0,0,0,0c0.2-0.2,0.3-0.3,0.5-0.5c1-1,1.9-2.2,2.7-3.5c0.8-1.3,1.4-2.8,1.8-4.3c0.1-0.4,0.2-0.8,0.3-1.2l0.1-0.3l0-0.3l0.1-0.6
+		l0.1-0.6c0-0.1,0-0.2,0-0.3l0-0.3l0.1-1.3l0,0l0,0l0-0.1l0-0.2l0-0.3l0-0.6c0-0.2,0-0.4,0-0.6l-0.1-0.6l-0.1-0.6l0-0.3L97,18
+		c-0.1-0.4-0.2-0.8-0.3-1.2c-0.5-1.5-1-3-1.8-4.3c-0.8-1.3-1.7-2.5-2.7-3.5c-0.5-0.5-1-1-1.5-1.4c-0.2-0.2-0.5-0.4-0.8-0.6
+		c-0.3-0.2-0.5-0.4-0.8-0.6c-0.5-0.3-1.1-0.7-1.6-0.9C87,5.2,86.5,5,86,4.8c-0.5-0.2-1-0.4-1.4-0.5c-0.4-0.1-0.8-0.2-1.2-0.4
+		c-0.2-0.1-0.4-0.1-0.5-0.2c-0.2,0-0.3-0.1-0.5-0.1c-0.3-0.1-0.6-0.1-0.8-0.2c-0.3-0.1-0.6-0.1-0.6-0.1C59.8,4,39.9,12.6,24.8,27.7
+		C9.1,43.4,0.4,64.3,0.4,86.6c0,0.5,0,0.9,0,1.4c1.3,55.7,83.3,45.5,83.3,45.5c-25.8,0-46.9-21-46.9-46.9c0-14.5,6.7-27.5,17-36.1
+		c0.1-0.1,0.3-0.2,0.4-0.3c1-0.8,2.1-1.6,3.1-2.3c0.2-0.1,0.4-0.2,0.6-0.4c1.1-0.7,2.1-1.3,3.2-2c0.2-0.1,0.4-0.2,0.6-0.3
+		c1.1-0.6,2.2-1.1,3.4-1.6c0.2-0.1,0.5-0.2,0.7-0.3c0.9-0.4,1.9-0.7,2.8-1c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
+		c-0.3-0.3-0.5-0.6-0.9-0.9c-0.3-0.3-0.7-0.5-1-0.8c-1.5-1-3.3-1.6-5.2-1.9c-1.9-0.4-3.9-0.4-5.9-0.3c-2,0.1-4,0.4-6,0.9
+		c1.9-0.8,3.8-1.5,5.9-1.9c2-0.5,4.1-0.8,6.3-0.8c2.1,0,4.4,0.3,6.5,1.2c0.5,0.2,0.9,0.5,1.4,0.7c0,0,0,0,0,0c0,0,0,0,0,0
+		c0.2,0.1,0.4,0.2,0.6,0.4c0,0,0,0,0,0c0,0,0,0,0,0c0.2,0.2,0.5,0.3,0.7,0.5v0c0.2,0.2,0.5,0.4,0.7,0.6c0,0,0,0,0,0v0c0,0,0,0,0,0
+		c0.1,0.1,0.1,0.1,0.2,0.2c0,0,0,0,0,0c0.3,0.3,0.7,0.6,1,1c0.4-0.1,0.7-0.2,1.1-0.3c0.3-0.1,0.5-0.1,0.8-0.2
+		c1.2-0.2,2.5-0.4,3.7-0.6c0.3,0,0.6-0.1,0.9-0.1c0.6-0.1,1.1-0.1,1.6-0.2c0,0,0,0,0,0s0.2,0,0.6-0.1c0.2,0,0.5-0.1,0.8-0.2
+		c0.1,0,0.3-0.1,0.5-0.1c0.2,0,0.3-0.1,0.5-0.2c0.4-0.1,0.8-0.2,1.2-0.4c0.4-0.2,0.9-0.3,1.4-0.5c0.5-0.2,1-0.5,1.5-0.7
+		C87.6,37.6,87.7,37.5,87.8,37.4C87.8,37.4,87.8,37.4,87.8,37.4z"/>
+	<path class="st9" d="M115.4,42.6c0.7-0.2,1.3-0.5,1.9-0.8c0,0,0,0,0,0c0.5-0.3,1.1-0.6,1.6-1c0.1,0,0.1-0.1,0.2-0.1
+		c0.5-0.4,0.9-0.8,1.4-1.2c0.1-0.1,0.1-0.1,0.2-0.2c0,0,0,0,0.1-0.1c0.4-0.4,0.8-0.8,1.1-1.3c0,0,0,0,0,0c0.4-0.5,0.7-1,1-1.5
+		c0.1-0.1,0.1-0.2,0.2-0.3c0.3-0.5,0.5-1,0.7-1.6c0-0.1,0-0.1,0.1-0.2c0.2-0.5,0.3-1,0.4-1.6c0-0.1,0-0.2,0.1-0.3
+		c0.1-0.4,0.1-0.9,0.2-1.3c0-0.1,0-0.3,0.1-0.4c0-0.1,0-0.2,0-0.4c0-0.4,0-0.7,0-1.1c0-0.3,0-0.5,0-0.8l0,0c-0.3-3.4-2-6.4-4.3-8.6
+		l0,0L104.6,5.9c-0.1-0.1-0.3-0.2-0.4-0.3l-0.7-0.7l0,0c-4-3.4-9.4-5.3-15.1-4.7c-3.4,0.3-6.6,1.5-9.2,3.3c-1,0.1-1.9,0.1-2.9,0.2
+		c-0.4,0-0.8,0.1-1.2,0.1c-1.2,0.1-2.4,0.3-3.6,0.5c-0.3,0-0.6,0.1-0.9,0.1c-45.8,9.3-33.9,80.7-33.7,82.2c0,0,0,0,0,0c0,0,0,0,0,0
+		c0,0,0,0,0,0c0,0,0,0,0,0c0-14.5,6.7-27.5,17-36.1l0.4-0.3c1-0.8,2.1-1.6,3.1-2.3c0.2-0.1,0.4-0.2,0.6-0.4c1.1-0.7,2.1-1.3,3.2-2
+		c0.2-0.1,0.4-0.2,0.6-0.3c1.1-0.6,2.2-1.1,3.4-1.6c0.2-0.1,0.5-0.2,0.7-0.3c0.9-0.4,1.9-0.7,2.8-1c-0.6-0.6-1.2-1.2-1.9-1.7
+		c-1.5-1-3.3-1.6-5.2-1.9c-1.9-0.4-3.9-0.4-5.9-0.3c-2,0.1-4,0.4-6,0.9c1.9-0.8,3.8-1.5,5.9-1.9c2-0.5,4.1-0.8,6.3-0.8
+		c2.1,0,4.4,0.3,6.5,1.2c1.7,0.7,3.2,1.9,4.5,3.3c0,0,0,0,0,0c4.1,4.7,10.4,7.5,17.2,6.8c0.6-0.1,1.2-0.2,1.8-0.3l0,0l0.2,0
+		c0,0,0,0,0.1,0l21.6-4.4C114.3,43,114.9,42.8,115.4,42.6z"/>
+	<linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="35.2909" y1="43.2855" x2="124.4093" y2="43.2855">
+		<stop  offset="0" style="stop-color:#FFFFFF"/>
+		<stop  offset="0.1884" style="stop-color:#FCFCFC"/>
+		<stop  offset="0.3217" style="stop-color:#F3F3F3"/>
+		<stop  offset="0.4381" style="stop-color:#E3E3E3"/>
+		<stop  offset="0.5447" style="stop-color:#CDCDCD"/>
+		<stop  offset="0.6448" style="stop-color:#B1B1B1"/>
+		<stop  offset="0.7399" style="stop-color:#8E8E8E"/>
+		<stop  offset="0.8311" style="stop-color:#646464"/>
+		<stop  offset="0.917" style="stop-color:#353535"/>
+		<stop  offset="1" style="stop-color:#000000"/>
+	</linearGradient>
+	<path class="st10" d="M115.4,42.6c0.7-0.2,1.3-0.5,1.9-0.8c0,0,0,0,0,0c0.5-0.3,1.1-0.6,1.6-1c0.1,0,0.1-0.1,0.2-0.1
+		c0.5-0.4,0.9-0.8,1.4-1.2c0.1-0.1,0.1-0.1,0.2-0.2c0,0,0,0,0.1-0.1c0.4-0.4,0.8-0.8,1.1-1.3c0,0,0,0,0,0c0.4-0.5,0.7-1,1-1.5
+		c0.1-0.1,0.1-0.2,0.2-0.3c0.3-0.5,0.5-1,0.7-1.6c0-0.1,0-0.1,0.1-0.2c0.2-0.5,0.3-1,0.4-1.6c0-0.1,0-0.2,0.1-0.3
+		c0.1-0.4,0.1-0.9,0.2-1.3c0-0.1,0-0.3,0.1-0.4c0-0.1,0-0.2,0-0.4c0-0.4,0-0.7,0-1.1c0-0.3,0-0.5,0-0.8l0,0c-0.3-3.4-2-6.4-4.3-8.6
+		l0,0L104.6,5.9c-0.1-0.1-0.3-0.2-0.4-0.3l-0.7-0.7l0,0c-4-3.4-9.4-5.3-15.1-4.7c-3.4,0.3-6.6,1.5-9.2,3.3c-1,0.1-1.9,0.1-2.9,0.2
+		c-0.4,0-0.8,0.1-1.2,0.1c-1.2,0.1-2.4,0.3-3.6,0.5c-0.3,0-0.6,0.1-0.9,0.1c-45.8,9.3-33.9,80.7-33.7,82.2c0,0,0,0,0,0c0,0,0,0,0,0
+		c0,0,0,0,0,0c0,0,0,0,0,0c0-14.5,6.7-27.5,17-36.1l0.4-0.3c1-0.8,2.1-1.6,3.1-2.3c0.2-0.1,0.4-0.2,0.6-0.4c1.1-0.7,2.1-1.3,3.2-2
+		c0.2-0.1,0.4-0.2,0.6-0.3c1.1-0.6,2.2-1.1,3.4-1.6c0.2-0.1,0.5-0.2,0.7-0.3c0.9-0.4,1.9-0.7,2.8-1c-0.6-0.6-1.2-1.2-1.9-1.7
+		c-1.5-1-3.3-1.6-5.2-1.9c-1.9-0.4-3.9-0.4-5.9-0.3c-2,0.1-4,0.4-6,0.9c1.9-0.8,3.8-1.5,5.9-1.9c2-0.5,4.1-0.8,6.3-0.8
+		c2.1,0,4.4,0.3,6.5,1.2c1.7,0.7,3.2,1.9,4.5,3.3c0,0,0,0,0,0c4.1,4.7,10.4,7.5,17.2,6.8c0.6-0.1,1.2-0.2,1.8-0.3l0,0l0.2,0
+		c0,0,0,0,0.1,0l21.6-4.4C114.3,43,114.9,42.8,115.4,42.6z"/>
+	<path class="st11" d="M93.9,41.3c-3.5-0.3-6.2-2-6.1-3.9c0.1-1.9,3.1-3.2,6.6-2.9c3.5,0.3,6.2,2,6.1,3.9
+		C100.3,40.2,97.4,41.5,93.9,41.3z"/>
+</g>
+</svg>
diff --git a/image/pypy-logo2-white-background.png b/image/pypy-logo2-white-background.png
deleted file mode 100644
index 5e4b3ed732549b0d60e655b552f31f1baadf8e14..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch

[cut]

diff --git a/image/pypy_speed_graph.png b/image/pypy_speed_graph.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..c6643f080d62b10300b2794b8d00a3c518fb55c3
GIT binary patch

[cut]

diff --git a/pages/compat.rst b/pages/compat.rst
new file mode 100644
--- /dev/null
+++ b/pages/compat.rst
@@ -0,0 +1,139 @@
+.. title: Python compatibility
+.. slug: compat
+.. date: 2019-12-28 16:14:02 UTC
+.. tags: 
+.. category: 
+.. link: 
+.. description: 
+
+PyPy implements the Python language version 2.7.13. It supports all of the core
+language, passing Python test suite (with minor modifications that were
+already accepted in the main python in newer versions). It supports most
+of the commonly used Python `standard library modules`_; details below.
+
+PyPy3 implements the Python language version 3.6.9.  It has been released,
+but Python is a large language and it is quite possible that a few things are missing.
+
+PyPy has support for the `CPython C API`_, however there are constructs
+that are `not compatible`.  We strongly advise use of `CFFI`_
+instead. CFFI come builtin with PyPy. Many libraries will require
+a bit of effort to work, but there are known success stories. Check out
+PyPy blog for updates
+
+C extensions need to be recompiled for PyPy in order to work. Depending on
+your build system, it might work out of the box or will be slightly harder.
+
+Standard library modules supported by PyPy. Note that large parts of python
+library are implemented in pure python, so they don't have to be listed
+there. Please just check if it imports. If it imports, it should work.
+
+``__builtin__, __pypy__, _ast, _cffi_backend, _codecs, _collections, _continuation, _csv, _file, _hashlib, _io, _locale, _lsprof, _md5, _minimal_curses, _multibytecodec, _multiprocessing, _numpypy, _pickle_support, _pypyjson, _random, _rawffi, _sha, _socket, _sre, _ssl, _struct, _testing, _warnings, _weakref, array, binascii, bz2, cStringIO, cmath, cppyy, cpyext, crypt, errno, exceptions, fcntl, gc, imp, itertools, marshal, math, mmap, operator, parser, posix, pwd, pyexpat, pypyjit, select, signal, symbol, sys, termios, thread, time, token, unicodedata, zipimport, zlib``
+
+Supported, and written in pure Python:
+
+``cPickle, ctypes, datetime, dbm, _functools, grp, readline, resource, sqlite3, syslog``
+
+All modules that are pure python in CPython of course work.
+
+Python libraries known to work under PyPy (the list is not exhaustive).
+A `fuller list`_ is available.
+
+* ctypes
+
+* django
+
+* sqlalchemy
+
+* flask
+
+* twisted
+
+* pylons
+
+* divmod's nevow
+
+* pyglet
+
+* Pillow (the PIL fork)
+
+* `lxml`_
+
+* NumPy
+
+The main difference that is not going to be fixed is that PyPy does
+not support refcounting semantics. The following code won't fill the
+file immediately, but only after a certain period of time, when the GC
+does a collection:
+
+.. code-block:: python
+
+    open("filename", "w").write("stuff")
+
+The proper fix is
+
+.. code-block:: python
+
+    with open("filename", "w") as f:
+        f.write("stuff")
+
+The same problem---not closing your files---can also show up if your
+program opens a large number of files without closing them explicitly.
+In that case, you can easily hit the system limit on the number of file
+descriptors that are allowed to be opened at the same time.
+
+PyPy can be run with the command-line option ``-X track-resources`` (as in,
+``pypy -X track-resources myprogram.py``). This produces a ``ResourceWarning``
+when the GC closes a non-closed file or socket.  The traceback for the place
+where the file or socket was allocated is given as well, which aids finding
+places where ``close()`` is missing.
+
+Similarly, remember that you must ``close()`` a non-exhausted
+generator in order to have its pending ``finally`` or ``with``
+clauses executed immediately:
+
+.. code-block:: python
+
+    def mygen():
+        with foo:
+            yield 42
+
+    for x in mygen():
+        if x == 42:
+            break    # foo.__exit__ is not run immediately!
+
+    # fixed version:
+    gen = mygen()
+    try:
+        for x in gen:
+            if x == 42:
+                break
+    finally:
+        gen.close()
+
+More generally, ``__del__()`` methods are not executed as predictively
+as on CPython: they run "some time later" in PyPy (or not at all if
+the program finishes running in the meantime).  See `more details
+here`_.
+
+Note that PyPy returns unused memory to the operating system if there
+is a madvise() system call (at least Linux, OS X, BSD) or on Windows.  It is
+important to realize that you may not see this in ``top``.  The unused
+pages are marked with ``MADV_FREE``, which tells the system "if you
+need more memory at some point, grab this page".  As long as memory is
+plentiful, the ``RES`` column in ``top`` might remains high.  (Exceptions to
+this rule are systems with no ``MADV_FREE``, where we use
+``MADV_DONTNEED``, which forcefully lowers the ``RES``.  This includes
+Linux <= 4.4.)
+
+A more complete list of known differences is available at `our dev site`_.
+
+.. _`CPython C API`: http://docs.python.org/c-api/
+.. _`CFFI`: http://cffi.readthedocs.org/
+.. _`not compatible`: http://doc.pypy.org/en/latest/cpython_differences.html#c-api-differences
+.. _`standard library modules`: http://docs.python.org/library/
+.. _`our dev site`: http://pypy.readthedocs.org/en/latest/cpython_differences.html
+.. _`more details here`: http://pypy.readthedocs.org/en/latest/cpython_differences.html#differences-related-to-garbage-collection-strategies
+.. _`compatibility wiki`: https://bitbucket.org/pypy/compatibility/wiki/Home
+.. _`lxml`: https://github.com/amauryfa/lxml/tree/cffi/
+.. _`List of installable top 1000 PyPI packages`: http://packages.pypy.org
+.. _`fuller list`: http://packages.pypy.org
diff --git a/pages/contact.rst b/pages/contact.rst
new file mode 100644
--- /dev/null
+++ b/pages/contact.rst
@@ -0,0 +1,25 @@
+.. title: Contact
+.. slug: contact
+.. date: 2019-12-28 16:14:02 UTC
+.. tags: 
+.. category: 
+.. link: 
+.. description: 
+
+
+* irc: **#pypy** on **irc.freenode.net**
+
+* mailing list: `pypy-dev at python.org`__
+
+* for security related issues, non-public funding enquiries etc. please contact pypy-z at python.org
+
+* the bitbucket `bug tracker`_ (registration required to open new issues or to comment)
+
+* more on our `dev site`_.
+
+* code on `bitbucket`_.
+
+.. __: http://mail.python.org/mailman/listinfo/pypy-dev
+.. _`bug tracker`: https://bitbucket.org/pypy/pypy/issues?status=new&status=open
+.. _`dev site`: http://doc.pypy.org
+.. _`bitbucket`: https://bitbucket.org/pypy/pypy/overview
diff --git a/pages/download.rst b/pages/download.rst
new file mode 100644
--- /dev/null
+++ b/pages/download.rst
@@ -0,0 +1,506 @@
+.. title: Download and Install
+.. slug: download
+.. date: 2019-12-28 16:14:02 UTC
+.. tags: 
+.. category: 
+.. link: 
+.. description: 
+
+.. contents::
+    :depth: 2
+
+.. note::
+
+  There are `nightly binary builds`_ available. Those builds are not always
+  as stable as the release, but they contain numerous bugfixes and
+  performance improvements.
+
+We provide binaries for x86, aarch64, ppc64 and s390x running on different operating systems such as
+Linux, Mac OS X and Windows (`what's new in PyPy 7.3.0?`_):
+
+* the Python2.7 compatible release — **PyPy2.7 v7.3.0**
+
+* the Python3.6 compatible release — **PyPy3.6 v7.3.0**
+
+* the Python2.7 Software Transactional Memory special release — **PyPy-STM 2.5.1** (Linux x86-64 only)
+
+.. _what's new in PyPy 7.3.0?: http://doc.pypy.org/en/latest/release-v7.3.0.html
+
+
+.. _`Default (with a JIT Compiler)`:
+
+"JIT Compiler" version
+-------------------------------
+
+These binaries include a Just-in-Time compiler.  They only work on
+x86 CPUs that have the SSE2_ instruction set (most of
+them do, nowadays), or on x86-64 CPUs. They also contain `stackless`_
+extensions, like `greenlets`_.
+
+Linux binaries and common distributions
+---------------------------------------
+
+Since version 7.3, the linux x86 binaries in the links below ship with versions
+of OpenSSL, SQLite3, libffi, expat, and TCL/TK binary libraries linked in. This
+make the binaries "portable" so that they should run on any current glibc-based
+linux platform. The ideas were adopted from the `portable-pypy`_ package.
+
+This solution to the portability problem means that the versions of the
+packaged libraries are frozen to the version shipped, so updating your system
+libraries will not affect this installation of PyPy. Also see the note about
+SSL certificates below.
+
+For aarch64, s390x, and ppc64, the binaries target a specific operating system.
+These binaries are dynamically linked, and thus might not be usable due to the
+sad story of linux binary compatibility.  This means that **Linux binaries are
+only usable on the distributions written next to them** unless you're ready to
+hack your system by adding symlinks to the libraries it tries to open.  There
+are better solutions:
+
+* download PyPy from your release vendor (usually an outdated
+  version): `Ubuntu`_ (`PPA`_), `Debian`_, `Homebrew`_, MacPorts,
+  `Fedora`_, `Gentoo`_ and `Arch`_ are known to package PyPy, with various
+  degrees of being up-to-date.
+
+* use ``sudo snap install --classic <package>``, where ``<package>`` is
+  ``pypy`` or `pypy3``. Snap is a non-vendor specific package manager for
+  linux, and repackages the download tarballs below with the latest platform-
+  specific libraries (again, without changing ``libffi``).
+
+* `recompile the CFFI-based`_ TCL/TK, OpenSSL, or sqlite3 modules, using system
+  libraries and the scripts in ``pypy/lib_pypy``. This solution will not solve
+  compatibility issues with libffi, since that is baked into PyPy.
+
+* or translate_ your own PyPy.
+
+.. note::
+
+    SSL Certificates
+
+    While the linux binaries ship an OpenSSL library, they do not ship a
+    certificate store for SSL certificates. If you wish to use SSL module,
+    you will need a valid certificate store. You can use the `certifi`_ package
+    and set ``SSL_CERT_FILE`` to ``certifi.where()`` or install your platform
+    certificates which should be discovered by the ``_ssl`` module.
+
+
+.. _`Ubuntu`: http://packages.ubuntu.com/search?keywords=pypy&searchon=names
+.. _`PPA`: https://launchpad.net/~pypy/+archive/ppa
+.. _`Debian`: http://packages.debian.org/sid/pypy
+.. _`Fedora`: http://fedoraproject.org/wiki/Features/PyPyStack
+.. _`Gentoo`: http://packages.gentoo.org/package/dev-python/pypy
+.. _`Homebrew`: https://github.com/Homebrew/homebrew-core/blob/master/Formula/pypy.rb
+.. _`Arch`: https://wiki.archlinux.org/index.php/PyPy
+.. _`portable-pypy`: https://github.com/squeaky-pl/portable-pypy#portable-pypy-distribution-for-linux
+.. _`recompile the CFFI-based`: https://doc.pypy.org/en/latest/build.html#build-cffi-import-libraries-for-the-stdlib
+.. _`certifi`: https://pypi.org/project/certifi/


More information about the pypy-commit mailing list