[DRE-commits] [jekyll] 03/07: Imported Upstream version 2.0.3+dfsg

Youhei SASAKI uwabami-guest at moszumanska.debian.org
Mon Jun 2 19:06:14 UTC 2014


This is an automated email from the git hooks/post-receive script.

uwabami-guest pushed a commit to branch master
in repository jekyll.

commit 862ea8c64b58a9251f32910f1239adfc4195895d
Author: Harlan Lieberman-Berg <H.LiebermanBerg at gmail.com>
Date:   Fri May 30 21:35:25 2014 +0000

    Imported Upstream version 2.0.3+dfsg
---
 .travis.yml                                        |   27 +
 CONTRIBUTING.markdown                              |   14 +-
 History.markdown                                   |  359 ++++++-
 LICENSE                                            |    4 +-
 README.markdown                                    |   20 +-
 Rakefile                                           |   66 +-
 bin/jekyll                                         |  164 +--
 checksums.yaml.gz                                  |  Bin 266 -> 266 bytes
 docs/jp/CONTRIBUTING.jp.markdown                   |   93 ++
 docs/jp/README.jp.markdown                         |   69 ++
 features/collections.feature                       |  108 ++
 features/create_sites.feature                      |   69 +-
 features/data.feature                              |    8 +-
 features/drafts.feature                            |   29 +-
 features/embed_filters.feature                     |   67 +-
 features/frontmatter_defaults.feature              |   79 ++
 features/include_tag.feature                       |   31 +-
 features/markdown.feature                          |   22 +-
 features/pagination.feature                        |   10 +-
 features/permalinks.feature                        |   30 +-
 features/post_data.feature                         |   78 +-
 features/post_excerpts.feature                     |   18 +-
 features/site_configuration.feature                |  108 +-
 features/site_data.feature                         |   52 +-
 features/step_definitions/jekyll_steps.rb          |  102 +-
 features/support/env.rb                            |   55 +-
 jekyll.gemspec                                     |  293 +-----
 lib/jekyll.rb                                      |   33 +-
 lib/jekyll/cleaner.rb                              |    8 +-
 lib/jekyll/collection.rb                           |  147 +++
 lib/jekyll/command.rb                              |   94 +-
 lib/jekyll/commands/build.rb                       |  148 +--
 lib/jekyll/commands/docs.rb                        |   30 +
 lib/jekyll/commands/doctor.rb                      |   21 +-
 lib/jekyll/commands/new.rb                         |   27 +-
 lib/jekyll/commands/serve.rb                       |  149 ++-
 lib/jekyll/configuration.rb                        |   42 +-
 lib/jekyll/converter.rb                            |   32 +-
 lib/jekyll/converters/markdown.rb                  |   45 +-
 lib/jekyll/converters/markdown/kramdown_parser.rb  |    2 +-
 lib/jekyll/converters/markdown/maruku_parser.rb    |    9 +-
 lib/jekyll/converters/markdown/redcarpet_parser.rb |   43 +-
 lib/jekyll/converters/textile.rb                   |    4 +-
 lib/jekyll/convertible.rb                          |   87 +-
 lib/jekyll/core_ext.rb                             |   90 --
 lib/jekyll/deprecator.rb                           |    4 +-
 lib/jekyll/document.rb                             |  242 +++++
 lib/jekyll/draft.rb                                |    5 +
 lib/jekyll/entry_filter.rb                         |   87 +-
 lib/jekyll/excerpt.rb                              |   22 +-
 lib/jekyll/filters.rb                              |   88 +-
 lib/jekyll/frontmatter_defaults.rb                 |  148 +++
 lib/jekyll/layout.rb                               |    4 +-
 lib/jekyll/layout_reader.rb                        |   53 +
 lib/jekyll/liquid_extensions.rb                    |   22 +
 lib/jekyll/mime.types                              |   28 +-
 lib/jekyll/page.rb                                 |   43 +-
 lib/jekyll/plugin.rb                               |   23 +-
 lib/jekyll/plugin_manager.rb                       |   76 ++
 lib/jekyll/post.rb                                 |   90 +-
 lib/jekyll/publisher.rb                            |   21 +
 lib/jekyll/related_posts.rb                        |   10 +-
 lib/jekyll/renderer.rb                             |  132 +++
 lib/jekyll/site.rb                                 |  295 +++---
 lib/jekyll/static_file.rb                          |   17 +-
 lib/jekyll/stevenson.rb                            |   35 +-
 lib/jekyll/tags/gist.rb                            |    7 +-
 lib/jekyll/tags/highlight.rb                       |   78 +-
 lib/jekyll/tags/include.rb                         |   36 +-
 lib/jekyll/tags/post_url.rb                        |   11 +-
 lib/jekyll/url.rb                                  |   46 +-
 lib/jekyll/utils.rb                                |   79 ++
 lib/jekyll/version.rb                              |    3 +
 lib/site_template/.gitignore                       |    1 -
 lib/site_template/_config.yml                      |   13 +-
 lib/site_template/_includes/footer.html            |   61 ++
 lib/site_template/_includes/head.html              |   12 +
 lib/site_template/_includes/header.html            |   28 +
 lib/site_template/_layouts/default.html            |   43 +-
 lib/site_template/_layouts/page.html               |   14 +
 lib/site_template/_layouts/post.html               |   16 +-
 .../0000-00-00-welcome-to-jekyll.markdown.erb      |    2 +-
 lib/site_template/about.md                         |   11 +
 lib/site_template/css/main.css                     |  435 ++++++--
 lib/site_template/css/syntax.css                   |   60 --
 lib/site_template/feed.xml                         |   21 +
 lib/site_template/index.html                       |   17 +-
 metadata.yml                                       |  310 +++++-
 script/bootstrap                                   |    2 +
 script/branding                                    |   11 +
 script/cibuild                                     |    4 +
 script/console                                     |   38 +
 script/rebund                                      |  140 +++
 script/test                                        |   11 +
 site/.gitignore                                    |    4 -
 site/_config.yml                                   |    7 +-
 site/_data/docs.yml                                |   45 +
 site/_includes/analytics.html                      |   22 +-
 site/_includes/anchor_links.html                   |   27 +
 site/_includes/css/font-awesome.css                |   44 +
 site/{ => _includes}/css/gridism.css               |    0
 site/{ => _includes}/css/pygments.css              |    2 +
 site/_includes/css/style.css                       | 1040 ++++++++++++++++++++
 site/_includes/docs_contents.html                  |   16 +-
 site/_includes/docs_contents_mobile.html           |   21 +-
 site/_includes/docs_option.html                    |    4 +-
 site/_includes/docs_ul.html                        |   10 +-
 site/_includes/footer.html                         |    4 +-
 site/_includes/header.html                         |    4 +-
 site/_includes/news_item.html                      |    8 +-
 site/_includes/primary-nav-items.html              |   11 +-
 site/_includes/section_nav.html                    |    4 +-
 site/_includes/top.html                            |   21 +-
 site/_layouts/news_item.html                       |   12 +-
 .../2013-07-24-jekyll-1-1-1-released.markdown      |    8 +-
 .../2013-07-25-jekyll-1-0-4-released.markdown      |    2 +-
 .../2013-07-25-jekyll-1-1-2-released.markdown      |    2 +-
 .../2013-09-14-jekyll-1-2-1-released.markdown      |    4 +-
 .../2013-10-28-jekyll-1-3-0-rc1-released.markdown  |    2 +-
 .../2013-12-09-jekyll-1-4-1-released.markdown      |   20 +
 .../2014-01-13-jekyll-1-4-3-released.markdown      |    3 +-
 .../2014-03-27-jekyll-1-5-1-released.markdown      |    2 +-
 site/_posts/2014-05-06-jekyll-turns-2-0-0.markdown |   31 +
 .../2014-05-08-jekyll-2-0-3-released.markdown      |   18 +
 site/css/normalize.css                             |    1 -
 site/css/screen.css                                |   31 +
 site/css/style.css                                 |  946 ------------------
 site/docs/assets.md                                |   52 +
 site/docs/collections.md                           |  201 ++++
 site/docs/configuration.md                         |  219 +++--
 site/docs/contributing.md                          |   13 +-
 site/docs/datafiles.md                             |   14 +-
 site/docs/deployment-methods.md                    |    9 +-
 site/docs/extras.md                                |   40 +-
 site/docs/frontmatter.md                           |   13 +-
 site/docs/github-pages.md                          |    2 +-
 site/docs/history.md                               |  363 ++++++-
 site/docs/index.md                                 |    8 +-
 site/docs/installation.md                          |   42 +-
 site/docs/migrations.md                            |    4 +-
 site/docs/permalinks.md                            |    8 +
 site/docs/plugins.md                               |   23 +-
 site/docs/posts.md                                 |   38 +-
 site/docs/sites.md                                 |    6 +-
 site/docs/structure.md                             |    8 +-
 site/docs/templates.md                             |  167 ++--
 site/docs/troubleshooting.md                       |   23 +-
 site/docs/upgrading.md                             |   12 +-
 site/docs/usage.md                                 |   11 +
 site/docs/variables.md                             |   38 +-
 site/docs/windows.md                               |   44 +
 site/favicon.ico                                   |  Bin 0 -> 5430 bytes
 site/favicon.png                                   |  Bin 1359 -> 0 bytes
 site/feed.xml                                      |   42 +-
 site/fonts/FontAwesome.otf                         |  Bin 0 -> 62856 bytes
 site/fonts/fontawesome-webfont.eot                 |  Bin 0 -> 38205 bytes
 site/fonts/fontawesome-webfont.svg                 |  414 ++++++++
 site/fonts/fontawesome-webfont.ttf                 |  Bin 0 -> 80652 bytes
 site/fonts/fontawesome-webfont.woff                |  Bin 0 -> 44432 bytes
 site/img/article-footer.png                        |  Bin 1898 -> 1863 bytes
 site/img/footer-arrow.png                          |  Bin 846 -> 840 bytes
 site/img/footer-logo.png                           |  Bin 3906 -> 3783 bytes
 site/img/logo-2x.png                               |  Bin 46587 -> 46514 bytes
 site/img/logo-rss.png                              |  Bin 0 -> 6022 bytes
 site/img/octojekyll.png                            |  Bin 23728 -> 22360 bytes
 site/img/tube.png                                  |  Bin 9387 -> 0 bytes
 site/img/tube1x.png                                |  Bin 4036 -> 0 bytes
 site/index.html                                    |   10 +-
 test/helper.rb                                     |   34 +-
 test/source/+/%# +.md                              |    6 +
 test/source/+/foo.md                               |    2 +-
 test/source/_drafts/draft-properties.text          |   11 +
 test/source/_includes/include.html                 |    1 +
 test/source/_includes/sig.markdown                 |    4 +-
 test/source/_methods/_do_not_read_me.md            |    5 +
 test/source/_methods/configuration.md              |    8 +
 test/source/_methods/sanitized_path.md             |    5 +
 .../_methods/site/_dont_include_me_either.md       |    5 +
 test/source/_methods/site/generate.md              |    6 +
 test/source/_methods/site/initialize.md            |    5 +
 test/source/_methods/um_hi.md                      |    6 +
 test/source/_posts/2011-04-12-md-extension.md      |    2 +-
 .../2013-12-17-include-variable-filters.markdown   |   21 +
 test/source/_posts/2013-12-20-properties.text      |   11 +
 test/source/_posts/2014-03-03-yaml-with-dots.md    |    5 +
 .../_posts/2014-03-22-escape-+ %20[].markdown      |    6 +
 test/source/_sass/_grid.scss                       |    1 +
 test/source/css/main.scss                          |    4 +
 test/source/js/coffeescript.coffee                 |   10 +
 test/source/pgp.key                                |    2 +
 test/source/properties.html                        |    8 +
 test/source/static_files.html                      |    4 +
 test/source/unpublished.html                       |    7 +
 test/test_coffeescript.rb                          |   49 +
 test/test_collections.rb                           |  175 ++++
 test/test_command.rb                               |   17 +
 test/test_configuration.rb                         |   55 +-
 test/test_convertible.rb                           |   20 +-
 test/test_document.rb                              |   48 +
 test/test_draft.rb                                 |   56 ++
 test/test_entry_filter.rb                          |   54 +-
 test/test_excerpt.rb                               |   44 +-
 test/test_filters.rb                               |   78 +-
 test/test_generated_site.rb                        |   20 +-
 test/test_kramdown.rb                              |    2 +-
 test/test_layout_reader.rb                         |   34 +
 test/test_liquid_extensions.rb                     |   31 +
 test/test_new_command.rb                           |   10 +-
 test/test_page.rb                                  |   58 +-
 test/test_pager.rb                                 |    6 +-
 test/test_post.rb                                  |   87 +-
 test/test_redcarpet.rb                             |   26 +-
 test/test_sass.rb                                  |   26 +
 test/test_site.rb                                  |  116 ++-
 test/test_tags.rb                                  |  136 ++-
 test/{test_core_ext.rb => test_utils.rb}           |   45 +-
 216 files changed, 8379 insertions(+), 3134 deletions(-)

diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..2c99fda
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,27 @@
+language: ruby
+cache: bundler
+install:
+- script/rebund download
+- travis_retry bundle install --path vendor/bundle
+rvm:
+- 2.1.1
+- 2.0.0
+- 1.9.3
+script: script/cibuild
+after_script:
+- script/rebund upload
+notifications:
+  irc:
+    on_success: change
+    on_failure: change
+    channels:
+    - irc.freenode.org#jekyll
+    template:
+    - '%{repository}#%{build_number} (%{branch}) %{message} %{build_url}'
+  email:
+    on_success: never
+    on_failure: never
+env:
+  global:
+  - secure: bt5nglPTdsc0N5fB1dOJz2WbM81dGpDuVD8PnhEsxgUfoo6xavhU4+pNrUADlSUqQ1aJrdU+MKW4x+JZ2ZnJS8vOpNzRymuMZSbFaljK4pgFGiKFgBdMKxVikvoYcxKCjLAl7NJZ11W6hUw+JtJScClDZwrJJAQB6I7Isp/LsdM=
+  - secure: Ym8nx7nbfGYGo47my92M+deJykaiMkdZdb615EO51liv/xy/0aQ919Jpfieugc9d3zVnm+zFGPbpv4YzRpsik6OlVBNa4lP+BnQ27ptf5YcLWD8Hksi7845WFLecXMoaTCoYer/TvYZsIWJb2nSDMH9qbfZhnd1YZKuvUpK0rEU=
diff --git a/CONTRIBUTING.markdown b/CONTRIBUTING.markdown
index 6df9962..6bc1e32 100644
--- a/CONTRIBUTING.markdown
+++ b/CONTRIBUTING.markdown
@@ -8,7 +8,7 @@ following in mind:
 * If you're creating a small fix or patch to an existing feature, just a simple
   test will do. Please stay in the confines of the current test suite and use
   [Shoulda](http://github.com/thoughtbot/shoulda/tree/master) and
-  [RR](http://github.com/btakita/rr/tree/master).
+  [RR](https://github.com/rr/rr).
 * If it's a brand new feature, make sure to create a new
   [Cucumber](https://github.com/cucumber/cucumber/) feature and reuse steps
   where appropriate. Also, whipping up some documentation in your fork's `site`
@@ -53,7 +53,7 @@ Here's the most direct way to get your work merged into the project:
 * Make sure everything still passes by running `rake`.
 * If necessary, rebase your commits into logical chunks, without errors.
 * Push the branch up ( `git push origin my_awesome_feature` ).
-* Create a pull request against mojombo/jekyll and describe what your change
+* Create a pull request against jekyll/jekyll and describe what your change
   does and the why you think it should be merged.
 
 Updating Documentation
@@ -63,14 +63,14 @@ We want the Jekyll documentation to be the best it can be. We've
 open-sourced our docs and we welcome any pull requests if you find it
 lacking.
 
-You can find the documentation for jekyllrb.com in the 
-[site](https://github.com/mojombo/jekyll/tree/master/site) directory of
+You can find the documentation for jekyllrb.com in the
+[site](https://github.com/jekyll/jekyll/tree/master/site) directory of
 Jekyll's repo on GitHub.com.
 
 All documentation pull requests should be directed at `master`.  Pull
-requests directed at another branch will not be accepted. 
+requests directed at another branch will not be accepted.
 
-The [Jekyll wiki](https://github.com/mojombo/jekyll/wiki) on GitHub 
+The [Jekyll wiki](https://github.com/jekyll/jekyll/wiki) on GitHub
 can be freely updated without a pull request as all GitHub users have access.
 
 Gotchas
@@ -78,7 +78,7 @@ Gotchas
 
 * If you want to bump the gem version, please put that in a separate commit.
   This way, the maintainers can control when the gem gets released.
-* Try to keep your patch(es) based from the latest commit on mojombo/jekyll.
+* Try to keep your patch(es) based from the latest commit on jekyll/jekyll.
   The easier it is to apply your work, the less work the maintainers have to do,
   which is always a good thing.
 * Please don't tag your GitHub issue with [fix], [feature], etc. The maintainers
diff --git a/History.markdown b/History.markdown
index a5b5d73..e2cdf17 100644
--- a/History.markdown
+++ b/History.markdown
@@ -10,11 +10,281 @@
 
 ### Site Enhancements
 
+## 2.0.3 / 2014-05-08
+
+### Bug Fixes
+
+  * Properly prefix links in site template with URL or baseurl depending upon
+    need. (#2319)
+  * Update gist tag comments and error message to require username (#2326)
+  * Fix `permalink` setting in site template (#2331)
+  * Don't fail if any of the path objects are nil (#2325)
+  * Instantiate all descendants for converters and generators, not just
+    direct subclasses (#2334)
+  * Replace all instances of `site.name` with `site.title` in site template (#2324)
+  * `Jekyll::Filters#time` now accepts UNIX timestamps in string or number form (#2339)
+  * Use `item_property` for `where` filter so it doesn't break on collections (#2359)
+  * Rescue errors thrown so `--watch` doesn't fail (#2364)
+
+### Site Enhancements
+
+  * Add missing "as" to assets docs page (#2337)
+  * Update docs to reflect new `baseurl` default (#2341)
+  * Add links to headers who have an ID. (#2342)
+  * Use symbol instead of HTML number in `upgrading.md` (#2351)
+  * Fix link to frontmatter defaults docs (#2353)
+  * Fix for `History.markdown` in order to fix history page in docs (#2363)
+
+## 2.0.2 / 2014-05-07
+
+### Bug Fixes
+
+  * Correct use of `url` and `baseurl` in the site template. (#2317)
+  * Default `baseurl` to `""` (#2317)
+
+### Site Enhancements
+
+  * Correct docs for the `gist` plugin so it always includes the username. (#2314)
+  * Clarify new (defaults, `where` filter) features in docs (#2316)
+
+## 2.0.1 / 2014-05-06
+
+### Bug Fixes
+
+  * Require `kramdown` gem instead of `maruku` gem
+
+## 2.0.0 / 2014-05-06
+
+### Major Enhancements
+  * Add "Collections" feature (#2199)
+  * Add gem-based plugin whitelist to safe mode (#1657)
+  * Replace the commander command line parser with a more robust
+    solution for our needs called `mercenary` (#1706)
+  * Remove support for Ruby 1.8.x (#1780)
+  * Move to jekyll/jekyll from mojombo/jekyll (#1817)
+  * Allow custom markdown processors (#1872)
+  * Provide support for the Rouge syntax highlighter (#1859)
+  * Provide support for Sass (#1932)
+  * Provide a 300% improvement when generating sites that use
+    `Post#next` or `Post#previous` (#1983)
+  * Provide support for CoffeeScript (#1991)
+  * Replace Maruku with Kramdown as Default Markdown Processor (#1988)
+  * Expose `site.static_files` to Liquid (#2075)
+  * Complete redesign of the template site generated by `jekyll new` (#2050)
+  * Update Listen from 1.x to 2.x (#2097)
+  * Front-matter defaults (#2205)
+  * Deprecate `relative_permalinks` configuration option (default to `false`) (#2307)
+  * Exclude files based on prefix as well as `fnmatch?` (#2303)
+
+### Minor Enhancements
+  * Move the EntryFilter class into the Jekyll module to avoid polluting the
+    global namespace (#1800)
+  * Add `group_by` Liquid filter create lists of items grouped by a common
+    property's value (#1788)
+  * Add support for Maruku's `fenced_code_blocks` option (#1799)
+  * Update Redcarpet dependency to ~> 3.0 (#1815)
+  * Automatically sort all pages by name (#1848)
+  * Better error message when time is not parseable (#1847)
+  * Allow `include` tag variable arguments to use filters (#1841)
+  * `post_url` tag should raise `ArgumentError` for invalid name (#1825)
+  * Bump dependency `mercenary` to `~> 0.2.0` (#1879)
+  * Bump dependency `safe_yaml` to `~> 1.0` (#1886)
+  * Allow sorting of content by custom properties (#1849)
+  * Add `--quiet` flag to silence output during build and serve (#1898)
+  * Add a `where` filter to filter arrays based on a key/value pair
+    (#1875)
+  * Route 404 errors to a custom 404 page in development (#1899)
+  * Excludes are now relative to the site source (#1916)
+  * Bring MIME Types file for `jekyll serve` to complete parity with GH Pages
+    servers (#1993)
+  * Adding Breakpoint to make new site template more responsive (#2038)
+  * Default to using the UTF-8 encoding when reading files. (#2031)
+  * Update Redcarpet dependency to ~> 3.1 (#2044)
+  * Remove support for Ruby 1.9.2 (#2045)
+  * Add `.mkdown` as valid Markdown extension (#2048)
+  * Add `index.xml` to the list of WEBrick directory index files (#2041)
+  * Make the `layouts` config key relative to CWD or to source (#2058)
+  * Update Kramdown to `~> 1.3` (#1894)
+  * Remove unnecessary references to `self` (#2090)
+  * Update to Mercenary v0.3.x (#2085)
+  * Ship Sass support as a separate gem (#2098)
+  * Extract core extensions into a Utils module (#2112)
+  * Refactor CLI & Commands For Greater Happiness (#2143)
+  * Provide useful error when Pygments returns `nil` and error out (#2148)
+  * Add support for unpublished drafts (#2164)
+  * Add `force_polling` option to the `serve` command (#2165)
+  * Clean up the `<head>` in the site template (#2186)
+  * Permit YAML blocks to end with three dots to better conform with the
+    YAML spec (#2110)
+  * Use `File.exist?` instead of deprecated `File.exists?` (#2214)
+  * Require newline after start of YAML front-matter header (#2211)
+  * Add the ability for pages to be marked as `published: false` (#1492)
+  * Add `Jekyll::LiquidExtensions` with `.lookup_variable` method for easy
+    looking up of variable values in a Liquid context. (#2253)
+  * Remove literal lang name from class (#2292)
+  * Return `utf-8` encoding in header for  webrick error page response (#2289)
+  * Make template site easier to customize (#2268)
+  * Add two-digit year to permalink template option (#2301)
+  * Add `site.documents` to Liquid payload (list of all docs) (#2295)
+  * Take into account missing values in the Liquid sort filter (#2299)
+
+### Bug Fixes
+  * Don't allow nil entries when loading posts (#1796)
+  * Remove the scrollbar that's always displayed in new sites generated
+    from the site template (#1805)
+  * Add `#path` to required methods in `Jekyll::Convertible` (#1866)
+  * Default Maruku fenced code blocks to ON for 2.0.0-dev (#1831)
+  * Change short opts for host and port for `jekyll docs` to be consistent with
+    other subcommands (#1877)
+  * Fix typos (#1910)
+  * Lock Maruku at 0.7.0 to prevent bugs caused by Maruku 0.7.1 (#1958)
+  * Fixes full path leak to source directory when using include tag (#1951)
+  * Don't generate pages that aren't being published (#1931)
+  * Use `SafeYAML.load` to avoid conflicts with other projects (#1982)
+  * Relative posts should never fail to build (#1976)
+  * Remove executable bits of non executable files (#2056)
+  * `#path` for a draft is now `_drafts` instead of `_posts` (#2042)
+  * Patch a couple show-stopping security vulnerabilities (#1946)
+  * Sanitize paths uniformly, in a Windows-friendly way (#2065, #2109)
+  * Update gem build steps to work correctly on Windows (#2118)
+  * Remove obsolete `normalize_options` method call from `bin/jekyll` (#2121).
+  * Remove `+` characters from Pygments lexer names when adding as a CSS
+    class (#994)
+  * Remove some code that caused Ruby interpreter warnings (#2178)
+  * Only strip the drive name if it begins the string (#2175)
+  * Remove default post with invalid date from site template (#2200)
+  * Fix `Post#url` and `Page#url` escape (#1568)
+  * Strip newlines from the `{% highlight %}` block content (#1823)
+  * Load in `rouge` only when it's been requested as the highlighter (#2189)
+  * Convert input to string before XML escaping (`xml_escape` liquid filter) (#2244)
+  * Modify configuration key for Collections and reset properly. (#2238)
+  * Avoid duplicated output using `highlight` tag (#2264)
+  * Only use Jekyll.logger for output (#2307)
+  * Close the file descriptor in `has_yaml_header?` (#2310)
+  * Add `output` to `Document` liquid output hash (#2309)
+
+### Development Fixes
+  * Add a link to the site in the README.md file (#1795)
+  * Add in History and site changes from `v1-stable` branch (#1836)
+  * Testing additions on the Excerpt class (#1893)
+  * Fix the `highlight` tag feature (#1859)
+  * Test Jekyll under Ruby 2.1.0 (#1900)
+  * Add script/cibuild for fun and profit (#1912)
+  * Use `Forwardable` for delegation between `Excerpt` and `Post`
+    (#1927)
+  * Rename `read_things` to `read_content` (#1928)
+  * Add `script/branding` script for ASCII art lovin' (#1936)
+  * Update the README to reflect the repo move (#1943)
+  * Add the project vision to the README (#1935)
+  * Speed up Travis CI builds by using Rebund (#1985)
+  * Use Yarp as a Gem proxy for Travis CI (#1984)
+  * Remove Yarp as a Gem proxy for Travis CI (#2004)
+  * Move the reading of layouts into its own class (#2020)
+  * Test Sass import (#2009)
+  * Switch Maruku and Kramdown in lists of Runtime vs. Development dependencies (#2049)
+  * Clean up the gemspec for the project (#2095)
+  * Add Japanese translation of README and CONTRIBUTING docs. (#2081)
+  * Re-align the tables in Cucumber (#2108)
+  * Trim trailing spaces and convert tabs to spaces (#2122)
+  * Fix the failing Travis scenarios due to Cucumber issues (#2155)
+  * Wrap `bundle install` in `travis_retry` to retry when RubyGems fails (#2160)
+  * Refactor tags and categories (#1639)
+  * Extract plugin management into its own class (#2197)
+  * Add missing tests for `Command` (#2216)
+  * Update `rr` link in CONTRIBUTING doc (#2247)
+  * Streamline Cucumber execution of `jekyll` subcommands (#2258)
+  * Refactor `Commands::Serve`. (#2269)
+  * Refactor `highlight` tag (#2154)
+  * Update `Util` hash functions with latest from Rails (#2273)
+  * Workaround for Travis bug (#2290)
+
+### Site Enhancements
+  * Document Kramdown's GFM parser option (#1791)
+  * Move CSS to includes & update normalize.css to v2.1.3 (#1787)
+  * Minify CSS only in production (#1803)
+  * Fix broken link to installation of Ruby on Mountain Lion blog post on
+    Troubleshooting docs page (#1797)
+  * Fix issues with 1.4.1 release blog post (#1804)
+  * Add note about deploying to OpenShift (#1812)
+  * Collect all Windows-related docs onto one page (#1818)
+  * Fixed typo in datafiles doc page (#1854)
+  * Clarify how to access `site` in docs (#1864)
+  * Add closing `<code>` tag to `context.registers[:site]` note (#1867)
+  * Fix link to @mojombo's site source (#1897)
+  * Add `paginate: nil` to default configuration in docs (#1896)
+  * Add link to our License in the site footer (#1889)
+  * Add a charset note in "Writing Posts" doc page (#1902)
+  * Disallow selection of path and prompt in bash examples
+  * Add jekyll-compass to the plugin list (#1923)
+  * Add note in Posts docs about stripping `<p>` tags from excerpt (#1933)
+  * Add additional info about the new exclude behavior (#1938)
+  * Linkify 'awesome contributors' to point to the contributors graph on
+    GitHub (#1940)
+  * Update `docs/sites.md` link to GitHub Training materials (#1949)
+  * Update `master` with the release info from 1.4.3 (#1947)
+  * Define docs nav in datafile (#1953)
+  * Clarify the docs around the naming convention for posts (#1971)
+  * Add missing `next` and `previous` docs for post layouts and templates (#1970)
+  * Add note to `Writing posts` page about how to strip html from excerpt (#1962)
+  * Add `jekyll-humanize` plugin to plugin list (#1998)
+  * Add `jekyll-font-awesome` plugin to plugin list (#1999)
+  * Add `sublime-jekyll` to list of Editor plugins (#2001)
+  * Add `vim-jekyll` to the list of Editor plugins (#2005)
+  * Fix non-semantic nesting of `p` tags in `news_item` layout (#2013)
+  * Document destination folder cleaning (#2016)
+  * Updated instructions for NearlyFreeSpeech.NET installation (#2015)
+  * Update link to rack-jekyll on "Deployment Methods" page (#2047)
+  * Fix typo in /docs/configuration (#2073)
+  * Fix count in docs for `site.static_files` (#2077)
+  * Update configuration docs to indicate utf-8 is the default for 2.0.0
+    and ASCII for 1.9.3 (#2074)
+  * Add info about unreleased feature to the site (#2061)
+  * Add whitespace to liquid example in GitHub Pages docs (#2084)
+  * Clarify the way Sass and CoffeeScript files are read in and output (#2067)
+  * Add lyche gallery tag plugin link to list of plugins (#2094)
+  * Add Jekyll Pages Directory plugin to list of plugins (#2096)
+  * Update Configuration docs page with new markdown extension (#2102)
+  * Add `jekyll-image-set` to the list of third-party plugins (#2105)
+  * Losslessly compress images (#2128)
+  * Update normalize.css to 3.0.0 (#2126)
+  * Update modernizr to v2.7.1 (#2129)
+  * Add `jekyll-ordinal` to list of third-party plugins (#2150)
+  * Add `jekyll_figure` to list of third-party plugins (#2158)
+  * Clarify the documentation for safe mode (#2163)
+  * Some HTML tidying (#2130)
+  * Remove modernizr and use html5shiv.js directly for IE less than v9 (#2131)
+  * Remove unused images (#2187)
+  * Use `array_to_sentence_string` filter when outputting news item
+    categories (#2191)
+  * Add link to Help repo in primary navigation bar (#2177)
+  * Switch to using an ico file for the shortcut icon (#2193)
+  * Use numbers to specify font weights and only bring in font weights used (#2185)
+  * Add a link to the list of all tz database time zones (#1824)
+  * Clean-up and improve documentation `feed.xml` (#2192)
+  * Remove duplicate entry in list of third-party plugins (#2206)
+  * Reduce the whitespace in the favicon. (#2213)
+  * Add `jekyll-page-collections` to list of third-party plugins (#2215)
+  * Add a cross-reference about `post_url` (#2243)
+  * Add `jekyll-live-tiles` to list of third-party plugins (#2250)
+  * Fixed broken link to GitHub training material site source (#2257)
+  * Update link to help repo, now called `jekyll-help` (#2277)
+  * Fix capitalization of 'Jekyll' on Deployment Methods page (#2291)
+  * Include plugins by sonnym in list of third-party plugins (#2297)
+  * Add deprecated articles keeper filter to list of third-party plugins (#2300)
+  * Simplify and improve our CSS. (#2127)
+  * Use black text color for the mobile navbar (#2306)
+  * Use the built in date filter and `site.time` for the copyright year. (#2305)
+  * Update html5shiv to v3.7.2 (#2304)
+  * Add 2.0.0 release post (#2298)
+  * Add docs for custom markdown processors (#2298)
+  * Add docs for `where` and `group_by` Liquid filters (#2298)
+  * Remove notes in docs for unreleased features (#2309)
+
 ## 1.5.1 / 2014-03-27
 
 ### Bug Fixes
 
-* Only strip the drive name if it begins the string (#2176)
+  * Only strip the drive name if it begins the string (#2176)
 
 ## 1.5.0 / 2014-03-24
 
@@ -30,12 +300,11 @@
 
 ### Development Fixes
 
-  * Lock `cucmber` at `1.3.11` (#2167)
+  * Lock `cucumber` at `1.3.11` (#2167)
 
 ## 1.4.3 / 2014-01-13
 
 ### Bug Fixes
-
   * Patch show-stopping security vulnerabilities (#1944)
 
 ## 1.4.2 / 2013-12-16
@@ -155,7 +424,7 @@
   * Refactor Site#render (#1638)
   * Remove duplication in command line options (#1637)
   * Add tests for all the coderay options (#1543)
-  * Improve some of the cucumber test code (#1493)
+  * Improve some of the Cucumber test code (#1493)
   * Improve comparisons of timestamps by ignoring the seconds (#1582)
 
 ### Site Enhancements
@@ -325,7 +594,7 @@
   * Latest posts first in non-LSI `related_posts` (#1271)
 
 ### Development Fixes
-  * Merge the theme and layout cucumber steps into one step (#1151)
+  * Merge the theme and layout Cucumber steps into one step (#1151)
   * Restrict activesupport dependency to pre-4.0.0 to maintain compatibility with `<= 1.9.2`
   * Include/exclude deprecation handling simplification (#1284)
   * Convert README to Markdown. (#1267)
@@ -355,7 +624,7 @@
   * Update contributor information (#1192)
   * Update URL of article about Blogger migration (#1242)
   * Specify that RedCarpet is the default for new Jekyll sites on Quickstart page (#1247)
-  * Added site.pages to Variables page in docs (#1251)
+  * Added `site.pages` to Variables page in docs (#1251)
   * Add Youku and Tudou Embed link on Plugins page. (#1250)
   * Add note that `gist` tag supports private gists. (#1248)
   * Add `jekyll-timeago` to list of third-party plugins. (#1260)
@@ -373,7 +642,7 @@
 
 ### Minor Enhancements
   * Add support to gist tag for private gists. (#1189)
-  * Fail loudly when MaRuKu errors out (#1190)
+  * Fail loudly when Maruku errors out (#1190)
   * Move the building of related posts into their own class (#1057)
   * Removed trailing spaces in several places throughout the code (#1116)
   * Add a `--force` option to `jekyll new` (#1115)
@@ -439,7 +708,7 @@
 ## 1.0.1 / 2013-05-08
 
 ### Minor Enhancements
-  * Do not force use of toc_token when using generate_tok in RDiscount (#1048)
+  * Do not force use of `toc_token` when using `generate_tok` in RDiscount (#1048)
   * Add newer `language-` class name prefix to code blocks (#1037)
   * Commander error message now preferred over process abort with incorrect args (#1040)
 
@@ -462,15 +731,15 @@
 ## 1.0.0 / 2013-05-06
 
 ### Major Enhancements
-  * Add `jekyll new` subcommand: generate a jekyll scaffold (#764)
-  * Refactored jekyll commands into subcommands: build, serve, and migrate. (#690)
+  * Add `jekyll new` subcommand: generate a Jekyll scaffold (#764)
+  * Refactored Jekyll commands into subcommands: build, serve, and migrate. (#690)
   * Removed importers/migrators from main project, migrated to jekyll-import sub-gem (#793)
   * Added ability to render drafts in `_drafts` folder via command line (#833)
   * Add ordinal date permalink style (/:categories/:year/:y_day/:title.html) (#928)
 
 ### Minor Enhancements
   * Site template HTML5-ified (#964)
-  * Use post's directory path when matching for the post_url tag (#998)
+  * Use post's directory path when matching for the `post_url` tag (#998)
   * Loosen dependency on Pygments so it's only required when it's needed (#1015)
   * Parse strings into Time objects for date-related Liquid filters (#1014)
   * Tell the user if there is no subcommand specified (#1008)
@@ -484,7 +753,7 @@
   * Expose new attribute to Liquid via `page`: `page.path` (#951)
   * Accept multiple config files from command line (#945)
   * Add page variable to liquid custom tags and blocks (#413)
-  * Add paginator.previous_page_path and paginator.next_page_path (#942)
+  * Add `paginator.previous_page_path` and `paginator.next_page_path` (#942)
   * Backwards compatibility for 'auto' (#821, #934)
   * Added date_to_rfc822 used on RSS feeds (#892)
   * Upgrade version of pygments.rb to 0.4.2 (#927)
@@ -503,7 +772,7 @@
   * Relaxed Kramdown version to 0.14 (#808)
   * Aliased `jekyll server` to `jekyll serve`. (#792)
   * Updated gem versions for Kramdown, Rake, Shoulda, Cucumber, and RedCarpet. (#744)
-  * Refactored jekyll subcommands into Jekyll::Commands submodule, which now contains them (#768)
+  * Refactored Jekyll subcommands into Jekyll::Commands submodule, which now contains them (#768)
   * Rescue from import errors in Wordpress.com migrator (#671)
   * Massively accelerate LSI performance (#664)
   * Truncate post slugs when importing from Tumblr (#496)
@@ -518,7 +787,7 @@
   * Paginate in subdirectories properly (#1016)
   * Ensure post and page URLs have a leading slash (#992)
   * Catch all exceptions, not just StandardError descendents (#1007)
-  * Bullet-proof limit_posts option (#1004)
+  * Bullet-proof `limit_posts` option (#1004)
   * Read in YAML as UTF-8 to accept non-ASCII chars (#836)
   * Fix the CLI option `--plugins` to actually accept dirs and files (#993)
   * Allow 'excerpt' in YAML Front-Matter to override the extracted excerpt (#946)
@@ -530,10 +799,10 @@
   * Force usage of older directory_watcher gem as 1.5 is broken (#883)
   * Ensure all Post categories are downcase (#842, #872)
   * Force encoding of the rdiscount TOC to UTF8 to avoid conversion errors (#555)
-  * Patch for multibyte URI problem with jekyll serve (#723)
+  * Patch for multibyte URI problem with `jekyll serve` (#723)
   * Order plugin execution by priority (#864)
   * Fixed Page#dir and Page#url for edge cases (#536)
-  * Fix broken post_url with posts with a time in their YAML Front-Matter (#831)
+  * Fix broken `post_url` with posts with a time in their YAML Front-Matter (#831)
   * Look for plugins under the source directory (#654)
   * Tumblr Migrator: finds `_posts` dir correctly, fixes truncation of long
       post names (#775)
@@ -555,7 +824,7 @@
 ### Development Fixes
   * Exclude Cucumber 1.2.4, which causes tests to fail in 1.9.2 (#938)
   * Added "features:html" rake task for debugging purposes, cleaned up
-      cucumber profiles (#832)
+      Cucumber profiles (#832)
   * Explicitly require HTTPS rubygems source in Gemfile (#826)
   * Changed Ruby version for development to 1.9.3-p374 from p362 (#801)
   * Including a link to the GitHub Ruby style guide in CONTRIBUTING.md (#806)
@@ -565,6 +834,7 @@
   * Switch to Simplecov for coverage report (#765)
 
 ## 0.12.1 / 2013-02-19
+
 ### Minor Enhancements
   * Update Kramdown version to 0.14.1 (#744)
   * Test Enhancements
@@ -573,11 +843,12 @@
   * Update Redcarpet version to 2.2.2 (#744)
 
 ## 0.12.0 / 2012-12-22
+
 ### Minor Enhancements
   * Add ability to explicitly specify included files (#261)
-  * Add --default-mimetype option (#279)
+  * Add `--default-mimetype` option (#279)
   * Allow setting of RedCloth options (#284)
-  * Add post_url Liquid tag for internal post linking (#369)
+  * Add `post_url` Liquid tag for internal post linking (#369)
   * Allow multiple plugin dirs to be specified (#438)
   * Inline TOC token support for RDiscount (#333)
   * Add the option to specify the paginated url format (#342)
@@ -587,9 +858,9 @@
   * Bug Fixes
   * Allow some special characters in highlight names
   * URL escape category names in URL generation (#360)
-  * Fix error with limit_posts (#442)
+  * Fix error with `limit_posts` (#442)
   * Properly select dotfile during directory scan (#363, #431, #377)
-  * Allow setting of Kramdown smart_quotes (#482)
+  * Allow setting of Kramdown `smart_quotes` (#482)
   * Ensure front-matter is at start of file (#562)
 
 ## 0.11.2 / 2011-12-27
@@ -602,6 +873,7 @@
   * Update dependencies
 
 ## 0.11.0 / 2011-07-10
+
 ### Major Enhancements
   * Add command line importer functionality (#253)
   * Add Redcarpet Markdown support (#318)
@@ -623,9 +895,10 @@
 
 ## 0.10.0 / 2010-12-16
   * Bug Fixes
-  * Add --no-server option.
+  * Add `--no-server` option.
 
 ## 0.9.0 / 2010-12-15
+
 ### Minor Enhancements
   * Use OptionParser's `[no-]` functionality for better boolean parsing.
   * Add Drupal migrator (#245)
@@ -634,11 +907,12 @@
   * Add Marley migrator (#28)
 
 ## 0.8.0 / 2010-11-22
+
 ### Minor Enhancements
   * Add wordpress.com importer (#207)
-  * Add --limit-posts cli option (#212)
-  * Add uri_escape filter (#234)
-  * Add --base-url cli option (#235)
+  * Add `--limit-posts` cli option (#212)
+  * Add `uri_escape` filter (#234)
+  * Add `--base-url` cli option (#235)
   * Improve MT migrator (#238)
   * Add kramdown support (#239)
   * Bug Fixes
@@ -647,6 +921,7 @@
   * Prevent `_includes` dir from being a symlink
 
 ## 0.7.0 / 2010-08-24
+
 ### Minor Enhancements
   * Add support for rdiscount extensions (#173)
   * Bug Fixes
@@ -658,13 +933,14 @@
   * Fix Rakefile 'release' task (tag pushing was missing origin)
   * Ensure that RedCloth is loaded when textilize filter is used (#183)
   * Expand source, destination, and plugin paths (#180)
-  * Fix page.url to include full relative path (#181)
+  * Fix `page.url` to include full relative path (#181)
 
 ## 0.6.1 / 2010-06-24
   * Bug Fixes
   * Fix Markdown Pygments prefix and suffix (#178)
 
 ## 0.6.0 / 2010-06-23
+
 ### Major Enhancements
   * Proper plugin system (#19, #100)
   * Add safe mode so unsafe converters/generators can be added
@@ -675,9 +951,9 @@
 ### Minor Enhancements
   * Inclusion/exclusion of future dated posts (#59)
   * Generation for a specific time (#59)
-  * Allocate site.time on render not per site_payload invocation (#59)
+  * Allocate `site.time` on render not per site_payload invocation (#59)
   * Pages now present in the site payload and can be used through the
-      site.pages and site.html_pages variables
+      `site.pages` and `site.html_pages` variables
   * Generate phase added to site#process and pagination is now a generator
   * Switch to RakeGem for build/test process
   * Only regenerate static files when they have changed (#142)
@@ -689,9 +965,10 @@
   * Fix extension munging when pretty permalinks are enabled (#64)
   * Stop sorting categories (#33)
   * Preserve generated attributes over front matter (#119)
-  * Fix source directory binding using Dir.pwd (#75)
+  * Fix source directory binding using `Dir.pwd` (#75)
 
 ## 0.5.7 / 2010-01-12
+
 ### Minor Enhancements
   * Allow overriding of post date in the front matter (#62, #38)
   * Bug Fixes
@@ -699,7 +976,7 @@
   * Empty tags causes error in read_posts (#84)
   * Fix pagination to adhere to read/render/write paradigm
   * Test Enhancement
-  * cucumber features no longer use site.posts.first where a better
+  * Cucumber features no longer use site.posts.first where a better
       alternative is available
 
 ## 0.5.6 / 2010-01-08
@@ -757,6 +1034,7 @@
   * Added Date#xmlschema for Ruby versions < 1.9
 
 ## 0.5.1 / 2009-05-06
+
 ### Major Enhancements
   * Next/previous posts in site payload (@pantulis, @tomo)
   * Permalink templating system
@@ -771,6 +1049,7 @@
   * CGI escaped post titles (@Chrononaut)
 
 ## 0.5.0 / 2009-04-07
+
 ### Minor Enhancements
   * Ability to set post categories via YAML (@qrush)
   * Ability to set prevent a post from publishing via YAML (@qrush)
@@ -789,18 +1068,20 @@
   * Add Cucumber acceptance test suite (@qrush, @technicalpickles)
 
 ## 0.4.1
+
 ### Minor Enhancements
   * Changed date format on wordpress converter (zeropadding) (@dysinger)
   * Bug Fixes
-  * Add jekyll binary as executable to gemspec (@dysinger)
+  * Add Jekyll binary as executable to gemspec (@dysinger)
 
 ## 0.4.0 / 2009-02-03
+
 ### Major Enhancements
   * Switch to Jeweler for packaging tasks
 
 ### Minor Enhancements
   * Type importer (@codeslinger)
-  * site.topics accessor (@baz)
+  * `site.topics` accessor (@baz)
   * Add `array_to_sentence_string` filter (@mchung)
   * Add a converter for textpattern (@PerfectlyNormal)
   * Add a working Mephisto / MySQL converter (@ivey)
@@ -815,8 +1096,9 @@
   * Fix site payload available to files (@matrix9180)
 
 ## 0.3.0 / 2008-12-24
+
 ### Major Enhancements
-  * Added --server option to start a simple WEBrick server on destination
+  * Added `--server` option to start a simple WEBrick server on destination
       directory (@johnreilly and @mchung)
 
 ### Minor Enhancements
@@ -835,23 +1117,24 @@
 ## 0.2.1 / 2008-12-15
   * Major Changes
   * Use Maruku (pure Ruby) for Markdown by default (@mreid)
-  * Allow use of RDiscount with --rdiscount flag
+  * Allow use of RDiscount with `--rdiscount` flag
 
 ### Minor Enhancements
   * Don't load directory_watcher unless it's needed (@pjhyett)
 
 ## 0.2.0 / 2008-12-14
   * Major Changes
-  * related_posts is now found in site.related_posts
+  * related_posts is now found in `site.related_posts`
 
 ## 0.1.6 / 2008-12-13
   * Major Features
   * Include files in `_includes` with `{% include x.textile %}`
 
 ## 0.1.5 / 2008-12-12
+
 ### Major Enhancements
-  * Code highlighting with Pygments if --pygments is specified
-  * Disable true LSI by default, enable with --lsi
+  * Code highlighting with Pygments if `--pygments` is specified
+  * Disable true LSI by default, enable with `--lsi`
 
 ### Minor Enhancements
   * Output informative message if RDiscount is not available (@JackDanger)
@@ -870,7 +1153,7 @@
   * Code hilighting (@vanpelt)
   * Autobuild
   * Bug Fixes
-  * Accept both \r\n and \n in YAML header (@vanpelt)
+  * Accept both `\r\n` and `\n` in YAML header (@vanpelt)
 
 ## 0.1.2 / 2008-11-22
   * Major Features
diff --git a/LICENSE b/LICENSE
index c01df2b..0e5f844 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
 (The MIT License)
 
-Copyright (c) 2008 Tom Preston-Werner
+Copyright (c) 2008-2014 Tom Preston-Werner
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the 'Software'), to deal
@@ -18,4 +18,4 @@ 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.
\ No newline at end of file
+SOFTWARE.
diff --git a/README.markdown b/README.markdown
index 6da4d26..704a66b 100644
--- a/README.markdown
+++ b/README.markdown
@@ -1,15 +1,19 @@
-# Jekyll
+# [Jekyll](http://jekyllrb.com/)
 
-[![Gem Version](https://badge.fury.io/rb/jekyll.png)](http://badge.fury.io/rb/jekyll)
+[![Gem Version](https://badge.fury.io/rb/jekyll.svg)](http://badge.fury.io/rb/jekyll)
 
-[![Build Status](https://secure.travis-ci.org/jekyll/jekyll.png?branch=master)](https://travis-ci.org/jekyll/jekyll)
+[![Build Status](https://secure.travis-ci.org/jekyll/jekyll.svg?branch=master)](https://travis-ci.org/jekyll/jekyll)
 [![Code Climate](https://codeclimate.com/github/jekyll/jekyll.png)](https://codeclimate.com/github/jekyll/jekyll)
-[![Dependency Status](https://gemnasium.com/jekyll/jekyll.png)](https://gemnasium.com/jekyll/jekyll)
+[![Dependency Status](https://gemnasium.com/jekyll/jekyll.svg)](https://gemnasium.com/jekyll/jekyll)
 [![Coverage Status](https://coveralls.io/repos/jekyll/jekyll/badge.png)](https://coveralls.io/r/jekyll/jekyll)
 
-By Tom Preston-Werner, Nick Quaranto, and many awesome contributors!
+By Tom Preston-Werner, Nick Quaranto, and many [awesome contributors](https://github.com/jekyll/jekyll/graphs/contributors)!
 
-Jekyll is a simple, blog aware, static site generator. It takes a template directory (representing the raw form of a website), runs it through Textile or Markdown and Liquid converters, and spits out a complete, static website suitable for serving with Apache or your favorite web server. This is also the engine behind [GitHub Pages](http://pages.github.com), which you can use to host your project's page or blog right here from GitHub.
+Jekyll is a simple, blog-aware, static site generator perfect for personal, project, or organization sites. Think of it like a file-based CMS, without all the complexity. Jekyll takes your content, renders Markdown and Liquid templates, and spits out a complete, static website ready to be served by Apache, Nginx or another web server. Jekyll is the engine behind [GitHub Pages](http://pages.github.com), which you can use to host sites right from your GitHub repositories.
+
+## Philosophy
+
+Jekyll does what you tell it to do — no more, no less. It doesn't try to outsmart users by making bold assumptions, nor does it burden them with needless complexity and configuration. Put simply, Jekyll gets out of your way and allows you to concentrate on what truly matters: your content.
 
 ## Getting Started
 
@@ -34,16 +38,16 @@ Jekyll is a simple, blog aware, static site generator. It takes a template direc
 * Colorator: Colorizes command line output (Ruby)
 * Classifier: Generating related posts (Ruby)
 * Directory Watcher: Auto-regeneration of sites (Ruby)
+* Kramdown: Default Markdown engine (Ruby)
 * Liquid: Templating system (Ruby)
-* Maruku: Default markdown engine (Ruby)
 * Pygments.rb: Syntax highlighting (Ruby/Python)
 * RedCarpet: Markdown engine (Ruby)
 * Safe YAML: YAML Parser built for security (Ruby)
 
 ## Developer Dependencies
 
-* Kramdown: Markdown-superset converter (Ruby)
 * Launchy: Cross-platform file launcher (Ruby)
+* Maruku: Markdown-superset interpreter (Ruby)
 * RDiscount: Discount Markdown Processor (Ruby)
 * RedCloth: Textile support (Ruby)
 * RedGreen: Nicer test output (Ruby)
diff --git a/Rakefile b/Rakefile
index b8eb85a..8c38b20 100644
--- a/Rakefile
+++ b/Rakefile
@@ -5,6 +5,7 @@ require 'date'
 require 'yaml'
 
 $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), *%w[lib]))
+require 'jekyll/version'
 
 #############################################################################
 #
@@ -17,20 +18,7 @@ def name
 end
 
 def version
-  line = File.read("lib/#{name}.rb")[/^\s*VERSION\s*=\s*.*/]
-  line.match(/.*VERSION\s*=\s*['"](.*)['"]/)[1]
-end
-
-def date
-  Date.today.to_s
-end
-
-def file_date
-  Date.today.strftime("%F")
-end
-
-def rubyforge_project
-  name
+  Jekyll::VERSION
 end
 
 def gemspec_file
@@ -41,12 +29,8 @@ def gem_file
   "#{name}-#{version}.gem"
 end
 
-def replace_header(head, header_name)
-  head.sub!(/(\.#{header_name}\s*= ').*'/) { "#{$1}#{send(header_name)}'"}
-end
-
 def normalize_bullets(markdown)
-  markdown.gsub(/\s{2}\*{1}/, "-")
+  markdown.gsub(/\n\s{2}\*{1}/, "\n-")
 end
 
 def linkify_prs(markdown)
@@ -84,7 +68,7 @@ end
 #
 #############################################################################
 
-if RUBY_VERSION > '1.9' && ENV["TRAVIS"] == "true"
+if ENV["TRAVIS"] == "true"
   require 'coveralls/rake/task'
   Coveralls::RakeTask.new
 
@@ -156,7 +140,7 @@ namespace :site do
 
   desc "Update normalize.css library to the latest version and minify"
   task :update_normalize_css do
-    Dir.chdir("site/css") do
+    Dir.chdir("site/_includes/css") do
       sh 'curl "http://necolas.github.io/normalize.css/latest/normalize.css" -o "normalize.scss"'
       sh 'sass "normalize.scss":"normalize.css" --style compressed'
       sh 'rm "normalize.scss"'
@@ -169,7 +153,7 @@ namespace :site do
     puts "Checking for gh-pages dir..."
     unless File.exist?("./gh-pages")
       puts "No gh-pages directory found. Run the following commands first:"
-      puts "  `git clone git at github.com:mojombo/jekyll gh-pages"
+      puts "  `git clone git at github.com:jekyll/jekyll gh-pages"
       puts "  `cd gh-pages"
       puts "  `git checkout gh-pages`"
       exit(1)
@@ -192,7 +176,7 @@ namespace :site do
     sha = `git log`.match(/[a-z0-9]{40}/)[0]
     Dir.chdir('gh-pages') do
       sh "git add ."
-      sh "git commit -m 'Updating to #{sha}.'"
+      sh "git commit --allow-empty -m 'Updating to #{sha}.'"
       sh "git push origin gh-pages"
     end
     puts 'Done.'
@@ -252,8 +236,8 @@ end
 #############################################################################
 
 task :release => :build do
-  unless `git branch` =~ /^(\* master|\* v1-stable)$/
-    puts "You must be on the master branch or the v1-stable branch to release!"
+  unless `git branch` =~ /^\* master$/
+    puts "You must be on the master branch to release!"
     exit!
   end
   sh "git commit --allow-empty -m 'Release #{version}'"
@@ -263,36 +247,8 @@ task :release => :build do
   sh "gem push pkg/#{name}-#{version}.gem"
 end
 
-task :build => :gemspec do
-  sh "mkdir -p pkg"
+task :build do
+  mkdir_p "pkg"
   sh "gem build #{gemspec_file}"
   sh "mv #{gem_file} pkg"
 end
-
-task :gemspec do
-  # read spec file and split out manifest section
-  spec = File.read(gemspec_file)
-  head, manifest, tail = spec.split("  # = MANIFEST =\n")
-
-  # replace name version and date
-  replace_header(head, :name)
-  replace_header(head, :version)
-  replace_header(head, :date)
-  #comment this out if your rubyforge_project has a different name
-  replace_header(head, :rubyforge_project)
-
-  # determine file list from git ls-files
-  files = `git ls-files`.
-    split("\n").
-    sort.
-    reject { |file| file =~ /^\./ }.
-    reject { |file| file =~ /^(rdoc|pkg|coverage)/ }.
-    map { |file| "    #{file}" }.
-    join("\n")
-
-  # piece file back together and write
-  manifest = "  s.files = %w[\n#{files}\n  ]\n"
-  spec = [head, manifest, tail].join("  # = MANIFEST =\n")
-  File.open(gemspec_file, 'w') { |io| io.write(spec) }
-  puts "Updated #{gemspec_file}"
-end
diff --git a/bin/jekyll b/bin/jekyll
index 8f91698..194295c 100755
--- a/bin/jekyll
+++ b/bin/jekyll
@@ -3,156 +3,38 @@ STDOUT.sync = true
 
 $:.unshift File.join(File.dirname(__FILE__), *%w{ .. lib })
 
-require 'commander/import'
 require 'jekyll'
+require 'mercenary'
 
-Jekyll::Deprecator.process(ARGV)
-
-program :name, 'jekyll'
-program :version, Jekyll::VERSION
-program :description, 'Jekyll is a blog-aware, static site generator in Ruby'
-
-default_command :default
-
-global_option '-s', '--source [DIR]', 'Source directory (defaults to ./)'
-global_option '-d', '--destination [DIR]', 'Destination directory (defaults to ./_site)'
-global_option '--safe', 'Safe mode (defaults to false)'
-global_option '-p', '--plugins PLUGINS_DIR1[,PLUGINS_DIR2[,...]]', Array, 'Plugins directory (defaults to ./_plugins)'
-global_option '--layouts DIR', String, 'Layouts directory (defaults to ./_layouts)'
-
-# Option names don't always directly match the configuration value we'd like.
-# This method will rename options to match what Jekyll configuration expects.
-#
-# options - The Hash of options from Commander.
-#
-# Returns the normalized Hash.
-def normalize_options(options)
-  if drafts_state = options.delete(:drafts)
-    options[:show_drafts] = drafts_state
+%w[jekyll-import].each do |blessed_gem|
+  begin
+    require blessed_gem
+  rescue LoadError
   end
-  options
 end
 
-def add_build_options(c)
-  c.option '--config CONFIG_FILE[,CONFIG_FILE2,...]', Array, 'Custom configuration file'
-  c.option '--future', 'Publishes posts with a future date'
-  c.option '--limit_posts MAX_POSTS', Integer, 'Limits the number of posts to parse and publish'
-  c.option '-w', '--watch', 'Watch for changes and rebuild'
-  c.option '--lsi', 'Use LSI for improved related posts'
-  c.option '-D', '--drafts', 'Render posts in the _drafts folder'
-  c.option '-V', '--verbose', 'Print verbose output.'
-end
-
-command :default do |c|
-  c.action do |args, options|
-    if args.empty?
-      command(:help).run
-    else
-      Jekyll.logger.abort_with "Invalid command. Use --help for more information"
-    end
-  end
-end
-
-command :new do |c|
-  c.syntax = 'jekyll new PATH'
-  c.description = 'Creates a new Jekyll site scaffold in PATH'
-
-  c.option '--force', 'Force creation even if PATH already exists'
-  c.option '--blank', 'Creates scaffolding but with empty files'
-
-  c.action do |args, options|
-    Jekyll::Commands::New.process(args, options.__hash__)
-  end
-end
-
-command :build do |c|
-  c.syntax = 'jekyll build [options]'
-  c.description = 'Build your site'
-
-  add_build_options(c)
-
-  c.action do |args, options|
-    options = normalize_options(options.__hash__)
-    options = Jekyll.configuration(options)
-    Jekyll::Commands::Build.process(options)
-  end
-end
-
-command :serve do |c|
-  c.syntax = 'jekyll serve [options]'
-  c.description = 'Serve your site locally'
-
-  add_build_options(c)
-
-  c.option '-B', '--detach', 'Run the server in the background (detach)'
-  c.option '-P', '--port [PORT]', 'Port to listen on'
-  c.option '-H', '--host [HOST]', 'Host to bind to'
-  c.option '-b', '--baseurl [URL]', 'Base URL'
-
-  c.action do |args, options|
-    options.default :serving => true
-
-    options = normalize_options(options.__hash__)
-    options = Jekyll.configuration(options)
-    Jekyll::Commands::Build.process(options)
-    Jekyll::Commands::Serve.process(options)
-  end
-end
-alias_command :server, :serve
-
-command :doctor do |c|
-  c.syntax = 'jekyll doctor'
-  c.description = 'Search site and print specific deprecation warnings'
-
-  c.option '--config CONFIG_FILE[,CONFIG_FILE2,...]', Array, 'Custom configuration file'
-
-  c.action do |args, options|
-    options = normalize_options(options.__hash__)
-    options = Jekyll.configuration(options)
-    Jekyll::Commands::Doctor.process(options)
-  end
-end
-alias_command :hyde, :doctor
-
-command :docs do |c|
-  c.syntax = 'jekyll docs'
-  c.description = "Launch local server with docs for Jekyll v#{Jekyll::VERSION}"
-
-  c.option '-p', '--port [PORT]', 'Port to listen on'
-  c.option '-u', '--host [HOST]', 'Host to bind to'
+Jekyll::Deprecator.process(ARGV)
 
-  c.action do |args, options|
-    options = normalize_options(options.__hash__)
-    options = Jekyll.configuration(options.merge!({
-      'source' => File.expand_path("../site", File.dirname(__FILE__)),
-      'destination' => File.expand_path("../site/_site", File.dirname(__FILE__))
-    }))
-    puts options
-    Jekyll::Commands::Build.process(options)
-    Jekyll::Commands::Serve.process(options)
-  end
-end
+Mercenary.program(:jekyll) do |p|
+  p.version Jekyll::VERSION
+  p.description 'Jekyll is a blog-aware, static site generator in Ruby'
+  p.syntax 'jekyll <subcommand> [options]'
 
-command :import do |c|
-  c.syntax = 'jekyll import <platform> [options]'
-  c.description = 'Import your old blog to Jekyll'
+  p.option 'source', '-s', '--source [DIR]', 'Source directory (defaults to ./)'
+  p.option 'destination', '-d', '--destination [DIR]', 'Destination directory (defaults to ./_site)'
+  p.option 'safe', '--safe', 'Safe mode (defaults to false)'
+  p.option 'plugins', '-p', '--plugins PLUGINS_DIR1[,PLUGINS_DIR2[,...]]', Array, 'Plugins directory (defaults to ./_plugins)'
+  p.option 'layouts', '--layouts DIR', String, 'Layouts directory (defaults to ./_layouts)'
 
-  c.option '--source STRING', 'Source file or URL to migrate from'
-  c.option '--file STRING', 'File to migrate from'
-  c.option '--dbname STRING', 'Database name to migrate from'
-  c.option '--user STRING', 'Username to use when migrating'
-  c.option '--pass STRING', 'Password to use when migrating'
-  c.option '--host STRING', 'Host address to use when migrating'
-  c.option '--prefix STRING', 'Database table prefix to use when migrating'
+  Jekyll::Command.subclasses.each { |c| c.init_with_program(p) }
 
-  c.action do |args, options|
-    begin
-      require 'jekyll-import'
-    rescue LoadError
-      msg  = "You must install the 'jekyll-import' gem before continuing.\n"
-      msg += "* Please see the documentation at http://jekyllrb.com/docs/migrations/ for instructions.\n"
-      abort msg
+  p.action do |args, options|
+    if args.empty?
+      puts p
+    else
+      unless p.has_command?(args.first)
+        Jekyll.logger.abort_with "Invalid command. Use --help for more information"
+      end
     end
-    Jekyll::Commands::Import.process(args.first, options)
   end
 end
diff --git a/checksums.yaml.gz b/checksums.yaml.gz
index 1b92fa9..8682543 100644
Binary files a/checksums.yaml.gz and b/checksums.yaml.gz differ
diff --git a/docs/jp/CONTRIBUTING.jp.markdown b/docs/jp/CONTRIBUTING.jp.markdown
new file mode 100644
index 0000000..1c66d01
--- /dev/null
+++ b/docs/jp/CONTRIBUTING.jp.markdown
@@ -0,0 +1,93 @@
+コントリビュート
+==========
+
+あなたは Jekyll に投じるすばらしいアイディアを持っています。
+すばらしいことです!次の事柄を心に留めてください。
+
+* **テストなしではコントリビュートはできません。**
+* もし、既存の機能への小さな修正やパッチを作成したなら、シンプルなテストを行います。
+  現在のテストスイートの範囲にとどまり、そして
+  [Shoulda](http://github.com/thoughtbot/shoulda/tree/master) や
+  [RR](http://github.com/btakita/rr/tree/master) を使用してください。
+* もし、それが新しい機能の場合は、必ず新しい
+  [Cucumber](https://github.com/cucumber/cucumber/) の機能を作成し、
+  必要に応じて手順を再利用します。
+  また、あなたがフォークした `site` に
+  急ぎいくつかのドキュメントを用意し、一度マージを行い
+  メイン `site` の jekyllrb.com に転送していただければ幸いです。
+* あなたのコントリビュートによって Jekyll の振る舞いが変わった場合、ドキュメントを更新すべきです。
+  それは `site/docs` にあります。
+  もし、 docs に情報の誤りがあった場合、遠慮なく追加してください。
+  すばらしいドキュメントはすばらしいプロジェクトを作ります!
+* Ruby のコードを変更するときは、 [GitHub Ruby Styleguide](https://github.com/styleguide/ruby)
+  に従ってください。
+* **小さなプルリクエスト** に最善を尽くしてください。
+  簡単に提案された変更はレビューされ、マージされる可能性が高いです。
+* プルリクエストを送信するとき、プルリクエストのボディを賢明に使用してください。
+  変更されたかどうかの記述、変更の背後にある動機、 [完了したかどうかのタスクリスト](http://git.io/gfm-tasks)
+  もレビュー時間を早めます。
+
+テストの依存関係
+-----------------
+
+テストスイートの実行や gem のビルドのために、
+Jekyll の依存ツールをインストールする必要があります。
+Jekyll は Bundler を使用しており、 `bundle` コマンドを実行すると全ての設定が迅速に行われます!
+
+    $ bundle
+
+はじめる前に、テストを実行し、必ずテストが通ることを
+確認してください(あなたの環境が適切に設定されているかを確認するために):
+
+    $ bundle exec rake test
+    $ bundle exec rake features
+
+ワークフロー
+--------
+
+これは、あなたの作業がプロジェクトにマージされるもっとも直接的な方法です:
+
+* プロジェクトをフォークします。
+* あなたのフォークプロジェクトをクローンします ( `git clone git at github.com:<username>/jekyll.git` )。
+* トピックブランチを作成し、あなたの変更を含んでください ( `git checkout -b my_awesome_feature` )。
+* ハックし、テストを追加します。必ずしもこの順番でなくてかまいません
+* `rake` を実行し、テストが必ず全て通ることを確認してください
+* 必要に応じて、エラーがないようにコミットを論理的な塊にリベースしてください
+* ブランチをプッシュしてください ( `git push origin my_awesome_feature` ).
+* jekyll/jekyll プロジェクトの master ブランチに対してプルリクエストを作成し、
+  あなたの変更内容と、なぜそれをマージすべきかを記述してください
+
+ドキュメントの更新
+----------------------
+
+私たちは Jekyll のドキュメントについて最善を尽くしたいです。
+私たちはドキュメントをオープンソース化しました、そして
+あなたが Jekyll に欠けているものを見つけた場合、私たちはプルリクエストを歓迎しています。
+
+あなたは、 GitHub.com 上の Jekyll リポジトリの [site]({{ site.repository }}/tree/master/site) で
+jekyllrb.comのドキュメントを見つけることができます。
+
+全てのドキュメントのプルリクエストは `master` に向けられる必要があります。
+他のブランチに向けたプルリクエストは受け入れられません。
+
+GitHub の [Jekyll wiki](https://github.com/jekyll/jekyll/wiki) は、
+自由に更新することができるように、プルリクエストなしで
+全ての GitHub ユーザがアクセス権を持つことができます。
+
+落とし穴
+-------
+
+* もし、 gem のバージョンがかちあった場合、コミットを分けてください。
+  この方法だと、メンテナが gem をリリースするときに制御できます。
+* jekyll/jekyll の最新コミットに基づいて(複数の)パッチを維持してください。
+  それは適用するためのあなたの仕事で、メンテナがしなければならないことを少なくするのは
+  とてもよいことです。
+* あなたの GitHub issue で [fix], [feature] などのタグをつけないでください。
+  メンテナは積極的に issue を読み、彼らが問題に出くわしたらラベルをつけるでしょう。
+
+最後に…
+----------
+
+ありがとう! Jekyll のハックは楽しいものでなければなりません。
+もし、あなたがこのハードを理解するための何かを発見した場合、知らせてください。
+我々のプロセスやドキュメントを改善することができます!
diff --git a/docs/jp/README.jp.markdown b/docs/jp/README.jp.markdown
new file mode 100644
index 0000000..0085c3f
--- /dev/null
+++ b/docs/jp/README.jp.markdown
@@ -0,0 +1,69 @@
+# [Jekyll](http://jekyllrb.com/)
+
+[![Gem Version](https://badge.fury.io/rb/jekyll.png)](http://badge.fury.io/rb/jekyll)
+
+[![Build Status](https://secure.travis-ci.org/jekyll/jekyll.png?branch=master)](https://travis-ci.org/jekyll/jekyll)
+[![Code Climate](https://codeclimate.com/github/jekyll/jekyll.png)](https://codeclimate.com/github/jekyll/jekyll)
+[![Dependency Status](https://gemnasium.com/jekyll/jekyll.png)](https://gemnasium.com/jekyll/jekyll)
+[![Coverage Status](https://coveralls.io/repos/jekyll/jekyll/badge.png)](https://coveralls.io/r/jekyll/jekyll)
+
+Tom Preston-Werner, Nick Quaranto や多くの[素晴らしいコントリビュータ](https://github.com/jekyll/jekyll/graphs/contributors)によって作成されています!
+
+Jekyll は個人プロジェクトや組織のサイトに最適な、シンプルで、ブログを意識した静的サイトジェネレータです。
+複雑さを排除したファイルベースのCMSのようなものと考えてください。
+Jekyll はコンテンツを受け取り、 Markdown や Liquid テンプレート をレンダリングし、
+Apache や Nginx やその他の Web サーバに提供する準備ができた静的な Web サイトを完全に出力してくれます。
+Jekyll は [GitHub Pages](http://pages.github.com) の背後にあるエンジンなので、
+あなたの GitHub リポジトリからサイトをホストするために使用する事ができます。
+
+## 原理
+
+Jekyll あなたがするように伝えたことをします ― それ以上でもそれ以下でもありません。
+それは、大胆な仮定によってユーザの裏をかこうとせず、
+また、不必要な複雑さや設定をユーザに負担しません。
+簡単に言えば、 Jekyll はあなたの道を開け、
+真に重要なもの: コンテンツに集中することができます。
+
+## 開始方法
+
+* gem を[インストール](http://jekyllrb.com/docs/installation/)します
+* [使用方法](http://jekyllrb.com/docs/usage/) と [設定方法](http://jekyllrb.com/docs/configuration/) を読みます
+* 既存の [Jekyll で作られたサイト](http://wiki.github.com/jekyll/jekyll/sites) をチラッと見ます
+* Fork し、あなたの変更を [コントリビュート](http://jekyllrb.com/docs/contributing/) します
+* 質問があったら? irc.freenode.net の `#jekyll` チャンネルをチェックしてください
+
+## より深く
+
+* 以前のシステムからの[移行](http://jekyllrb.com/docs/migrations/)
+* [YAML Front Matter](http://jekyllrb.com/docs/frontmatter/) がどのように働くかを学ぶ
+* [変数](http://jekyllrb.com/docs/variables/)を使ってサイトに情報を表示する
+* posts が生成される時の[パーマリンク](http://jekyllrb.com/docs/permalinks/)をカスタマイズ
+* 人生を容易にするために、組み込みの [Liquid 拡張](http://jekyllrb.com/docs/templates/)を使用する
+* あなたのサイト固有のコンテンツを生成するために、カスタム[プラグイン](http://jekyllrb.com/docs/plugins/)を使用する
+
+## 実行時の依存関係
+
+* Commander: コマンドラインインターフェース構築 (Ruby)
+* Colorator: コマンドライン出力に色付け (Ruby)
+* Classifier: posts の関連を生成 (Ruby)
+* Directory Watcher: サイトの自動再生成 (Ruby)
+* Kramdown: デフォルトの Markdown エンジン (Ruby)
+* Liquid: テンプレートシステム (Ruby)
+* Pygments.rb: シンタックスハイライト (Ruby/Python)
+* RedCarpet: Markdown エンジン (Ruby)
+* Safe YAML: セキュリティのために構築された YAML パーサ (Ruby)
+
+## 開発時の依存関係
+
+* Launchy: クロスプラットフォーム ファイルランチャ (Ruby)
+* Maruku: Markdown スーパーセット インタプリタ (Ruby)
+* RDiscount: Discount Markdown プロセッサ (Ruby)
+* RedCloth: Textile サポート (Ruby)
+* RedGreen: よりよいテスト出力 (Ruby)
+* RR: モック (Ruby)
+* Shoulda: テストフレームワーク (Ruby)
+* SimpleCov: カバレッジフレームワーク (Ruby)
+
+## ライセンス
+
+[ライセンス](https://github.com/jekyll/jekyll/blob/master/LICENSE)を見てください。
diff --git a/features/collections.feature b/features/collections.feature
new file mode 100644
index 0000000..8b69ab6
--- /dev/null
+++ b/features/collections.feature
@@ -0,0 +1,108 @@
+Feature: Collections
+  As a hacker who likes to structure content
+  I want to be able to create collections of similar information
+  And render them
+
+  Scenario: Unrendered collection
+    Given I have an "index.html" page that contains "Collections: {{ site.methods }}"
+    And I have fixture collections
+    And I have a configuration file with "collections" set to "['methods']"
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "Collections: <p>Use <code>Jekyll.configuration</code> to build a full configuration for use w/Jekyll.</p>\n\n<p>Whatever: foo.bar</p>\n<p><code>Jekyll.sanitized_path</code> is used to make sure your path is in your source.</p>\n<p>Run your generators! default</p>\n<p>Create dat site.</p>\n<p>Run your generators! default</p>" in "_site/index.html"
+    And the "_site/methods/configuration.html" file should not exist
+
+  Scenario: Rendered collection
+    Given I have an "index.html" page that contains "Collections: {{ site.collections }}"
+    And I have an "collection_metadata.html" page that contains "Methods metadata: {{ site.collections.methods.foo }} {{ site.collections.methods }}"
+    And I have fixture collections
+    And I have a "_config.yml" file with content:
+    """
+    collections:
+      methods:
+        output: true
+        foo:   bar
+    """
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "Collections: {\"methods" in "_site/index.html"
+    And I should see "Methods metadata: bar" in "_site/collection_metadata.html"
+    And I should see "<p>Whatever: foo.bar</p>" in "_site/methods/configuration.html"
+
+  Scenario: Rendered document in a layout
+    Given I have an "index.html" page that contains "Collections: {{ site.collections }}"
+    And I have a default layout that contains "<div class='title'>Tom Preston-Werner</div> {{content}}"
+    And I have fixture collections
+    And I have a "_config.yml" file with content:
+    """
+    collections:
+      methods:
+        output: true
+        foo:   bar
+    """
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "Collections: {\"methods" in "_site/index.html"
+    And I should see "<p>Run your generators! default</p>" in "_site/methods/site/generate.html"
+    And I should see "<div class='title'>Tom Preston-Werner</div>" in "_site/methods/site/generate.html"
+
+  Scenario: Collections specified as an array
+    Given I have an "index.html" page that contains "Collections: {% for method in site.methods %}{{ method.relative_path }} {% endfor %}"
+    And I have fixture collections
+    And I have a "_config.yml" file with content:
+    """
+    collections:
+    - methods
+    """
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "Collections: _methods/configuration.md _methods/sanitized_path.md _methods/site/generate.md _methods/site/initialize.md _methods/um_hi.md" in "_site/index.html"
+
+  Scenario: Collections specified as an hash
+    Given I have an "index.html" page that contains "Collections: {% for method in site.methods %}{{ method.relative_path }} {% endfor %}"
+    And I have fixture collections
+    And I have a "_config.yml" file with content:
+    """
+    collections:
+      methods:
+        baz: bin
+    """
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "Collections: _methods/configuration.md _methods/sanitized_path.md _methods/site/generate.md _methods/site/initialize.md _methods/um_hi.md" in "_site/index.html"
+
+  Scenario: All the documents
+    Given I have an "index.html" page that contains "All documents: {% for doc in site.documents %}{{ doc.relative_path }} {% endfor %}"
+    And I have fixture collections
+    And I have a "_config.yml" file with content:
+    """
+    collections:
+    - methods
+    """
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "All documents: _methods/configuration.md _methods/sanitized_path.md _methods/site/generate.md _methods/site/initialize.md _methods/um_hi.md" in "_site/index.html"
+
+  Scenario: Documents have an output attribute, which is the converted HTML
+    Given I have an "index.html" page that contains "First document's output: {{ site.documents.first.output }}"
+    And I have fixture collections
+    And I have a "_config.yml" file with content:
+    """
+    collections:
+    - methods
+    """
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "First document's output: <p>Use <code>Jekyll.configuration</code> to build a full configuration for use w/Jekyll.</p>\n\n<p>Whatever: foo.bar</p>" in "_site/index.html"
+
+  Scenario: Filter documents by where
+    Given I have an "index.html" page that contains "{% assign items = site.methods | where: 'whatever','foo.bar' %}Item count: {{ items.size }}"
+    And I have fixture collections
+    And I have a "_config.yml" file with content:
+    """
+    collections:
+    - methods
+    """
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "Item count: 1" in "_site/index.html"
diff --git a/features/create_sites.feature b/features/create_sites.feature
index a25a0d3..18996bf 100644
--- a/features/create_sites.feature
+++ b/features/create_sites.feature
@@ -5,23 +5,23 @@ Feature: Create sites
 
   Scenario: Blank site
     Given I do not have a "test_blank" directory
-    When I call jekyll new with test_blank --blank
+    When I run jekyll new test_blank --blank
     Then the test_blank/_layouts directory should exist
     And the test_blank/_posts directory should exist
     And the "test_blank/index.html" file should exist
 
   Scenario: Basic site
     Given I have an "index.html" file that contains "Basic Site"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Basic Site" in "_site/index.html"
 
   Scenario: Basic site with a post
     Given I have a _posts directory
     And I have the following post:
-      | title   | date      | content          |
+      | title   | date       | content          |
       | Hackers | 2009-03-27 | My First Exploit |
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "My First Exploit" in "_site/2009/03/27/hackers.html"
 
@@ -29,7 +29,7 @@ Feature: Create sites
     Given I have a _layouts directory
     And I have an "index.html" page with layout "default" that contains "Basic Site with Layout"
     And I have a default layout that contains "Page Layout: {{ content }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Page Layout: Basic Site with Layout" in "_site/index.html"
 
@@ -37,10 +37,10 @@ Feature: Create sites
     Given I have a _layouts directory
     And I have a _posts directory
     And I have the following posts:
-      | title    | date      | layout  | content                               |
+      | title    | date       | layout  | content                               |
       | Wargames | 2009-03-27 | default | The only winning move is not to play. |
     And I have a default layout that contains "Post Layout: {{ content }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Post Layout: <p>The only winning move is not to play.</p>" in "_site/2009/03/27/wargames.html"
 
@@ -48,10 +48,10 @@ Feature: Create sites
     Given I have a _layouts directory
     And I have a _posts directory
     And I have the following posts:
-      | title    | date      | layout  | content                               |
+      | title    | date       | layout      | content                               |
       | Wargames | 2009-03-27 | post/simple | The only winning move is not to play. |
     And I have a post/simple layout that contains "Post Layout: {{ content }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Post Layout: <p>The only winning move is not to play.</p>" in "_site/2009/03/27/wargames.html"
 
@@ -66,15 +66,15 @@ Feature: Create sites
     And I have an "another_file" file that contains ""
     And I have a _posts directory
     And I have the following posts:
-      | title     | date      | layout  | content                                |
-      | entry1    | 2009-03-27 | post    | content for entry1.                    |
-      | entry2    | 2009-04-27 | post    | content for entry2.                    |
+      | title  | date       | layout | content             |
+      | entry1 | 2009-03-27 | post   | content for entry1. |
+      | entry2 | 2009-04-27 | post   | content for entry2. |
     And I have a category/_posts directory
     And I have the following posts in "category":
-      | title     | date      | layout  | content                                |
-      | entry3    | 2009-05-27 | post    | content for entry3.                    |
-      | entry4    | 2009-06-27 | post    | content for entry4.                    |
-    When I run jekyll
+      | title  | date       | layout | content             |
+      | entry3 | 2009-05-27 | post   | content for entry3. |
+      | entry4 | 2009-06-27 | post   | content for entry4. |
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Page : Site contains 2 pages and 4 posts" in "_site/index.html"
     And I should see "No replacement \{\{ site.posts.size \}\}" in "_site/about.html"
@@ -89,7 +89,7 @@ Feature: Create sites
     Given I have a _includes directory
     And I have an "index.html" page that contains "Basic Site with include tag: {% include about.textile %}"
     And I have an "_includes/about.textile" file that contains "Generated by Jekyll"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Basic Site with include tag: Generated by Jekyll" in "_site/index.html"
 
@@ -98,7 +98,7 @@ Feature: Create sites
     And I have an "_includes/about.textile" file that contains "Generated by Jekyll"
     And I have an info directory
     And I have an "info/index.html" page that contains "Basic Site with subdir include tag: {% include about.textile %}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Basic Site with subdir include tag: Generated by Jekyll" in "_site/info/index.html"
 
@@ -107,7 +107,7 @@ Feature: Create sites
     And I have an "_includes/about.textile" file that contains "Generated by {% include jekyll.textile %}"
     And I have an "_includes/jekyll.textile" file that contains "Jekyll"
     And I have an "index.html" page that contains "Basic Site with include tag: {% include about.textile %}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Basic Site with include tag: Generated by Jekyll" in "_site/index.html"
 
@@ -116,26 +116,43 @@ Feature: Create sites
     And I have a configuration file with "permalink" set to "pretty"
     And I have a _posts directory
     And I have the following posts:
-      | title     | date       | layout  | content                                |
-      | entry1    | 2007-12-31 | post    | content for entry1.                    |
-      | entry2    | 2020-01-31 | post    | content for entry2.                    |
-    When I run jekyll
+      | title  | date       | layout | content             |
+      | entry1 | 2007-12-31 | post   | content for entry1. |
+      | entry2 | 2020-01-31 | post   | content for entry2. |
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "URL: /2020/01/31/entry2/" in "_site/index.html"
 
   Scenario: Basic site with whitelisted dotfile
     Given I have an ".htaccess" file that contains "SomeDirective"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "SomeDirective" in "_site/.htaccess"
 
   Scenario: File was replaced by a directory
     Given I have a "test" file that contains "some stuff"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     When I delete the file "test"
     Given I have a test directory
     And I have a "test/index.html" file that contains "some other stuff"
-    When I run jekyll
+    When I run jekyll build
     Then the _site/test directory should exist
     And I should see "some other stuff" in "_site/test/index.html"
+
+  Scenario: Basic site with unpublished page
+    Given I have an "index.html" page with title "index" that contains "Published page"
+    And I have a "public.html" page with published "true" that contains "Explicitly published page"
+    And I have a "secret.html" page with published "false" that contains "Unpublished page"
+
+    When I run jekyll build
+    Then the _site directory should exist
+    And the "_site/index.html" file should exist
+    And the "_site/public.html" file should exist
+    But the "_site/secret.html" file should not exist
+
+    When I run jekyll build --unpublished
+    Then the _site directory should exist
+    And the "_site/index.html" file should exist
+    And the "_site/public.html" file should exist
+    And the "_site/secret.html" file should exist
diff --git a/features/data.feature b/features/data.feature
index 33adfaa..9bfac1e 100644
--- a/features/data.feature
+++ b/features/data.feature
@@ -13,7 +13,7 @@ Feature: Data
         price: 2.5
       """
     And I have an "index.html" page that contains "{% for product in site.data.products %}{{product.name}}{% endfor %}"
-    When I run jekyll
+    When I run jekyll build
     Then the "_site/index.html" file should exist
     And I should see "sugar" in "_site/index.html"
     And I should see "salt" in "_site/index.html"
@@ -28,7 +28,7 @@ Feature: Data
         age: 34
       """
     And I have an "index.html" page that contains "{% for member in site.data.members %}{{member.name}}{% endfor %}"
-    When I run jekyll
+    When I run jekyll build
     Then the "_site/index.html" file should exist
     And I should see "Jack" in "_site/index.html"
     And I should see "Leon" in "_site/index.html"
@@ -43,7 +43,7 @@ Feature: Data
         age: 34
       """
     And I have an "index.html" page that contains "{% for member in site.data.team_members %}{{member.name}}{% endfor %}"
-    When I run jekyll
+    When I run jekyll build
     Then the "_site/index.html" file should exist
     And I should see "Jack" in "_site/index.html"
     And I should see "Leon" in "_site/index.html"
@@ -58,7 +58,7 @@ Feature: Data
           age: 34
       """
     And I have an "index.html" page that contains "{% for member in site.data %}{{member.name}}{% endfor %}"
-    When I run jekyll
+    When I run jekyll build
     Then the "_site/index.html" file should exist
     And I should see "Jack" in "_site/index.html"
     And I should see "Leon" in "_site/index.html"
diff --git a/features/drafts.feature b/features/drafts.feature
index 5271120..c55edbb 100644
--- a/features/drafts.feature
+++ b/features/drafts.feature
@@ -7,9 +7,9 @@ Feature: Draft Posts
     Given I have a configuration file with "permalink" set to "none"
     And I have a _drafts directory
     And I have the following draft:
-      | title  | date      | layout  | content        |
+      | title  | date       | layout  | content        |
       | Recipe | 2009-03-27 | default | Not baked yet. |
-    When I run jekyll with drafts
+    When I run jekyll build --drafts
     Then the _site directory should exist
     And I should see "Not baked yet." in "_site/recipe.html"
 
@@ -18,8 +18,29 @@ Feature: Draft Posts
     And I have an "index.html" page that contains "Totally index"
     And I have a _drafts directory
     And I have the following draft:
-      | title  | date      | layout  | content        |
+      | title  | date       | layout  | content        |
       | Recipe | 2009-03-27 | default | Not baked yet. |
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And the "_site/recipe.html" file should not exist
+
+  Scenario: Don't preview a draft that is not published
+    Given I have a configuration file with "permalink" set to "none"
+    And I have an "index.html" page that contains "Totally index"
+    And I have a _drafts directory
+    And I have the following draft:
+      | title  | date       | layout  | published | content        |
+      | Recipe | 2009-03-27 | default | false     | Not baked yet. |
+    When I run jekyll build --drafts
+    Then the _site directory should exist
+    And the "_site/recipe.html" file should not exist
+
+  Scenario: Use page.path variable
+    Given I have a configuration file with "permalink" set to "none"
+    And I have a _drafts directory
+    And I have the following draft:
+      | title  | date       | layout | content                    |
+      | Recipe | 2009-03-27 | simple | Post path: {{ page.path }} |
+    When I run jekyll build --drafts
+    Then the _site directory should exist
+    And I should see "Post path: _drafts/recipe.textile" in "_site/recipe.html"
diff --git a/features/embed_filters.feature b/features/embed_filters.feature
index d61901c..889a1fc 100644
--- a/features/embed_filters.feature
+++ b/features/embed_filters.feature
@@ -7,10 +7,10 @@ Feature: Embed filters
     Given I have a _posts directory
     And I have a _layouts directory
     And I have the following post:
-      | title     | date      | layout  | content                                     |
+      | title     | date       | layout  | content                                     |
       | Star Wars | 2009-03-27 | default | These aren't the droids you're looking for. |
     And I have a default layout that contains "{{ site.time | date_to_xmlschema }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see today's date in "_site/2009/03/27/star-wars.html"
 
@@ -18,10 +18,12 @@ Feature: Embed filters
     Given I have a _posts directory
     And I have a _layouts directory
     And I have the following post:
-      | title       | date      | layout  | content                                     |
+      | title       | date       | layout  | content                                     |
       | Star & Wars | 2009-03-27 | default | These aren't the droids you're looking for. |
+
+
     And I have a default layout that contains "{{ page.title | xml_escape }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Star & Wars" in "_site/2009/03/27/star-wars.html"
 
@@ -29,10 +31,10 @@ Feature: Embed filters
     Given I have a _posts directory
     And I have a _layouts directory
     And I have the following post:
-      | title     | date      | layout  | content                                     |
+      | title     | date       | layout  | content                                     |
       | Star Wars | 2009-03-27 | default | These aren't the droids you're looking for. |
     And I have a default layout that contains "{{ content | xml_escape }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "7" in "_site/2009/03/27/star-wars.html"
 
@@ -40,10 +42,10 @@ Feature: Embed filters
     Given I have a _posts directory
     And I have a _layouts directory
     And I have the following post:
-      | title     | date      | layout  | tags                   | content                                     |
+      | title     | date       | layout  | tags                   | content                                     |
       | Star Wars | 2009-03-27 | default | [scifi, movies, force] | These aren't the droids you're looking for. |
     And I have a default layout that contains "{{ page.tags | array_to_sentence_string }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "scifi, movies, and force" in "_site/2009/03/27/star-wars.html"
 
@@ -51,10 +53,55 @@ Feature: Embed filters
     Given I have a _posts directory
     And I have a _layouts directory
     And I have the following post:
-      | title     | date      | layout  | content                                      |
+      | title     | date       | layout  | content                                     |
       | Star Wars | 2009-03-27 | default | These aren't the droids you're looking for. |
     And I have a default layout that contains "By {{ '_Obi-wan_' | textilize }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "By <p><em>Obi-wan</em></p>" in "_site/2009/03/27/star-wars.html"
 
+  Scenario: Sort by an arbitrary variable
+    Given I have a _layouts directory
+    And I have the following page:
+      | title  | layout  | value | content   |
+      | Page-1 | default | 8     | Something |
+    And I have the following page:
+      | title  | layout  | value | content   |
+      | Page-2 | default | 6     | Something |
+    And I have a default layout that contains "{{ site.pages | sort:'value' | map:'title' | join:', ' }}"
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see exactly "Page-2, Page-1" in "_site/page-1.html"
+    And I should see exactly "Page-2, Page-1" in "_site/page-2.html"
+
+  Scenario: Sort pages by the title
+    Given I have a _layouts directory
+    And I have the following page:
+      | title | layout | content |
+      | Dog | default | Run |
+    And I have the following page:
+      | title | layout | content |
+      | Bird | default | Fly |
+    And I have the following page:
+      | layout | content |
+      | default | Jump |
+    And I have a default layout that contains "{% assign sorted_pages = site.pages | sort: 'title' %}The rule of {{ sorted_pages.size }}: {% for p in sorted_pages %}{{ p.content | strip_html | strip_newlines }}, {% endfor %}"
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see exactly "The rule of 3: Jump, Fly, Run," in "_site/bird.html"
+
+  Scenario: Sort pages by the title ordering pages without title last
+    Given I have a _layouts directory
+    And I have the following page:
+      | title | layout | content |
+      | Dog | default | Run |
+    And I have the following page:
+      | title | layout | content |
+      | Bird | default | Fly |
+    And I have the following page:
+      | layout | content |
+      | default | Jump |
+    And I have a default layout that contains "{% assign sorted_pages = site.pages | sort: 'title', 'last' %}The rule of {{ sorted_pages.size }}: {% for p in sorted_pages %}{{ p.content | strip_html | strip_newlines }}, {% endfor %}"
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see exactly "The rule of 3: Fly, Run, Jump," in "_site/bird.html"
diff --git a/features/frontmatter_defaults.feature b/features/frontmatter_defaults.feature
new file mode 100644
index 0000000..3f2d3cd
--- /dev/null
+++ b/features/frontmatter_defaults.feature
@@ -0,0 +1,79 @@
+Feature: frontmatter defaults
+  Scenario: Use default for frontmatter variables internally
+    Given I have a _layouts directory
+    And I have a pretty layout that contains "THIS IS THE LAYOUT: {{content}}"
+
+    And I have a _posts directory
+    And I have the following post:
+      | title             | date       | content          |
+      | default layout    | 2013-09-11 | just some post   |
+    And I have an "index.html" page with title "some title" that contains "just some page"
+
+    And I have a configuration file with "defaults" set to "[{scope: {path: ""}, values: {layout: "pretty"}}]"
+
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "THIS IS THE LAYOUT: <p>just some post</p>" in "_site/2013/09/11/default-layout.html"
+    And I should see "THIS IS THE LAYOUT: just some page" in "_site/index.html"
+
+  Scenario: Use default for frontmatter variables in Liquid
+    Given I have a _posts directory
+    And I have the following post:
+      | title        | date       | content                                          |
+      | default data | 2013-09-11 | <p>{{page.custom}}</p><div>{{page.author}}</div> |
+    And I have an "index.html" page that contains "just {{page.custom}} by {{page.author}}"
+    And I have a configuration file with "defaults" set to "[{scope: {path: ""}, values: {custom: "some special data", author: "Ben"}}]"
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "<p>some special data</p><div>Ben</div>" in "_site/2013/09/11/default-data.html"
+    And I should see "just some special data by Ben" in "_site/index.html"
+
+  Scenario: Override frontmatter defaults by path
+    Given I have a _layouts directory
+    And I have a root layout that contains "root: {{ content }}"
+    And I have a subfolder layout that contains "subfolder: {{ content }}"
+
+    And I have a _posts directory
+    And I have the following post:
+      | title | date       | content               |
+      | about | 2013-10-14 | info on {{page.description}} |
+    And I have a special/_posts directory
+    And I have the following post in "special":
+      | title | date       | path  | content               |
+      | about | 2013-10-14 | local | info on {{page.description}} |
+
+    And I have an "index.html" page with title "overview" that contains "Overview for {{page.description}}"
+    And I have an "special/index.html" page with title "section overview" that contains "Overview for {{page.description}}"
+
+    And I have a configuration file with "defaults" set to "[{scope: {path: "special"}, values: {layout: "subfolder", description: "the special section"}}, {scope: {path: ""}, values: {layout: "root", description: "the webpage"}}]"
+
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "root: <p>info on the webpage</p>" in "_site/2013/10/14/about.html"
+    And I should see "subfolder: <p>info on the special section</p>" in "_site/special/2013/10/14/about.html"
+    And I should see "root: Overview for the webpage" in "_site/index.html"
+    And I should see "subfolder: Overview for the special section" in "_site/special/index.html"
+
+  Scenario: Override frontmatter defaults by type
+    Given I have a _posts directory
+    And I have the following post:
+      | title          | date       | content |
+      | this is a post | 2013-10-14 | blabla  |
+    And I have an "index.html" page that contains "interesting stuff"
+    And I have a configuration file with "defaults" set to "[{scope: {path: "", type: "post"}, values: {permalink: "/post.html"}}, {scope: {path: "", type: "page"}, values: {permalink: "/page.html"}}, {scope: {path: ""}, values: {permalink: "/perma.html"}}]"
+    When I run jekyll build
+    Then I should see "blabla" in "_site/post.html"
+    And I should see "interesting stuff" in "_site/page.html"
+    But the "_site/perma.html" file should not exist
+
+  Scenario: Actual frontmatter overrides defaults
+    Given I have a _posts directory
+    And I have the following post:
+      | title    | date       | permalink         | author   | content                   |
+      | override | 2013-10-14 | /frontmatter.html | some guy | a blog by {{page.author}} |
+    And I have an "index.html" page with permalink "override.html" that contains "nothing"
+    And I have a configuration file with "defaults" set to "[{scope: {path: ""}, values: {permalink: "/perma.html", author: "Chris"}}]"
+    When I run jekyll build
+    Then I should see "a blog by some guy" in "_site/frontmatter.html"
+    And I should see "nothing" in "_site/override.html"
+    But the "_site/perma.html" file should not exist
diff --git a/features/include_tag.feature b/features/include_tag.feature
index 587784d..3d2f48c 100644
--- a/features/include_tag.feature
+++ b/features/include_tag.feature
@@ -10,15 +10,15 @@ Feature: Include tags
     And I have an "_includes/ignore.html" file that contains "<footer>My blog footer</footer>"
     And I have a _posts directory
     And I have the following post:
-      | title                               | date       | layout  | content |
-      | Include Files                       | 2013-03-21 | default | {% include header.html param="myparam" %} |
-      | Ignore params if unused             | 2013-03-21 | default | {% include ignore.html date="today" %} |
-      | List multiple parameters            | 2013-03-21 | default | {% include params.html date="today" start="tomorrow" %} |
-      | Dont keep parameters                | 2013-03-21 | default | {% include ignore.html param="test" %}\n{% include header.html %} |
+      | title                               | date       | layout  | content                                                                                                                 |
+      | Include Files                       | 2013-03-21 | default | {% include header.html param="myparam" %}                                                                               |
+      | Ignore params if unused             | 2013-03-21 | default | {% include ignore.html date="today" %}                                                                                  |
+      | List multiple parameters            | 2013-03-21 | default | {% include params.html date="today" start="tomorrow" %}                                                                 |
+      | Dont keep parameters                | 2013-03-21 | default | {% include ignore.html param="test" %}\n{% include header.html %}                                                       |
       | Allow params with spaces and quotes | 2013-04-07 | default | {% include params.html cool="param with spaces" super="\"quoted\"" single='has "quotes"' escaped='\'single\' quotes' %} |
-      | Parameter syntax                    | 2013-04-12 | default | {% include params.html param1_or_2="value" %} |
-      | Pass a variable                     | 2013-06-22 | default | {% assign var = 'some text' %}{% include params.html local=var layout=page.layout %} |
-    When I run jekyll
+      | Parameter syntax                    | 2013-04-12 | default | {% include params.html param1_or_2="value" %}                                                                           |
+      | Pass a variable                     | 2013-06-22 | default | {% assign var = 'some text' %}{% include params.html local=var layout=page.layout %}                                    |
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "<header>My awesome blog header: myparam</header>" in "_site/2013/03/21/include-files.html"
     And I should not see "myparam" in "_site/2013/03/21/ignore-params-if-unused.html"
@@ -43,7 +43,7 @@ Feature: Include tags
     | include_file1 | snippet.html      |
     | include_file2 | parametrized.html |
     And I have an "index.html" page that contains "{% include {{site.include_file1}} %} that {% include {{site.include_file2}} what='parameters' %}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "a snippet that works with parameters" in "_site/index.html"
 
@@ -52,6 +52,17 @@ Feature: Include tags
     And I have an "_includes/one.html" file that contains "one"
     And I have an "_includes/two.html" file that contains "two"
     And I have an "index.html" page with files "[one.html, two.html]" that contains "{% for file in page.files %}{% include {{file}} %} {% endfor %}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "one two" in "_site/index.html"
+
+  Scenario: Include a file with variables and filters
+    Given I have an _includes directory
+    And I have an "_includes/one.html" file that contains "one included"
+    And I have a configuration file with:
+    | key          | value |
+    | include_file | one   |
+    And I have an "index.html" page that contains "{% include {{ site.include_file | append: '.html' }} %}"
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "one included" in "_site/index.html"
diff --git a/features/markdown.feature b/features/markdown.feature
index c76b061..f17d94a 100644
--- a/features/markdown.feature
+++ b/features/markdown.feature
@@ -8,26 +8,26 @@ Feature: Markdown
     And I have an "index.html" page that contains "Index - {% for post in site.posts %} {{ post.content }} {% endfor %}"
     And I have a _posts directory
     And I have the following post:
-      | title   | date      | content    | type     |
+      | title   | date       | content    | type     |
       | Hackers | 2009-03-27 | # My Title | markdown |
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Index" in "_site/index.html"
-    And I should see "<h1 id=\"my_title\">My Title</h1>" in "_site/2009/03/27/hackers.html"
-    And I should see "<h1 id=\"my_title\">My Title</h1>" in "_site/index.html"
+    And I should see "<h1 id=\"my-title\">My Title</h1>" in "_site/2009/03/27/hackers.html"
+    And I should see "<h1 id=\"my-title\">My Title</h1>" in "_site/index.html"
 
   Scenario: Markdown in pagination on index
     Given I have a configuration file with "paginate" set to "5"
     And I have an "index.html" page that contains "Index - {% for post in paginator.posts %} {{ post.content }} {% endfor %}"
     And I have a _posts directory
     And I have the following post:
-      | title   | date      | content    | type     |
+      | title   | date       | content    | type     |
       | Hackers | 2009-03-27 | # My Title | markdown |
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Index" in "_site/index.html"
-    And I should see "<h1 id=\"my_title\">My Title</h1>" in "_site/index.html"
-    
+    And I should see "<h1 id=\"my-title\">My Title</h1>" in "_site/index.html"
+
   Scenario: Maruku fenced codeblocks
     Given I have a configuration file with "markdown" set to "maruku"
     And I have an "index.markdown" file with content:
@@ -42,11 +42,11 @@ Feature: Markdown
        My awesome code
        ```
        """
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "My awesome code" in "_site/index.html"
     And I should see "<pre><code>\nMy awesome code\n</code></pre>" in "_site/index.html"
-    
+
   Scenario: Maruku fenced codeblocks
     Given I have a configuration file with "markdown" set to "maruku"
     And I have an "index.markdown" file with content:
@@ -61,7 +61,7 @@ Feature: Markdown
        puts "My awesome string"
        ```
        """
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "My awesome string" in "_site/index.html"
     And I should see "<pre class="ruby"><code class="ruby">\nputs "My awesome string"\n</code></pre>" in "_site/index.html"
diff --git a/features/pagination.feature b/features/pagination.feature
index 76c6236..21b96b0 100644
--- a/features/pagination.feature
+++ b/features/pagination.feature
@@ -9,12 +9,12 @@ Feature: Site pagination
     And I have an "index.html" page that contains "{{ paginator.posts.size }}"
     And I have a _posts directory
     And I have the following posts:
-      | title     | date      | layout  | content                                |
+      | title     | date       | layout  | content                                |
       | Wargames  | 2009-03-27 | default | The only winning move is not to play.  |
       | Wargames2 | 2009-04-27 | default | The only winning move is not to play2. |
       | Wargames3 | 2009-05-27 | default | The only winning move is not to play3. |
       | Wargames4 | 2009-06-27 | default | The only winning move is not to play4. |
-    When I run jekyll
+    When I run jekyll build
     Then the _site/page<exist> directory should exist
     And the "_site/page<exist>/index.html" file should exist
     And I should see "<posts>" in "_site/page<exist>/index.html"
@@ -36,12 +36,12 @@ Feature: Site pagination
     And I have an "blog/index.html" page that contains "{{ paginator.posts.size }}"
     And I have a _posts directory
     And I have the following posts:
-      | title     | date      | layout  | content                                |
+      | title     | date       | layout  | content                                |
       | Wargames  | 2009-03-27 | default | The only winning move is not to play.  |
       | Wargames2 | 2009-04-27 | default | The only winning move is not to play2. |
       | Wargames3 | 2009-05-27 | default | The only winning move is not to play3. |
       | Wargames4 | 2009-06-27 | default | The only winning move is not to play4. |
-    When I run jekyll
+    When I run jekyll build
     Then the _site/blog/page-<exist> directory should exist
     And the "_site/blog/page-<exist>/index.html" file should exist
     And I should see "<posts>" in "_site/blog/page-<exist>/index.html"
@@ -69,7 +69,7 @@ Feature: Site pagination
       | Wargames2 | 2009-04-27 | default | The only winning move is not to play2. |
       | Wargames3 | 2009-05-27 | default | The only winning move is not to play3. |
       | Wargames4 | 2009-06-27 | default | The only winning move is not to play4. |
-    When I run jekyll
+    When I run jekyll build
     Then the _site/blog/page/<exist> directory should exist
     And the "_site/blog/page/<exist>/index.html" file should exist
     And I should see "<posts>" in "_site/blog/page/<exist>/index.html"
diff --git a/features/permalinks.feature b/features/permalinks.feature
index 64b3c17..f63aaf8 100644
--- a/features/permalinks.feature
+++ b/features/permalinks.feature
@@ -6,20 +6,20 @@ Feature: Fancy permalinks
   Scenario: Use none permalink schema
     Given I have a _posts directory
     And I have the following post:
-      | title                 | date      | content          |
+      | title                 | date       | content          |
       | None Permalink Schema | 2009-03-27 | Totally nothing. |
     And I have a configuration file with "permalink" set to "none"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Totally nothing." in "_site/none-permalink-schema.html"
 
   Scenario: Use pretty permalink schema
     Given I have a _posts directory
     And I have the following post:
-      | title                   | date      | content            |
+      | title                   | date       | content            |
       | Pretty Permalink Schema | 2009-03-27 | Totally wordpress. |
     And I have a configuration file with "permalink" set to "pretty"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Totally wordpress." in "_site/2009/03/27/pretty-permalink-schema/index.html"
 
@@ -28,7 +28,7 @@ Feature: Fancy permalinks
     And I have an "awesome.html" page that contains "Totally awesome"
     And I have an "sitemap.xml" page that contains "Totally uhm, sitemap"
     And I have a configuration file with "permalink" set to "pretty"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Totally index" in "_site/index.html"
     And I should see "Totally awesome" in "_site/awesome/index.html"
@@ -37,39 +37,39 @@ Feature: Fancy permalinks
   Scenario: Use custom permalink schema with prefix
     Given I have a _posts directory
     And I have the following post:
-      | title                   | category | date      | content         |
+      | title                   | category | date       | content         |
       | Custom Permalink Schema | stuff    | 2009-03-27 | Totally custom. |
     And I have a configuration file with "permalink" set to "/blog/:year/:month/:day/:title"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Totally custom." in "_site/blog/2009/03/27/custom-permalink-schema/index.html"
 
   Scenario: Use custom permalink schema with category
     Given I have a _posts directory
     And I have the following post:
-      | title                   | category | date      | content         |
+      | title                   | category | date       | content         |
       | Custom Permalink Schema | stuff    | 2009-03-27 | Totally custom. |
     And I have a configuration file with "permalink" set to "/:categories/:title.html"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Totally custom." in "_site/stuff/custom-permalink-schema.html"
 
   Scenario: Use custom permalink schema with squished date
     Given I have a _posts directory
     And I have the following post:
-      | title                   | category | date      | content         |
+      | title                   | category | date       | content         |
       | Custom Permalink Schema | stuff    | 2009-03-27 | Totally custom. |
     And I have a configuration file with "permalink" set to "/:month-:day-:year/:title.html"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Totally custom." in "_site/03-27-2009/custom-permalink-schema.html"
 
   Scenario: Use per-post permalink
     Given I have a _posts directory
     And I have the following post:
-      | title     | date      | permalink       | content |
+      | title     | date       | permalink       | content |
       | Some post | 2013-04-14 | /custom/posts/1 | bla bla |
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And the _site/custom/posts/1 directory should exist
     And I should see "bla bla" in "_site/custom/posts/1/index.html"
@@ -77,9 +77,9 @@ Feature: Fancy permalinks
   Scenario: Use per-post ending in .html
     Given I have a _posts directory
     And I have the following post:
-      | title     | date      | permalink               | content |
+      | title     | date       | permalink               | content |
       | Some post | 2013-04-14 | /custom/posts/some.html | bla bla |
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And the _site/custom/posts directory should exist
     And I should see "bla bla" in "_site/custom/posts/some.html"
diff --git a/features/post_data.feature b/features/post_data.feature
index 34f5818..6d92b19 100644
--- a/features/post_data.feature
+++ b/features/post_data.feature
@@ -7,10 +7,10 @@ Feature: Post data
     Given I have a _posts directory
     And I have a _layouts directory
     And I have the following post:
-      | title     | date      | layout | content                 |
+      | title     | date       | layout | content                 |
       | Star Wars | 2009-03-27 | simple | Luke, I am your father. |
     And I have a simple layout that contains "Post title: {{ page.title }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Post title: Star Wars" in "_site/2009/03/27/star-wars.html"
 
@@ -18,10 +18,10 @@ Feature: Post data
     Given I have a _posts directory
     And I have a _layouts directory
     And I have the following post:
-      | title     | date      | layout | content                 |
+      | title     | date       | layout | content                 |
       | Star Wars | 2009-03-27 | simple | Luke, I am your father. |
     And I have a simple layout that contains "Post url: {{ page.url }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Post url: /2009/03/27/star-wars.html" in "_site/2009/03/27/star-wars.html"
 
@@ -29,10 +29,10 @@ Feature: Post data
     Given I have a _posts directory
     And I have a _layouts directory
     And I have the following post:
-      | title     | date      | layout | content                 |
+      | title     | date       | layout | content                 |
       | Star Wars | 2009-03-27 | simple | Luke, I am your father. |
     And I have a simple layout that contains "Post date: {{ page.date | date_to_string }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Post date: 27 Mar 2009" in "_site/2009/03/27/star-wars.html"
 
@@ -40,10 +40,10 @@ Feature: Post data
     Given I have a _posts directory
     And I have a _layouts directory
     And I have the following post:
-      | title     | date      | layout | content                 |
+      | title     | date       | layout | content                 |
       | Star Wars | 2009-03-27 | simple | Luke, I am your father. |
     And I have a simple layout that contains "Post id: {{ page.id }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Post id: /2009/03/27/star-wars" in "_site/2009/03/27/star-wars.html"
 
@@ -51,10 +51,10 @@ Feature: Post data
     Given I have a _posts directory
     And I have a _layouts directory
     And I have the following post:
-      | title     | date      | layout | content                 |
+      | title     | date       | layout | content                 |
       | Star Wars | 2009-03-27 | simple | Luke, I am your father. |
     And I have a simple layout that contains "Post content: {{ content }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Post content: <p>Luke, I am your father.</p>" in "_site/2009/03/27/star-wars.html"
 
@@ -63,10 +63,10 @@ Feature: Post data
     And I have a movies/_posts directory
     And I have a _layouts directory
     And I have the following post in "movies":
-      | title     | date      | layout | content                 |
+      | title     | date       | layout | content                 |
       | Star Wars | 2009-03-27 | simple | Luke, I am your father. |
     And I have a simple layout that contains "Post category: {{ page.categories }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Post category: movies" in "_site/movies/2009/03/27/star-wars.html"
 
@@ -74,10 +74,10 @@ Feature: Post data
     Given I have a _posts directory
     And I have a _layouts directory
     And I have the following post:
-      | title     | date      | layout | tag   | content                 |
+      | title     | date       | layout | tag   | content                 |
       | Star Wars | 2009-05-18 | simple | twist | Luke, I am your father. |
     And I have a simple layout that contains "Post tags: {{ page.tags }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Post tags: twist" in "_site/2009/05/18/star-wars.html"
 
@@ -87,10 +87,10 @@ Feature: Post data
     And I have a scifi/movies/_posts directory
     And I have a _layouts directory
     And I have the following post in "scifi/movies":
-      | title     | date      | layout | content                 |
+      | title     | date       | layout | content                 |
       | Star Wars | 2009-03-27 | simple | Luke, I am your father. |
     And I have a simple layout that contains "Post categories: {{ page.categories | array_to_sentence_string }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Post categories: scifi and movies" in "_site/scifi/movies/2009/03/27/star-wars.html"
 
@@ -100,10 +100,10 @@ Feature: Post data
     And I have a scifi/Movies/_posts directory
     And I have a _layouts directory
     And I have the following post in "scifi/Movies":
-      | title     | date      | layout | content                 |
+      | title     | date       | layout | content                 |
       | Star Wars | 2009-03-27 | simple | Luke, I am your father. |
     And I have a simple layout that contains "Post categories: {{ page.categories | array_to_sentence_string }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Post categories: scifi and movies" in "_site/scifi/movies/2009/03/27/star-wars.html"
 
@@ -111,10 +111,10 @@ Feature: Post data
     Given I have a _posts directory
     And I have a _layouts directory
     And I have the following post:
-      | title     | date      | layout | category | content                 |
+      | title     | date       | layout | category | content                 |
       | Star Wars | 2009-03-27 | simple | movies   | Luke, I am your father. |
     And I have a simple layout that contains "Post category: {{ page.categories }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Post category: movies" in "_site/movies/2009/03/27/star-wars.html"
 
@@ -122,10 +122,10 @@ Feature: Post data
     Given I have a _posts directory
     And I have a _layouts directory
     And I have the following post:
-      | title     | date      | layout | category | content                 |
+      | title     | date       | layout | category | content                 |
       | Star Wars | 2009-03-27 | simple | Movies   | Luke, I am your father. |
     And I have a simple layout that contains "Post category: {{ page.categories }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Post category: movies" in "_site/movies/2009/03/27/star-wars.html"
 
@@ -133,10 +133,10 @@ Feature: Post data
     Given I have a _posts directory
     And I have a _layouts directory
     And I have the following post:
-      | title     | date      | layout | category | content                 |
+      | title     | date       | layout | category | content                 |
       | Star Wars | 2009-03-27 | simple | movies   | Luke, I am your father. |
     And I have a simple layout that contains "Post category: {{ page.categories }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Post category: movies" in "_site/movies/2009/03/27/star-wars.html"
 
@@ -144,11 +144,11 @@ Feature: Post data
     Given I have a _posts directory
     And I have a _layouts directory
     And I have the following posts:
-      | title     | date      | layout | categories          | content                     |
+      | title     | date       | layout | categories          | content                     |
       | Star Wars | 2009-03-27 | simple | ['scifi', 'Movies'] | Luke, I am your father.     |
       | Star Trek | 2013-03-17 | simple | ['SciFi', 'movies'] | Jean Luc, I am your father. |
     And I have a simple layout that contains "Post categories: {{ page.categories | array_to_sentence_string }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Post categories: scifi and movies" in "_site/scifi/movies/2009/03/27/star-wars.html"
     And I should see "Post categories: scifi and movies" in "_site/scifi/movies/2013/03/17/star-trek.html"
@@ -156,24 +156,24 @@ Feature: Post data
   Scenario Outline: Use page.path variable
     Given I have a <dir>/_posts directory
     And I have the following post in "<dir>":
-      | title | type | date | content |
+      | title   | type | date       | content                      |
       | my-post | html | 2013-04-12 | Source path: {{ page.path }} |
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Source path: <path_prefix>_posts/2013-04-12-my-post.html" in "_site/<dir>/2013/04/12/my-post.html"
 
     Examples:
-      | dir | path_prefix |
-      | .   |             |
-      | dir | dir/        |
+      | dir        | path_prefix |
+      | .          |             |
+      | dir        | dir/        |
       | dir/nested | dir/nested/ |
 
   Scenario: Override page.path variable
     Given I have a _posts directory
     And I have the following post:
-      | title    | date      | path               | content                      |
+      | title    | date       | path               | content                      |
       | override | 2013-04-12 | override-path.html | Custom path: {{ page.path }} |
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Custom path: override-path.html" in "_site/2013/04/12/override.html"
 
@@ -181,9 +181,9 @@ Feature: Post data
     Given I have a _posts directory
     And I have an "index.html" file that contains "Published!"
     And I have the following post:
-      | title     | date      | layout | published | content                 |
+      | title     | date       | layout | published | content                 |
       | Star Wars | 2009-03-27 | simple | false     | Luke, I am your father. |
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And the "_site/2009/03/27/star-wars.html" file should not exist
     And I should see "Published!" in "_site/index.html"
@@ -192,10 +192,10 @@ Feature: Post data
     Given I have a _posts directory
     And I have a _layouts directory
     And I have the following post:
-      | title     | date      | layout | author      | content                 |
+      | title     | date       | layout | author      | content                 |
       | Star Wars | 2009-03-27 | simple | Darth Vader | Luke, I am your father. |
     And I have a simple layout that contains "Post author: {{ page.author }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Post author: Darth Vader" in "_site/2009/03/27/star-wars.html"
 
@@ -203,12 +203,12 @@ Feature: Post data
     Given I have a _posts directory
     And I have a _layouts directory
     And I have the following posts:
-      | title            | date      | layout  | author      | content                 |
+      | title            | date       | layout  | author      | content                 |
       | Star Wars        | 2009-03-27 | ordered | Darth Vader | Luke, I am your father. |
       | Some like it hot | 2009-04-27 | ordered | Osgood      | Nobody is perfect.      |
       | Terminator       | 2009-05-27 | ordered | Arnold      | Sayonara, baby          |
     And I have a ordered layout that contains "Previous post: {{ page.previous.title }} and next post: {{ page.next.title }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "next post: Some like it hot" in "_site/2009/03/27/star-wars.html"
     And I should see "Previous post: Some like it hot" in "_site/2009/05/27/terminator.html"
diff --git a/features/post_excerpts.feature b/features/post_excerpts.feature
index 09e4133..4ad6d12 100644
--- a/features/post_excerpts.feature
+++ b/features/post_excerpts.feature
@@ -9,9 +9,9 @@ Feature: Post excerpts
     Given I have an "index.html" page that contains "{% for post in site.posts %}{{ post.excerpt }}{% endfor %}"
     And I have a _posts directory
     And I have the following posts:
-      | title     | date       | layout  | content                                |
-      | entry1    | 2007-12-31 | post    | content for entry1.                    |
-    When I run jekyll
+      | title  | date       | layout | content             |
+      | entry1 | 2007-12-31 | post   | content for entry1. |
+    When I run jekyll build
     Then the _site directory should exist
     And I should see exactly "<p>content for entry1.</p>" in "_site/index.html"
 
@@ -21,9 +21,9 @@ Feature: Post excerpts
     And I have a _layouts directory
     And I have a post layout that contains "{{ page.excerpt }}"
     And I have the following posts:
-      | title     | date       | layout  | content                                |
-      | entry1    | 2007-12-31 | post    | content for entry1.                    |
-    When I run jekyll
+      | title  | date       | layout | content             |
+      | entry1 | 2007-12-31 | post   | content for entry1. |
+    When I run jekyll build
     Then the _site directory should exist
     And the _site/2007 directory should exist
     And the _site/2007/12 directory should exist
@@ -38,9 +38,9 @@ Feature: Post excerpts
     And I have a _layouts directory
     And I have a post layout that contains "<html><head></head><body>{{ page.excerpt }}</body></html>"
     And I have the following posts:
-      | title     | date       | layout  | content                                |
-      | entry1    | 2007-12-31 | post    | content for entry1.                    |
-    When I run jekyll
+      | title  | date       | layout | content             |
+      | entry1 | 2007-12-31 | post   | content for entry1. |
+    When I run jekyll build
     Then the _site directory should exist
     And the _site/2007 directory should exist
     And the _site/2007/12 directory should exist
diff --git a/features/site_configuration.feature b/features/site_configuration.feature
index 4052315..f42f383 100644
--- a/features/site_configuration.feature
+++ b/features/site_configuration.feature
@@ -7,14 +7,14 @@ Feature: Site configuration
     Given I have a blank site in "_sourcedir"
     And I have an "_sourcedir/index.html" file that contains "Changing source directory"
     And I have a configuration file with "source" set to "_sourcedir"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Changing source directory" in "_site/index.html"
 
   Scenario: Change destination directory
     Given I have an "index.html" file that contains "Changing destination directory"
     And I have a configuration file with "destination" set to "_mysite"
-    When I run jekyll
+    When I run jekyll build
     Then the _mysite directory should exist
     And I should see "Changing destination directory" in "_mysite/index.html"
 
@@ -25,7 +25,7 @@ Feature: Site configuration
     | key         | value    |
     | source      | <source> |
     | destination | <dest>   |
-    When I run jekyll
+    When I run jekyll build
     Then the <source> directory should exist
     And the "<dest>/index.html" file should <file_exist> exist
     And I should see "markdown" in "<source>/index.md"
@@ -44,7 +44,7 @@ Feature: Site configuration
     And I have an "README" file that contains "I want to be excluded"
     And I have an "index.html" file that contains "I want to be included"
     And I have a configuration file with "exclude" set to "['Rakefile', 'README']"
-    When I run jekyll
+    When I run jekyll build
     Then I should see "I want to be included" in "_site/index.html"
     And the "_site/Rakefile" file should not exist
     And the "_site/README" file should not exist
@@ -57,7 +57,7 @@ Feature: Site configuration
       | value    |
       | README   |
       | Rakefile |
-    When I run jekyll
+    When I run jekyll build
     Then I should see "I want to be included" in "_site/index.html"
     And the "_site/Rakefile" file should not exist
     And the "_site/README" file should not exist
@@ -65,37 +65,54 @@ Feature: Site configuration
   Scenario: Use RDiscount for markup
     Given I have an "index.markdown" page that contains "[Google](http://google.com)"
     And I have a configuration file with "markdown" set to "rdiscount"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "<a href=\"http://google.com\">Google</a>" in "_site/index.html"
 
   Scenario: Use Kramdown for markup
     Given I have an "index.markdown" page that contains "[Google](http://google.com)"
     And I have a configuration file with "markdown" set to "kramdown"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "<a href=\"http://google.com\">Google</a>" in "_site/index.html"
 
   Scenario: Use Redcarpet for markup
     Given I have an "index.markdown" page that contains "[Google](http://google.com)"
     And I have a configuration file with "markdown" set to "redcarpet"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "<a href=\"http://google.com\">Google</a>" in "_site/index.html"
 
   Scenario: Use Maruku for markup
     Given I have an "index.markdown" page that contains "[Google](http://google.com)"
     And I have a configuration file with "markdown" set to "maruku"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "<a href=\"http://google.com\">Google</a>" in "_site/index.html"
 
   Scenario: Highlight code with pygments
-    Given I have an "index.html" file that contains "{% highlight ruby %} puts 'Hello world!' {% endhighlight %}"
-    And I have a configuration file with "pygments" set to "true"
-    When I run jekyll
+    Given I have an "index.html" page that contains "{% highlight ruby %} puts 'Hello world!' {% endhighlight %}"
+    When I run jekyll build
     Then the _site directory should exist
-    And I should see "puts 'Hello world!'" in "_site/index.html"
+    And I should see "Hello world!" in "_site/index.html"
+    And I should see "class=\"highlight\"" in "_site/index.html"
+
+  Scenario: Highlight code with rouge
+    Given I have an "index.html" page that contains "{% highlight ruby %} puts 'Hello world!' {% endhighlight %}"
+    And I have a configuration file with "highlighter" set to "rouge"
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "Hello world!" in "_site/index.html"
+    And I should see "class=\"highlight\"" in "_site/index.html"
+
+  Scenario: Rouge renders code block once
+    Given I have a configuration file with "highlighter" set to "rouge"
+    And I have a _posts directory
+    And I have the following post:
+      | title | date             | layout  | content                                      |
+      | foo   | 2014-04-27 11:34 | default | {% highlight text %} test {% endhighlight %} |
+    When I run jekyll build
+    Then I should not see "highlight(.*)highlight" in "_site/2014/04/27/foo.html"
 
   Scenario: Set time and no future dated posts
     Given I have a _layouts directory
@@ -108,10 +125,10 @@ Feature: Site configuration
       | future      | false        |
     And I have a _posts directory
     And I have the following posts:
-      | title     | date       | layout  | content                                |
-      | entry1    | 2007-12-31 | post    | content for entry1.                    |
-      | entry2    | 2020-01-31 | post    | content for entry2.                    |
-    When I run jekyll
+      | title  | date       | layout | content             |
+      | entry1 | 2007-12-31 | post   | content for entry1. |
+      | entry2 | 2020-01-31 | post   | content for entry2. |
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Page Layout: 1 on 2010-01-01" in "_site/index.html"
     And I should see "Post Layout: <p>content for entry1.</p>" in "_site/2007/12/31/entry1.html"
@@ -128,10 +145,10 @@ Feature: Site configuration
       | future      | true         |
     And I have a _posts directory
     And I have the following posts:
-      | title     | date       | layout  | content                                |
-      | entry1    | 2007-12-31 | post    | content for entry1.                    |
-      | entry2    | 2020-01-31 | post    | content for entry2.                    |
-    When I run jekyll
+      | title  | date       | layout | content             |
+      | entry1 | 2007-12-31 | post   | content for entry1. |
+      | entry2 | 2020-01-31 | post   | content for entry2. |
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Page Layout: 2 on 2010-01-01" in "_site/index.html"
     And I should see "Post Layout: <p>content for entry1.</p>" in "_site/2007/12/31/entry1.html"
@@ -150,7 +167,7 @@ Feature: Site configuration
         | title     | date                   | layout  | content             |
         | entry1    | 2013-04-09 23:22 -0400 | post    | content for entry1. |
         | entry2    | 2013-04-10 03:14 -0400 | post    | content for entry2. |
-      When I run jekyll
+      When I run jekyll build
       Then the _site directory should exist
       And I should see "Page Layout: 2" in "_site/index.html"
       And I should see "Post Layout: <p>content for entry1.</p> built at 2013-04-09T23:22:00-04:00" in "_site/2013/04/09/entry1.html"
@@ -169,7 +186,7 @@ Feature: Site configuration
         | title     | date                   | layout  | content             |
         | entry1    | 2013-04-09 23:22 -0400 | post    | content for entry1. |
         | entry2    | 2013-04-10 03:14 -0400 | post    | content for entry2. |
-      When I run jekyll
+      When I run jekyll build
       Then the _site directory should exist
       And I should see "Page Layout: 2" in "_site/index.html"
       And the "_site/2013/04/10/entry1.html" file should exist
@@ -183,11 +200,11 @@ Feature: Site configuration
       | key         | value       |
       | limit_posts | 2           |
     And I have the following posts:
-      | title   | date      | content          |
-      | Apples  | 2009-03-27 | An article about apples |
-      | Oranges | 2009-04-01  | An article about oranges |
-      | Bananas | 2009-04-05  | An article about bananas |
-    When I run jekyll
+      | title   | date       | content                  |
+      | Apples  | 2009-03-27 | An article about apples  |
+      | Oranges | 2009-04-01 | An article about oranges |
+      | Bananas | 2009-04-05 | An article about bananas |
+    When I run jekyll build
     Then the _site directory should exist
     And the "_site/2009/04/05/bananas.html" file should exist
     And the "_site/2009/04/01/oranges.html" file should exist
@@ -200,7 +217,7 @@ Feature: Site configuration
       | value      |
       | .gitignore |
       | .foo       |
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see ".DS_Store" in "_site/.gitignore"
     And the "_site/.htaccess" file should not exist
@@ -217,10 +234,10 @@ Feature: Site configuration
       | layouts     | _theme       |
     And I have a _posts directory
     And I have the following posts:
-      | title     | date       | layout  | content                                |
-      | entry1    | 2007-12-31 | post    | content for entry1.                    |
-      | entry2    | 2020-01-31 | post    | content for entry2.                    |
-    When I run jekyll
+      | title  | date       | layout | content             |
+      | entry1 | 2007-12-31 | post   | content for entry1. |
+      | entry2 | 2020-01-31 | post   | content for entry2. |
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Page Layout: 2 on 2010-01-01" in "_site/index.html"
     And I should see "Post Layout: <p>content for entry1.</p>" in "_site/2007/12/31/entry1.html"
@@ -229,7 +246,30 @@ Feature: Site configuration
   Scenario: Add a gem-based plugin
     Given I have an "index.html" file that contains "Whatever"
     And I have a configuration file with "gems" set to "[jekyll_test_plugin]"
-    When I run jekyll
+    When I run jekyll build
+    Then the _site directory should exist
+    And I should see "Whatever" in "_site/index.html"
+    And I should see "this is a test" in "_site/test.txt"
+
+  Scenario: Add an empty whitelist to restrict all gems
+    Given I have an "index.html" file that contains "Whatever"
+    And I have a configuration file with:
+      | key       | value                |
+      | gems      | [jekyll_test_plugin] |
+      | whitelist | []                   |
+    When I run jekyll build --safe
+    Then the _site directory should exist
+    And I should see "Whatever" in "_site/index.html"
+    And the "_site/test.txt" file should not exist
+
+  Scenario: Add a whitelist to restrict some gems but allow others
+    Given I have an "index.html" file that contains "Whatever"
+    And I have a configuration file with:
+      | key       | value                                              |
+      | gems      | [jekyll_test_plugin, jekyll_test_plugin_malicious] |
+      | whitelist | [jekyll_test_plugin]                               |
+    When I run jekyll build --safe
     Then the _site directory should exist
     And I should see "Whatever" in "_site/index.html"
+    And the "_site/test.txt" file should exist
     And I should see "this is a test" in "_site/test.txt"
diff --git a/features/site_data.feature b/features/site_data.feature
index faa266b..a7fadf3 100644
--- a/features/site_data.feature
+++ b/features/site_data.feature
@@ -5,32 +5,32 @@ Feature: Site data
 
   Scenario: Use page variable in a page
     Given I have an "contact.html" page with title "Contact" that contains "{{ page.title }}: email at example.com"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Contact: email at example.com" in "_site/contact.html"
 
   Scenario Outline: Use page.path variable in a page
     Given I have a <dir> directory
     And I have a "<path>" page that contains "Source path: {{ page.path }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Source path: <path>" in "_site/<path>"
 
     Examples:
-      | dir | path |
-      | .   | index.html |
-      | dir | dir/about.html |
+      | dir        | path                 |
+      | .          | index.html           |
+      | dir        | dir/about.html       |
       | dir/nested | dir/nested/page.html |
 
   Scenario: Override page.path
     Given I have an "override.html" page with path "custom-override.html" that contains "Custom path: {{ page.path }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Custom path: custom-override.html" in "_site/override.html"
 
   Scenario: Use site.time variable
     Given I have an "index.html" page that contains "{{ site.time }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see today's time in "_site/index.html"
 
@@ -38,11 +38,11 @@ Feature: Site data
     Given I have a _posts directory
     And I have an "index.html" page that contains "{{ site.posts.first.title }}: {{ site.posts.first.url }}"
     And I have the following posts:
-      | title       | date      | content         |
-      | First Post  | 2009-03-25 | My First Post   |
-      | Second Post | 2009-03-26 | My Second Post  |
-      | Third Post  | 2009-03-27 | My Third Post   |
-    When I run jekyll
+      | title       | date       | content        |
+      | First Post  | 2009-03-25 | My First Post  |
+      | Second Post | 2009-03-26 | My Second Post |
+      | Third Post  | 2009-03-27 | My Third Post  |
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Third Post: /2009/03/27/third-post.html" in "_site/index.html"
 
@@ -50,11 +50,11 @@ Feature: Site data
     Given I have a _posts directory
     And I have an "index.html" page that contains "{% for post in site.posts %} {{ post.title }} {% endfor %}"
     And I have the following posts:
-      | title       | date      | content         |
-      | First Post  | 2009-03-25 | My First Post   |
-      | Second Post | 2009-03-26 | My Second Post  |
-      | Third Post  | 2009-03-27 | My Third Post   |
-    When I run jekyll
+      | title       | date       | content        |
+      | First Post  | 2009-03-25 | My First Post  |
+      | Second Post | 2009-03-26 | My Second Post |
+      | Third Post  | 2009-03-27 | My Third Post  |
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Third Post  Second Post  First Post" in "_site/index.html"
 
@@ -62,10 +62,10 @@ Feature: Site data
     Given I have a _posts directory
     And I have an "index.html" page that contains "{% for post in site.categories.code %} {{ post.title }} {% endfor %}"
     And I have the following posts:
-      | title          | date      | category | content            |
+      | title          | date       | category | content            |
       | Awesome Hack   | 2009-03-26 | code     | puts 'Hello World' |
       | Delicious Beer | 2009-03-26 | food     | 1) Yuengling       |
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Awesome Hack" in "_site/index.html"
 
@@ -73,9 +73,9 @@ Feature: Site data
     Given I have a _posts directory
     And I have an "index.html" page that contains "{% for post in site.tags.beer %} {{ post.content }} {% endfor %}"
     And I have the following posts:
-      | title          | date      | tag  | content            |
-      | Delicious Beer | 2009-03-26 | beer | 1) Yuengling       |
-    When I run jekyll
+      | title          | date       | tag  | content      |
+      | Delicious Beer | 2009-03-26 | beer | 1) Yuengling |
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "Yuengling" in "_site/index.html"
 
@@ -83,25 +83,25 @@ Feature: Site data
   Given I have a _posts directory
   And I have an "index.html" page that contains "{% for post in site.posts %}{{ post.title }}:{{ post.previous.title}},{{ post.next.title}} {% endfor %}"
   And I have the following posts:
-    | title | date      | content |
+    | title | date       | content |
     | first | 2009-02-26 | first   |
     | A     | 2009-03-26 | A       |
     | B     | 2009-03-26 | B       |
     | C     | 2009-03-26 | C       |
     | last  | 2009-04-26 | last    |
-  When I run jekyll
+  When I run jekyll build
   Then the _site directory should exist
   And I should see "last:C, C:B,last B:A,C A:first,B first:,A" in "_site/index.html"
 
   Scenario: Use configuration date in site payload
     Given I have an "index.html" page that contains "{{ site.url }}"
     And I have a configuration file with "url" set to "http://example.com"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "http://example.com" in "_site/index.html"
 
   Scenario: Access Jekyll version via jekyll.version
     Given I have an "index.html" page that contains "{{ jekyll.version }}"
-    When I run jekyll
+    When I run jekyll build
     Then the _site directory should exist
     And I should see "\d+\.\d+\.\d+" in "_site/index.html"
diff --git a/features/step_definitions/jekyll_steps.rb b/features/step_definitions/jekyll_steps.rb
index 7a74486..4fe7edd 100644
--- a/features/step_definitions/jekyll_steps.rb
+++ b/features/step_definitions/jekyll_steps.rb
@@ -1,13 +1,35 @@
+def file_content_from_hash(input_hash)
+  matter_hash = input_hash.reject { |k, v| k == "content" }
+  matter = matter_hash.map { |k, v| "#{k}: #{v}\n" }.join.chomp
+
+  content = if input_hash['input'] && input_hash['filter']
+    "{{ #{input_hash['input']} | #{input_hash['filter']} }}"
+  else
+    input_hash['content']
+  end
+
+  <<EOF
+---
+#{matter}
+---
+#{content}
+EOF
+end
+
 Before do
-  FileUtils.rm_rf(TEST_DIR)
-  FileUtils.mkdir(TEST_DIR)
+  FileUtils.mkdir_p(TEST_DIR) unless File.exist?(TEST_DIR)
   Dir.chdir(TEST_DIR)
 end
 
+After do
+  FileUtils.rm_rf(TEST_DIR)   if File.exists?(TEST_DIR)
+  FileUtils.rm(JEKYLL_COMMAND_OUTPUT_FILE) if File.exists?(JEKYLL_COMMAND_OUTPUT_FILE)
+end
+
 World(Test::Unit::Assertions)
 
 Given /^I have a blank site in "(.*)"$/ do |path|
-  FileUtils.mkdir_p(path)
+  FileUtils.mkdir_p(path) unless File.exist?(path)
 end
 
 Given /^I do not have a "(.*)" directory$/ do |path|
@@ -58,42 +80,28 @@ Given /^I have an? (.*) directory$/ do |dir|
   FileUtils.mkdir_p(dir)
 end
 
-Given /^I have the following (draft|post)s?(?: (in|under) "([^"]+)")?:$/ do |status, direction, folder, table|
-  table.hashes.each do |post|
-    title = slug(post['title'])
-    ext = post['type'] || 'textile'
+Given /^I have the following (draft|page|post)s?(?: (in|under) "([^"]+)")?:$/ do |status, direction, folder, table|
+  table.hashes.each do |input_hash|
+    title = slug(input_hash['title'])
+    ext = input_hash['type'] || 'textile'
     before, after = location(folder, direction)
 
-    if "draft" == status
-      folder_post = '_drafts'
+    case status
+    when "draft"
+      dest_folder = '_drafts'
+      filename = "#{title}.#{ext}"
+    when "page"
+      dest_folder = ''
       filename = "#{title}.#{ext}"
-    elsif "post" == status
-      parsed_date = Time.xmlschema(post['date']) rescue Time.parse(post['date'])
-      folder_post = '_posts'
+    when "post"
+      parsed_date = Time.xmlschema(input_hash['date']) rescue Time.parse(input_hash['date'])
+      dest_folder = '_posts'
       filename = "#{parsed_date.strftime('%Y-%m-%d')}-#{title}.#{ext}"
     end
 
-    path = File.join(before, folder_post, after, filename)
-
-    matter_hash = {}
-    %w(title layout tag tags category categories published author path date permalink).each do |key|
-      matter_hash[key] = post[key] if post[key]
-    end
-    matter = matter_hash.map { |k, v| "#{k}: #{v}\n" }.join.chomp
-
-    content = if post['input'] && post['filter']
-      "{{ #{post['input']} | #{post['filter']} }}"
-    else
-      post['content']
-    end
-
+    path = File.join(before, dest_folder, after, filename)
     File.open(path, 'w') do |f|
-      f.write <<EOF
----
-#{matter}
----
-#{content}
-EOF
+      f.write file_content_from_hash(input_hash)
     end
   end
 end
@@ -121,21 +129,21 @@ Given /^I have a configuration file with "([^\"]*)" set to:$/ do |key, table|
   end
 end
 
-
-When /^I run jekyll$/ do
-  run_jekyll
+Given /^I have fixture collections$/ do
+  FileUtils.cp_r File.join(JEKYLL_SOURCE_DIR, "test", "source", "_methods"), source_dir
 end
 
-When /^I run jekyll with drafts$/ do
-  run_jekyll(:drafts => true)
-end
+##################
+#
+# Changing stuff
+#
+##################
 
-When /^I call jekyll new with test_blank --blank$/ do
-  call_jekyll_new(:path => "test_blank", :blank => true)
-end
-
-When /^I debug jekyll$/ do
-  run_jekyll(:debug => true)
+When /^I run jekyll(.*)$/ do |args|
+  status = run_jekyll(args)
+  if !status || args.include?("--verbose")
+    puts jekyll_run_output
+  end
 end
 
 When /^I change "(.*)" to contain "(.*)"$/ do |file, text|
@@ -157,7 +165,7 @@ Then /^the (.*) directory should not exist$/ do |dir|
 end
 
 Then /^I should see "(.*)" in "(.*)"$/ do |text, file|
-  assert_match Regexp.new(text), file_contents(file)
+  assert_match Regexp.new(text, Regexp::MULTILINE), file_contents(file)
 end
 
 Then /^I should see exactly "(.*)" in "(.*)"$/ do |text, file|
@@ -165,7 +173,7 @@ Then /^I should see exactly "(.*)" in "(.*)"$/ do |text, file|
 end
 
 Then /^I should not see "(.*)" in "(.*)"$/ do |text, file|
-  assert_no_match Regexp.new(text), file_contents(file)
+  assert_no_match Regexp.new(text, Regexp::MULTILINE), file_contents(file)
 end
 
 Then /^I should see escaped "(.*)" in "(.*)"$/ do |text, file|
@@ -177,7 +185,7 @@ Then /^the "(.*)" file should +exist$/ do |file|
 end
 
 Then /^the "(.*)" file should not exist$/ do |file|
-  assert !File.exists?(file), "The file \"#{file}\" exists"
+  assert !File.exist?(file), "The file \"#{file}\" exists"
 end
 
 Then /^I should see today's time in "(.*)"$/ do |file|
diff --git a/features/support/env.rb b/features/support/env.rb
index fa71e5f..2987562 100644
--- a/features/support/env.rb
+++ b/features/support/env.rb
@@ -1,35 +1,38 @@
-if RUBY_VERSION > '1.9'
-  require 'coveralls'
-  Coveralls.wear_merged!
-end
+require 'coveralls'
+Coveralls.wear_merged!
 
 require 'fileutils'
 require 'rr'
 require 'test/unit'
 require 'time'
 
-TEST_DIR    = File.join('/', 'tmp', 'jekyll')
+JEKYLL_SOURCE_DIR = File.dirname(File.dirname(File.dirname(__FILE__)))
+TEST_DIR    = File.expand_path(File.join('..', '..', 'tmp', 'jekyll'), File.dirname(__FILE__))
 JEKYLL_PATH = File.join(File.dirname(__FILE__), '..', '..', 'bin', 'jekyll')
+JEKYLL_COMMAND_OUTPUT_FILE = File.join(File.dirname(TEST_DIR), 'jekyll_output.txt')
+
+def source_dir(*files)
+  File.join(TEST_DIR, *files)
+end
+
+def jekyll_output_file
+  JEKYLL_COMMAND_OUTPUT_FILE
+end
 
-def run_jekyll(opts = {})
-  command = JEKYLL_PATH.clone
-  command << " build --trace"
-  command << " --drafts" if opts[:drafts]
-  command << " >> /dev/null 2>&1" if opts[:debug].nil?
-  system command
+def jekyll_run_output
+  File.read(jekyll_output_file)
 end
 
-def call_jekyll_new(opts = {})
-  command = JEKYLL_PATH.clone
-  command << " new --trace"
-  command << " #{opts[:path]}" if opts[:path]
-  command << " --blank" if opts[:blank]
-  command << " >> /dev/null 2>&1" if opts[:debug].nil?
-  system command
+def run_jekyll(args)
+  system "#{JEKYLL_PATH} #{args} --trace > #{jekyll_output_file} 2>&1"
 end
 
 def slug(title)
-  title.downcase.gsub(/[^\w]/, " ").strip.gsub(/\s+/, '-')
+  if title
+    title.downcase.gsub(/[^\w]/, " ").strip.gsub(/\s+/, '-')
+  else
+    Time.now.strftime("%s%9N") # nanoseconds since the Epoch
+  end
 end
 
 def location(folder, direction)
@@ -47,15 +50,8 @@ def file_contents(path)
 end
 
 def seconds_agnostic_datetime(datetime = Time.now)
-  pieces = datetime.to_s.split(" ")
-  if pieces.size == 6 # Ruby 1.8.7
-    date = pieces[0..2].join(" ")
-    time = seconds_agnostic_time(pieces[3])
-    zone = pieces[4..5].join(" ")
-  else # Ruby 1.9.1 or greater
-    date, time, zone = pieces
-    time = seconds_agnostic_time(time)
-  end
+  date, time, zone = datetime.to_s.split(" ")
+  time = seconds_agnostic_time(time)
   [
     Regexp.escape(date),
     "#{time}:\\d{2}",
@@ -70,6 +66,3 @@ def seconds_agnostic_time(time)
   hour, minutes, _ = time.split(":")
   "#{hour}:#{minutes}"
 end
-
-# work around "invalid option: --format" cucumber bug (see #296)
-Test::Unit.run = true if RUBY_VERSION < '1.9'
diff --git a/jekyll.gemspec b/jekyll.gemspec
index c12b4a7..7192910 100644
--- a/jekyll.gemspec
+++ b/jekyll.gemspec
@@ -1,47 +1,54 @@
+# coding: utf-8
+lib = File.expand_path('../lib', __FILE__)
+$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
+require 'jekyll/version'
+
 Gem::Specification.new do |s|
   s.specification_version = 2 if s.respond_to? :specification_version=
   s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
-  s.rubygems_version = '1.3.5'
+  s.rubygems_version = '2.2.2'
+  s.required_ruby_version = '>= 1.9.3'
 
   s.name              = 'jekyll'
-  s.version           = '1.5.1'
+  s.version           = Jekyll::VERSION
   s.license           = 'MIT'
-  s.date              = '2014-03-28'
-  s.rubyforge_project = 'jekyll'
 
   s.summary     = "A simple, blog aware, static site generator."
   s.description = "Jekyll is a simple, blog aware, static site generator."
 
   s.authors  = ["Tom Preston-Werner"]
   s.email    = 'tom at mojombo.com'
-  s.homepage = 'http://github.com/mojombo/jekyll'
-
-  s.require_paths = %w[lib]
+  s.homepage = 'http://github.com/jekyll/jekyll'
 
-  s.executables = ["jekyll"]
+  s.files         = `git ls-files`.split($/)
+  s.executables   = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
+  s.test_files    = s.files.grep(%r{^(test|spec|features)/})
+  s.require_paths = ["lib"]
 
   s.rdoc_options = ["--charset=UTF-8"]
   s.extra_rdoc_files = %w[README.markdown LICENSE]
 
   s.add_runtime_dependency('liquid', "~> 2.5.5")
   s.add_runtime_dependency('classifier', "~> 1.3")
-  s.add_runtime_dependency('listen', "~> 1.3")
-  s.add_runtime_dependency('maruku', "0.7.0")
+  s.add_runtime_dependency('listen', "~> 2.5")
+  s.add_runtime_dependency('kramdown', "~> 1.3")
   s.add_runtime_dependency('pygments.rb', "~> 0.5.0")
-  s.add_runtime_dependency('commander', "~> 4.1.3")
+  s.add_runtime_dependency('mercenary', "~> 0.3.3")
   s.add_runtime_dependency('safe_yaml', "~> 1.0")
   s.add_runtime_dependency('colorator', "~> 0.1")
-  s.add_runtime_dependency('redcarpet', "~> 2.3.0")
+  s.add_runtime_dependency('redcarpet', "~> 3.1")
   s.add_runtime_dependency('toml', '~> 0.1.0')
+  s.add_runtime_dependency('jekyll-coffeescript', '~> 1.0')
+  s.add_runtime_dependency('jekyll-sass-converter', '~> 1.0')
 
   s.add_development_dependency('rake', "~> 10.1")
   s.add_development_dependency('rdoc', "~> 3.11")
   s.add_development_dependency('redgreen', "~> 1.2")
-  s.add_development_dependency('shoulda', "~> 3.3.2")
+  s.add_development_dependency('shoulda', "~> 3.5")
   s.add_development_dependency('rr', "~> 1.1")
   s.add_development_dependency('cucumber', "1.3.11")
   s.add_development_dependency('RedCloth', "~> 4.2")
-  s.add_development_dependency('kramdown', "~> 1.2")
+  s.add_development_dependency('maruku', "0.7.0")
   s.add_development_dependency('rdiscount', "~> 1.6")
   s.add_development_dependency('launchy', "~> 2.3")
   s.add_development_dependency('simplecov', "~> 0.7")
@@ -50,260 +57,6 @@ Gem::Specification.new do |s|
   s.add_development_dependency('mime-types', "~> 1.5")
   s.add_development_dependency('activesupport', '~> 3.2.13')
   s.add_development_dependency('jekyll_test_plugin')
-
-  # = MANIFEST =
-  s.files = %w[
-    CONTRIBUTING.markdown
-    Gemfile
-    History.markdown
-    LICENSE
-    README.markdown
-    Rakefile
-    bin/jekyll
-    cucumber.yml
-    features/create_sites.feature
-    features/data.feature
-    features/drafts.feature
-    features/embed_filters.feature
-    features/include_tag.feature
-    features/markdown.feature
-    features/pagination.feature
-    features/permalinks.feature
-    features/post_data.feature
-    features/post_excerpts.feature
-    features/site_configuration.feature
-    features/site_data.feature
-    features/step_definitions/jekyll_steps.rb
-    features/support/env.rb
-    jekyll.gemspec
-    lib/jekyll.rb
-    lib/jekyll/cleaner.rb
-    lib/jekyll/command.rb
-    lib/jekyll/commands/build.rb
-    lib/jekyll/commands/doctor.rb
-    lib/jekyll/commands/new.rb
-    lib/jekyll/commands/serve.rb
-    lib/jekyll/configuration.rb
-    lib/jekyll/converter.rb
-    lib/jekyll/converters/identity.rb
-    lib/jekyll/converters/markdown.rb
-    lib/jekyll/converters/markdown/kramdown_parser.rb
-    lib/jekyll/converters/markdown/maruku_parser.rb
-    lib/jekyll/converters/markdown/rdiscount_parser.rb
-    lib/jekyll/converters/markdown/redcarpet_parser.rb
-    lib/jekyll/converters/textile.rb
-    lib/jekyll/convertible.rb
-    lib/jekyll/core_ext.rb
-    lib/jekyll/deprecator.rb
-    lib/jekyll/draft.rb
-    lib/jekyll/entry_filter.rb
-    lib/jekyll/errors.rb
-    lib/jekyll/excerpt.rb
-    lib/jekyll/filters.rb
-    lib/jekyll/generator.rb
-    lib/jekyll/generators/pagination.rb
-    lib/jekyll/layout.rb
-    lib/jekyll/mime.types
-    lib/jekyll/page.rb
-    lib/jekyll/plugin.rb
-    lib/jekyll/post.rb
-    lib/jekyll/related_posts.rb
-    lib/jekyll/site.rb
-    lib/jekyll/static_file.rb
-    lib/jekyll/stevenson.rb
-    lib/jekyll/tags/gist.rb
-    lib/jekyll/tags/highlight.rb
-    lib/jekyll/tags/include.rb
-    lib/jekyll/tags/post_url.rb
-    lib/jekyll/url.rb
-    lib/site_template/.gitignore
-    lib/site_template/_config.yml
-    lib/site_template/_layouts/default.html
-    lib/site_template/_layouts/post.html
-    lib/site_template/_posts/0000-00-00-welcome-to-jekyll.markdown.erb
-    lib/site_template/css/main.css
-    lib/site_template/css/syntax.css
-    lib/site_template/index.html
-    script/bootstrap
-    site/.gitignore
-    site/CNAME
-    site/README
-    site/_config.yml
-    site/_includes/analytics.html
-    site/_includes/docs_contents.html
-    site/_includes/docs_contents_mobile.html
-    site/_includes/docs_option.html
-    site/_includes/docs_ul.html
-    site/_includes/footer.html
-    site/_includes/header.html
-    site/_includes/news_contents.html
-    site/_includes/news_contents_mobile.html
-    site/_includes/news_item.html
-    site/_includes/primary-nav-items.html
-    site/_includes/section_nav.html
-    site/_includes/top.html
-    site/_layouts/default.html
-    site/_layouts/docs.html
-    site/_layouts/news.html
-    site/_layouts/news_item.html
-    site/_posts/2013-05-06-jekyll-1-0-0-released.markdown
-    site/_posts/2013-05-08-jekyll-1-0-1-released.markdown
-    site/_posts/2013-05-12-jekyll-1-0-2-released.markdown
-    site/_posts/2013-06-07-jekyll-1-0-3-released.markdown
-    site/_posts/2013-07-14-jekyll-1-1-0-released.markdown
-    site/_posts/2013-07-24-jekyll-1-1-1-released.markdown
-    site/_posts/2013-07-25-jekyll-1-0-4-released.markdown
-    site/_posts/2013-07-25-jekyll-1-1-2-released.markdown
-    site/_posts/2013-09-06-jekyll-1-2-0-released.markdown
-    site/_posts/2013-09-14-jekyll-1-2-1-released.markdown
-    site/_posts/2013-10-28-jekyll-1-3-0-rc1-released.markdown
-    site/_posts/2013-11-04-jekyll-1-3-0-released.markdown
-    site/_posts/2013-11-26-jekyll-1-3-1-released.markdown
-    site/_posts/2013-12-07-jekyll-1-4-0-released.markdown
-    site/_posts/2013-12-16-jekyll-1-4-2-released.markdown
-    site/_posts/2014-01-13-jekyll-1-4-3-released.markdown
-    site/_posts/2014-03-24-jekyll-1-5-0-released.markdown
-    site/_posts/2014-03-27-jekyll-1-5-1-released.markdown
-    site/css/gridism.css
-    site/css/normalize.css
-    site/css/pygments.css
-    site/css/style.css
-    site/docs/configuration.md
-    site/docs/contributing.md
-    site/docs/datafiles.md
-    site/docs/deployment-methods.md
-    site/docs/drafts.md
-    site/docs/extras.md
-    site/docs/frontmatter.md
-    site/docs/github-pages.md
-    site/docs/heroku.md
-    site/docs/history.md
-    site/docs/index.md
-    site/docs/installation.md
-    site/docs/migrations.md
-    site/docs/pages.md
-    site/docs/pagination.md
-    site/docs/permalinks.md
-    site/docs/plugins.md
-    site/docs/posts.md
-    site/docs/quickstart.md
-    site/docs/resources.md
-    site/docs/sites.md
-    site/docs/structure.md
-    site/docs/templates.md
-    site/docs/troubleshooting.md
-    site/docs/upgrading.md
-    site/docs/usage.md
-    site/docs/variables.md
-    site/favicon.png
-    site/feed.xml
-    site/freenode.txt
-    site/img/article-footer.png
-    site/img/footer-arrow.png
-    site/img/footer-logo.png
-    site/img/logo-2x.png
-    site/img/octojekyll.png
-    site/img/tube.png
-    site/img/tube1x.png
-    site/index.html
-    site/js/modernizr-2.5.3.min.js
-    site/news/index.html
-    site/news/releases/index.html
-    test/fixtures/broken_front_matter1.erb
-    test/fixtures/broken_front_matter2.erb
-    test/fixtures/broken_front_matter3.erb
-    test/fixtures/exploit_front_matter.erb
-    test/fixtures/front_matter.erb
-    test/helper.rb
-    test/source/+/foo.md
-    test/source/.htaccess
-    test/source/_config.dev.toml
-    test/source/_data/languages.yml
-    test/source/_data/members.yaml
-    test/source/_data/products.yml
-    test/source/_includes/params.html
-    test/source/_includes/sig.markdown
-    test/source/_includes/tmp
-    test/source/_layouts/default.html
-    test/source/_layouts/post/simple.html
-    test/source/_layouts/simple.html
-    test/source/_plugins/dummy.rb
-    test/source/_posts/2008-02-02-not-published.textile
-    test/source/_posts/2008-02-02-published.textile
-    test/source/_posts/2008-10-18-foo-bar.textile
-    test/source/_posts/2008-11-21-complex.textile
-    test/source/_posts/2008-12-03-permalinked-post.textile
-    test/source/_posts/2008-12-13-include.markdown
-    test/source/_posts/2009-01-27-array-categories.textile
-    test/source/_posts/2009-01-27-categories.textile
-    test/source/_posts/2009-01-27-category.textile
-    test/source/_posts/2009-01-27-empty-categories.textile
-    test/source/_posts/2009-01-27-empty-category.textile
-    test/source/_posts/2009-03-12-hash-#1.markdown
-    test/source/_posts/2009-05-18-empty-tag.textile
-    test/source/_posts/2009-05-18-empty-tags.textile
-    test/source/_posts/2009-05-18-tag.textile
-    test/source/_posts/2009-05-18-tags.textile
-    test/source/_posts/2009-06-22-empty-yaml.textile
-    test/source/_posts/2009-06-22-no-yaml.textile
-    test/source/_posts/2010-01-08-triple-dash.markdown
-    test/source/_posts/2010-01-09-date-override.textile
-    test/source/_posts/2010-01-09-time-override.textile
-    test/source/_posts/2010-01-09-timezone-override.textile
-    test/source/_posts/2010-01-16-override-data.textile
-    test/source/_posts/2011-04-12-md-extension.md
-    test/source/_posts/2011-04-12-text-extension.text
-    test/source/_posts/2013-01-02-post-excerpt.markdown
-    test/source/_posts/2013-01-12-nil-layout.textile
-    test/source/_posts/2013-01-12-no-layout.textile
-    test/source/_posts/2013-03-19-not-a-post.markdown/.gitkeep
-    test/source/_posts/2013-04-11-custom-excerpt.markdown
-    test/source/_posts/2013-05-10-number-category.textile
-    test/source/_posts/2013-07-22-post-excerpt-with-layout.markdown
-    test/source/_posts/2013-08-01-mkdn-extension.mkdn
-    test/source/_posts/2014-01-06-permalink-traversal.md
-    test/source/_posts/es/2008-11-21-nested.textile
-    test/source/about.html
-    test/source/category/_posts/2008-9-23-categories.textile
-    test/source/contacts.html
-    test/source/contacts/bar.html
-    test/source/contacts/index.html
-    test/source/css/screen.css
-    test/source/deal.with.dots.html
-    test/source/exploit.md
-    test/source/foo/_posts/bar/2008-12-12-topical-post.textile
-    test/source/index.html
-    test/source/products.yml
-    test/source/sitemap.xml
-    test/source/symlink-test/_data
-    test/source/symlink-test/symlinked-dir
-    test/source/symlink-test/symlinked-file
-    test/source/win/_posts/2009-05-24-yaml-linebreak.markdown
-    test/source/z_category/_posts/2008-9-23-categories.textile
-    test/suite.rb
-    test/test_command.rb
-    test/test_configuration.rb
-    test/test_convertible.rb
-    test/test_core_ext.rb
-    test/test_entry_filter.rb
-    test/test_excerpt.rb
-    test/test_filters.rb
-    test/test_generated_site.rb
-    test/test_kramdown.rb
-    test/test_new_command.rb
-    test/test_page.rb
-    test/test_pager.rb
-    test/test_path_sanitization.rb
-    test/test_post.rb
-    test/test_rdiscount.rb
-    test/test_redcarpet.rb
-    test/test_redcloth.rb
-    test/test_related_posts.rb
-    test/test_site.rb
-    test/test_tags.rb
-    test/test_url.rb
-  ]
-  # = MANIFEST =
-
-  s.test_files = s.files.select { |path| path =~ /^test\/test_.*\.rb/ }
+  s.add_development_dependency('jekyll_test_plugin_malicious')
+  s.add_development_dependency('rouge', '~> 1.3')
 end
diff --git a/lib/jekyll.rb b/lib/jekyll.rb
index a2a97ba..941084d 100644
--- a/lib/jekyll.rb
+++ b/lib/jekyll.rb
@@ -18,21 +18,26 @@ require 'rubygems'
 # stdlib
 require 'fileutils'
 require 'time'
-require 'safe_yaml'
+require 'safe_yaml/load'
 require 'English'
 require 'pathname'
 
 # 3rd party
 require 'liquid'
-require 'maruku'
+require 'kramdown'
 require 'colorator'
 require 'toml'
 
 # internal requires
-require 'jekyll/core_ext'
+require 'jekyll/version'
+require 'jekyll/utils'
 require 'jekyll/stevenson'
 require 'jekyll/deprecator'
 require 'jekyll/configuration'
+require 'jekyll/document'
+require 'jekyll/collection'
+require 'jekyll/plugin_manager'
+require 'jekyll/frontmatter_defaults'
 require 'jekyll/site'
 require 'jekyll/convertible'
 require 'jekyll/url'
@@ -47,12 +52,16 @@ require 'jekyll/errors'
 require 'jekyll/related_posts'
 require 'jekyll/cleaner'
 require 'jekyll/entry_filter'
+require 'jekyll/layout_reader'
+require 'jekyll/publisher'
+require 'jekyll/renderer'
 
 # extensions
 require 'jekyll/plugin'
 require 'jekyll/converter'
 require 'jekyll/generator'
 require 'jekyll/command'
+require 'jekyll/liquid_extensions'
 
 require_all 'jekyll/commands'
 require_all 'jekyll/converters'
@@ -60,11 +69,13 @@ require_all 'jekyll/converters/markdown'
 require_all 'jekyll/generators'
 require_all 'jekyll/tags'
 
+# plugins
+require 'jekyll-coffeescript'
+require 'jekyll-sass-converter'
+
 SafeYAML::OPTIONS[:suppress_warnings] = true
 
 module Jekyll
-  VERSION = '1.5.1'
-
   # Public: Generate a Jekyll configuration Hash by merging the default
   # options with anything in _config.yml, and adding the given options on top.
   #
@@ -79,7 +90,7 @@ module Jekyll
     config = config.read_config_files(config.config_files(override))
 
     # Merge DEFAULTS < _config.yml < override
-    config = config.deep_merge(override).stringify_keys
+    config = Utils.deep_merge_hashes(config, override).stringify_keys
     set_timezone(config['timezone']) if config['timezone']
 
     config
@@ -98,11 +109,15 @@ module Jekyll
     @logger ||= Stevenson.new
   end
 
-  # Get a subpath without any of the traversal nonsense.
+  # Public: File system root
   #
-  # Returns a pure and clean path
+  # Returns the root of the filesystem as a Pathname
+  def self.fs_root
+    @fs_root ||= "/"
+  end
+
   def self.sanitized_path(base_directory, questionable_path)
-    clean_path = File.expand_path(questionable_path, "/")
+    clean_path = File.expand_path(questionable_path, fs_root)
     clean_path.gsub!(/\A\w\:\//, '/')
     unless clean_path.start_with?(base_directory)
       File.join(base_directory, clean_path)
diff --git a/lib/jekyll/cleaner.rb b/lib/jekyll/cleaner.rb
index e3a89b4..583fc84 100644
--- a/lib/jekyll/cleaner.rb
+++ b/lib/jekyll/cleaner.rb
@@ -4,6 +4,8 @@ module Jekyll
   class Site
     # Handles the cleanup of a site's destination before it is built.
     class Cleaner
+      attr_reader :site
+
       def initialize(site)
         @site = site
       end
@@ -27,7 +29,7 @@ module Jekyll
       # Returns a Set with the file paths
       def existing_files
         files = Set.new
-        Dir.glob(File.join(@site.dest, "**", "*"), File::FNM_DOTMATCH) do |file|
+        Dir.glob(File.join(site.dest, "**", "*"), File::FNM_DOTMATCH) do |file|
           files << file unless file =~ /\/\.{1,2}$/ || file =~ keep_file_regex
         end
         files
@@ -38,7 +40,7 @@ module Jekyll
       # Returns a Set with the file paths
       def new_files
         files = Set.new
-        @site.each_site_file { |item| files << item.destination(@site.dest) }
+        site.each_site_file { |item| files << item.destination(site.dest) }
         files
       end
 
@@ -64,7 +66,7 @@ module Jekyll
       #
       # Returns the regular expression
       def keep_file_regex
-        or_list = @site.keep_files.join("|")
+        or_list = site.keep_files.join("|")
         pattern = "\/(#{or_list.gsub(".", "\.")})"
         Regexp.new pattern
       end
diff --git a/lib/jekyll/collection.rb b/lib/jekyll/collection.rb
new file mode 100644
index 0000000..dcb7b50
--- /dev/null
+++ b/lib/jekyll/collection.rb
@@ -0,0 +1,147 @@
+module Jekyll
+  class Collection
+    attr_reader :site, :label, :metadata
+
+    # Create a new Collection.
+    #
+    # site - the site to which this collection belongs.
+    # label - the name of the collection
+    #
+    # Returns nothing.
+    def initialize(site, label)
+      @site     = site
+      @label    = sanitize_label(label)
+      @metadata = extract_metadata
+    end
+
+    # Fetch the Documents in this collection.
+    # Defaults to an empty array if no documents have been read in.
+    #
+    # Returns an array of Jekyll::Document objects.
+    def docs
+      @docs ||= []
+    end
+
+    # Read the allowed documents into the collection's array of docs.
+    #
+    # Returns the sorted array of docs.
+    def read
+      filtered_entries.each do |file_path|
+        doc = Jekyll::Document.new(Jekyll.sanitized_path(directory, file_path), { site: site, collection: self })
+        doc.read
+        docs << doc
+      end
+      docs.sort!
+    end
+
+    # All the entries in this collection.
+    #
+    # Returns an Array of file paths to the documents in this collection
+    #   relative to the collection's directory
+    def entries
+      return Array.new unless exists?
+      Dir.glob(File.join(directory, "**", "*.*")).map do |entry|
+        entry[File.join(directory, "")] = ''; entry
+      end
+    end
+
+    # Filtered version of the entries in this collection.
+    # See `Jekyll::EntryFilter#filter` for more information.
+    #
+    # Returns a list of filtered entry paths.
+    def filtered_entries
+      return Array.new unless exists?
+      Dir.chdir(directory) do
+        entry_filter.filter(entries)
+      end
+    end
+
+    # The directory for this Collection, relative to the site source.
+    #
+    # Returns a String containing the directory name where the collection
+    #   is stored on the filesystem.
+    def relative_directory
+      "_#{label}"
+    end
+
+    # The full path to the directory containing the
+    #
+    # Returns a String containing th directory name where the collection
+    #   is stored on the filesystem.
+    def directory
+      Jekyll.sanitized_path(site.source, relative_directory)
+    end
+
+    # Checks whether the directory "exists" for this collection.
+    # The directory must exist on the filesystem and must not be a symlink
+    #   if in safe mode.
+    #
+    # Returns false if the directory doesn't exist or if it's a symlink
+    #   and we're in safe mode.
+    def exists?
+      File.directory?(directory) && !(File.symlink?(directory) && site.safe)
+    end
+
+    # The entry filter for this collection.
+    # Creates an instance of Jekyll::EntryFilter.
+    #
+    # Returns the instance of Jekyll::EntryFilter for this collection.
+    def entry_filter
+      @entry_filter ||= Jekyll::EntryFilter.new(site, relative_directory)
+    end
+
+    # An inspect string.
+    #
+    # Returns the inspect string
+    def inspect
+      "#<Jekyll::Collection @label=#{label} docs=#{docs}>"
+    end
+
+    # Produce a sanitized label name
+    # Label names may not contain anything but alphanumeric characters,
+    #   underscores, and hyphens.
+    #
+    # label - the possibly-unsafe label
+    #
+    # Returns a sanitized version of the label.
+    def sanitize_label(label)
+      label.gsub(/[^a-z0-9_\-]/i, '')
+    end
+
+    # Produce a representation of this Collection for use in Liquid.
+    # Exposes two attributes:
+    #   - label
+    #   - docs
+    #
+    # Returns a representation of this collection for use in Liquid.
+    def to_liquid
+      metadata.merge({
+        "label"     => label,
+        "docs"      => docs,
+        "directory" => directory,
+        "output"    => write?,
+        "relative_directory" => relative_directory
+      })
+    end
+
+    # Whether the collection's documents ought to be written as individual
+    #   files in the output.
+    #
+    # Returns true if the 'write' metadata is true, false otherwise.
+    def write?
+      !!metadata['output']
+    end
+
+    # Extract options for this collection from the site configuration.
+    #
+    # Returns the metadata for this collection
+    def extract_metadata
+      if site.config['collections'].is_a?(Hash)
+        site.config['collections'][label] || Hash.new
+      else
+        {}
+      end
+    end
+
+  end
+end
diff --git a/lib/jekyll/command.rb b/lib/jekyll/command.rb
index 911d85b..62a532f 100644
--- a/lib/jekyll/command.rb
+++ b/lib/jekyll/command.rb
@@ -1,27 +1,81 @@
 module Jekyll
   class Command
-    def self.globs(source, destination)
-      Dir.chdir(source) do
-        dirs = Dir['*'].select { |x| File.directory?(x) }
-        dirs -= [destination, File.expand_path(destination), File.basename(destination)]
-        dirs = dirs.map { |x| "#{x}/**/*" }
-        dirs += ['*']
+
+    class << self
+
+      # A list of subclasses of Jekyll::Command
+      def subclasses
+        @subclasses ||= []
+      end
+
+      # Keep a list of subclasses of Jekyll::Command every time it's inherited
+      # Called automatically.
+      #
+      # base - the subclass
+      #
+      # Returns nothing
+      def inherited(base)
+        subclasses << base
+        super(base)
+      end
+
+      # Listing of all directories (globbed to include subfiles and folders)
+      #
+      # source - the source path
+      # destination - the destination path
+      #
+      # Returns an Array of directory globs in the source, excluding the destination
+      def globs(source, destination)
+        Dir.chdir(source) do
+          dirs = Dir['*'].select { |x| File.directory?(x) }
+          dirs -= [destination, File.expand_path(destination), File.basename(destination)]
+          dirs = dirs.map { |x| "#{x}/**/*" }
+          dirs += ['*']
+        end
+      end
+
+      # Run Site#process and catch errors
+      #
+      # site - the Jekyll::Site object
+      #
+      # Returns nothing
+      def process_site(site)
+        site.process
+      rescue Jekyll::FatalException => e
+        Jekyll.logger.error "ERROR:", "YOUR SITE COULD NOT BE BUILT:"
+        Jekyll.logger.error "", "------------------------------------"
+        Jekyll.logger.error "", e.message
+        exit(1)
+      end
+
+      # Create a full Jekyll configuration with the options passed in as overrides
+      #
+      # options - the configuration overrides
+      #
+      # Returns a full Jekyll configuration
+      def configuration_from_options(options)
+        Jekyll.configuration(options)
+      end
+
+      # Add common options to a command for building configuration
+      #
+      # c - the Jekyll::Command to add these options to
+      #
+      # Returns nothing
+      def add_build_options(c)
+        c.option 'config',  '--config CONFIG_FILE[,CONFIG_FILE2,...]', Array, 'Custom configuration file'
+        c.option 'future',  '--future', 'Publishes posts with a future date'
+        c.option 'limit_posts', '--limit_posts MAX_POSTS', Integer, 'Limits the number of posts to parse and publish'
+        c.option 'watch',   '-w', '--watch', 'Watch for changes and rebuild'
+        c.option 'force_polling', '--force_polling', 'Force watch to use polling'
+        c.option 'lsi',     '--lsi', 'Use LSI for improved related posts'
+        c.option 'show_drafts',  '-D', '--drafts', 'Render posts in the _drafts folder'
+        c.option 'unpublished', '--unpublished', 'Render posts that were marked as unpublished'
+        c.option 'quiet',   '-q', '--quiet', 'Silence output.'
+        c.option 'verbose', '-V', '--verbose', 'Print verbose output.'
       end
-    end
 
-    # Static: Run Site#process and catch errors
-    #
-    # site - the Jekyll::Site object
-    #
-    # Returns nothing
-    def self.process_site(site)
-      site.process
-    rescue Jekyll::FatalException => e
-      puts
-      Jekyll.logger.error "ERROR:", "YOUR SITE COULD NOT BE BUILT:"
-      Jekyll.logger.error "", "------------------------------------"
-      Jekyll.logger.error "", e.message
-      exit(1)
     end
+
   end
 end
diff --git a/lib/jekyll/commands/build.rb b/lib/jekyll/commands/build.rb
index bfc69aa..54c774a 100644
--- a/lib/jekyll/commands/build.rb
+++ b/lib/jekyll/commands/build.rb
@@ -1,70 +1,106 @@
 module Jekyll
   module Commands
     class Build < Command
-      def self.process(options)
-        site = Jekyll::Site.new(options)
-
-        self.build(site, options)
-        self.watch(site, options) if options['watch']
-      end
-
-      # Private: Build the site from source into destination.
-      #
-      # site - A Jekyll::Site instance
-      # options - A Hash of options passed to the command
-      #
-      # Returns nothing.
-      def self.build(site, options)
-        source = options['source']
-        destination = options['destination']
-        Jekyll.logger.info "Source:", source
-        Jekyll.logger.info "Destination:", destination
-        print Jekyll.logger.formatted_topic "Generating..."
-        self.process_site(site)
-        puts "done."
-      end
-
-      # Private: Watch for file changes and rebuild the site.
-      #
-      # site - A Jekyll::Site instance
-      # options - A Hash of options passed to the command
-      #
-      # Returns nothing.
-      def self.watch(site, options)
-        require 'listen'
-
-        source = options['source']
-        destination = options['destination']
-
-        begin
-          dest = Pathname.new(destination).relative_path_from(Pathname.new(source)).to_s
-          ignored = Regexp.new(Regexp.escape(dest))
-        rescue ArgumentError
-          # Destination is outside the source, no need to ignore it.
-          ignored = nil
+
+      class << self
+
+        # Create the Mercenary command for the Jekyll CLI for this Command
+        def init_with_program(prog)
+          prog.command(:build) do |c|
+            c.syntax      'build [options]'
+            c.description 'Build your site'
+
+            add_build_options(c)
+
+            c.action do |args, options|
+              options["serving"] = false
+              Jekyll::Commands::Build.process(options)
+            end
+          end
         end
 
-        Jekyll.logger.info "Auto-regeneration:", "enabled"
+        # Build your jekyll site
+        # Continuously watch if `watch` is set to true in the config.
+        def process(options)
+          options = configuration_from_options(options)
+          site = Jekyll::Site.new(options)
 
-        listener = Listen::Listener.new(source, :ignore => ignored) do |modified, added, removed|
-          t = Time.now.strftime("%Y-%m-%d %H:%M:%S")
-          n = modified.length + added.length + removed.length
-          print Jekyll.logger.formatted_topic("Regenerating:") + "#{n} files at #{t} "
-          self.process_site(site)
-          puts  "...done."
+          Jekyll.logger.log_level = :error if options['quiet']
+
+          build(site, options)
+          watch(site, options) if options['watch']
+        end
+
+        # Build your Jekyll site.
+        #
+        # site - the Jekyll::Site instance to build
+        # options - the
+        #
+        # Returns nothing.
+        def build(site, options)
+          source      = options['source']
+          destination = options['destination']
+          Jekyll.logger.info "Source:", source
+          Jekyll.logger.info "Destination:", destination
+          Jekyll.logger.info "Generating..."
+          process_site(site)
+          Jekyll.logger.info "", "done."
         end
-        listener.start
 
-        unless options['serving']
-          trap("INT") do
-            listener.stop
-            puts "     Halting auto-regeneration."
-            exit 0
+        # Private: Watch for file changes and rebuild the site.
+        #
+        # site - A Jekyll::Site instance
+        # options - A Hash of options passed to the command
+        #
+        # Returns nothing.
+        def watch(site, options)
+          require 'listen'
+
+          source      = options['source']
+          destination = options['destination']
+
+          begin
+            dest    = Pathname.new(destination).relative_path_from(Pathname.new(source)).to_s
+            ignored = Regexp.new(Regexp.escape(dest))
+          rescue ArgumentError
+            # Destination is outside the source, no need to ignore it.
+            ignored = nil
+          end
+
+          listener = Listen.to(
+            source,
+            :ignore => ignored,
+            :force_polling => options['force_polling']
+          ) do |modified, added, removed|
+            t = Time.now.strftime("%Y-%m-%d %H:%M:%S")
+            n = modified.length + added.length + removed.length
+            print Jekyll.logger.formatted_topic("Regenerating:") + "#{n} files at #{t} "
+            begin
+              process_site(site)
+              puts  "...done."
+            rescue => e
+              puts "...error:"
+              Jekyll.logger.warn "Error:", e.message
+              Jekyll.logger.warn "Error:", "Run jekyll build --trace for more information."
+            end
           end
+          listener.start
+
+          Jekyll.logger.info "Auto-regeneration:", "enabled"
 
-          loop { sleep 1000 }
+          unless options['serving']
+            trap("INT") do
+              listener.stop
+              puts "     Halting auto-regeneration."
+              exit 0
+            end
+
+            loop { sleep 1000 }
+          end
         end
-      end
+
+      end # end of class << self
+
     end
   end
 end
diff --git a/lib/jekyll/commands/docs.rb b/lib/jekyll/commands/docs.rb
new file mode 100644
index 0000000..71c1016
--- /dev/null
+++ b/lib/jekyll/commands/docs.rb
@@ -0,0 +1,30 @@
+module Jekyll
+  module Commands
+    class Docs < Command
+
+      class << self
+
+        def init_with_program(prog)
+          prog.command(:docs) do |c|
+            c.syntax 'docs'
+            c.description "Launch local server with docs for Jekyll v#{Jekyll::VERSION}"
+
+            c.option 'port', '-P', '--port [PORT]', 'Port to listen on'
+            c.option 'host', '-H', '--host [HOST]', 'Host to bind to'
+
+            c.action do |args, options|
+              options.merge!({
+                'source'      => File.expand_path("../../../site", File.dirname(__FILE__)),
+                'destination' => File.expand_path("../../../site/_site", File.dirname(__FILE__))
+              })
+              Jekyll::Commands::Build.process(options)
+              Jekyll::Commands::Serve.process(options)
+            end
+          end
+        end
+
+      end
+
+    end
+  end
+end
diff --git a/lib/jekyll/commands/doctor.rb b/lib/jekyll/commands/doctor.rb
index 7ebab90..0fab8b3 100644
--- a/lib/jekyll/commands/doctor.rb
+++ b/lib/jekyll/commands/doctor.rb
@@ -2,8 +2,23 @@ module Jekyll
   module Commands
     class Doctor < Command
       class << self
+
+        def init_with_program(prog)
+          prog.command(:doctor) do |c|
+            c.syntax 'doctor'
+            c.description 'Search site and print specific deprecation warnings'
+            c.alias(:hyde)
+
+            c.option '--config CONFIG_FILE[,CONFIG_FILE2,...]', Array, 'Custom configuration file'
+
+            c.action do |args, options|
+              Jekyll::Commands::Doctor.process(options)
+            end
+          end
+        end
+
         def process(options)
-          site = Jekyll::Site.new(options)
+          site = Jekyll::Site.new(configuration_from_options(options))
           site.read
 
           if healthy?(site)
@@ -26,7 +41,7 @@ module Jekyll
             if page.uses_relative_permalinks
               Jekyll.logger.warn "Deprecation:", "'#{page.path}' uses relative" +
                                   " permalinks which will be deprecated in" +
-                                  " Jekyll v1.2 and beyond."
+                                  " Jekyll v2.0.0 and beyond."
               contains_deprecated_pages = true
             end
           end
@@ -61,7 +76,9 @@ module Jekyll
           end
           urls
         end
+
       end
+
     end
   end
 end
diff --git a/lib/jekyll/commands/new.rb b/lib/jekyll/commands/new.rb
index 00b08c2..ca5ed16 100644
--- a/lib/jekyll/commands/new.rb
+++ b/lib/jekyll/commands/new.rb
@@ -3,27 +3,40 @@ require 'erb'
 module Jekyll
   module Commands
     class New < Command
+      def self.init_with_program(prog)
+        prog.command(:new) do |c|
+          c.syntax 'new PATH'
+          c.description 'Creates a new Jekyll site scaffold in PATH'
+
+          c.option 'force', '--force', 'Force creation even if PATH already exists'
+          c.option 'blank', '--blank', 'Creates scaffolding but with empty files'
+
+          c.action do |args, options|
+            Jekyll::Commands::New.process(args, options)
+          end
+        end
+      end
+
       def self.process(args, options = {})
         raise ArgumentError.new('You must specify a path.') if args.empty?
 
         new_blog_path = File.expand_path(args.join(" "), Dir.pwd)
         FileUtils.mkdir_p new_blog_path
         if preserve_source_location?(new_blog_path, options)
-          Jekyll.logger.error "Conflict:", "#{new_blog_path} exists and is not empty."
-          exit(1)
+          Jekyll.logger.abort_with "Conflict:", "#{new_blog_path} exists and is not empty."
         end
 
-        if options[:blank]
+        if options["blank"]
           create_blank_site new_blog_path
         else
           create_sample_files new_blog_path
 
-          File.open(File.expand_path(self.initialized_post_name, new_blog_path), "w") do |f|
-            f.write(self.scaffold_post_content)
+          File.open(File.expand_path(initialized_post_name, new_blog_path), "w") do |f|
+            f.write(scaffold_post_content)
           end
         end
 
-        puts "New jekyll site installed in #{new_blog_path}."
+        Jekyll.logger.info "New jekyll site installed in #{new_blog_path}."
       end
 
       def self.create_blank_site(path)
@@ -47,7 +60,7 @@ module Jekyll
       private
 
       def self.preserve_source_location?(path, options)
-        !options[:force] && !Dir["#{path}/**/*"].empty?
+        !options["force"] && !Dir["#{path}/**/*"].empty?
       end
 
       def self.create_sample_files(path)
diff --git a/lib/jekyll/commands/serve.rb b/lib/jekyll/commands/serve.rb
index 8e8d00b..0f6c6d3 100644
--- a/lib/jekyll/commands/serve.rb
+++ b/lib/jekyll/commands/serve.rb
@@ -2,64 +2,127 @@
 module Jekyll
   module Commands
     class Serve < Command
-      def self.process(options)
-        require 'webrick'
-        include WEBrick
 
-        destination = options['destination']
+      class << self
 
-        FileUtils.mkdir_p(destination)
+        def init_with_program(prog)
+          prog.command(:serve) do |c|
+            c.syntax 'serve [options]'
+            c.description 'Serve your site locally'
+            c.alias :server
 
-        # recreate NondisclosureName under utf-8 circumstance
-        fh_option = WEBrick::Config::FileHandler
-        fh_option[:NondisclosureName] = ['.ht*','~*']
+            add_build_options(c)
+
+            c.option 'detach', '-B', '--detach', 'Run the server in the background (detach)'
+            c.option 'port', '-P', '--port [PORT]', 'Port to listen on'
+            c.option 'host', '-H', '--host [HOST]', 'Host to bind to'
+            c.option 'baseurl', '-b', '--baseurl [URL]', 'Base URL'
+
+            c.action do |args, options|
+              options["serving"] ||= true
+              Jekyll::Commands::Build.process(options)
+              Jekyll::Commands::Serve.process(options)
+            end
+          end
+        end
+
+        # Boot up a WEBrick server which points to the compiled site's root.
+        def process(options)
+          options = configuration_from_options(options)
+          destination = options['destination']
+          setup(destination)
 
-        s = HTTPServer.new(webrick_options(options))
+          s = WEBrick::HTTPServer.new(webrick_options(options))
+          s.unmount("")
 
-        s.mount(options['baseurl'], HTTPServlet::FileHandler, destination, fh_option)
+          s.mount(
+            options['baseurl'],
+            WEBrick::HTTPServlet::FileHandler,
+            destination,
+            file_handler_options
+          )
 
-        Jekyll.logger.info "Server address:", "http://#{s.config[:BindAddress]}:#{s.config[:Port]}"
+          Jekyll.logger.info "Server address:", server_address(s, options)
 
-        if options['detach'] # detach the server
-          pid = Process.fork { s.start }
-          Process.detach(pid)
-          Jekyll.logger.info "Server detatched with pid '#{pid}'.", "Run `kill -9 #{pid}' to stop the server."
-        else # create a new server thread, then join it with current terminal
-          t = Thread.new { s.start }
-          trap("INT") { s.shutdown }
-          t.join()
+          if options['detach'] # detach the server
+            pid = Process.fork { s.start }
+            Process.detach(pid)
+            Jekyll.logger.info "Server detached with pid '#{pid}'.", "Run `kill -9 #{pid}' to stop the server."
+          else # create a new server thread, then join it with current terminal
+            t = Thread.new { s.start }
+            trap("INT") { s.shutdown }
+            t.join
+          end
         end
-      end
 
-      def self.webrick_options(config)
-        opts = {
-          :Port => config['port'],
-          :BindAddress => config['host'],
-          :MimeTypes => self.mime_types,
-          :DoNotReverseLookup => true,
-          :StartCallback => start_callback(config['detach'])
-        }
-
-        if !config['verbose']
-          opts.merge!({
-            :AccessLog => [],
-            :Logger => Log::new([], Log::WARN)
-          })
+        def setup(destination)
+          require 'webrick'
+
+          FileUtils.mkdir_p(destination)
+
+          # monkey patch WEBrick using custom 404 page (/404.html)
+          if File.exist?(File.join(destination, '404.html'))
+            WEBrick::HTTPResponse.class_eval do
+              def create_error_page
+                @header['content-type'] = "text/html; charset=UTF-8"
+                @body = IO.read(File.join(@config[:DocumentRoot], '404.html'))
+              end
+            end
+          end
         end
 
-        opts
-      end
+        def webrick_options(config)
+          opts = {
+            :DocumentRoot       => config['destination'],
+            :Port               => config['port'],
+            :BindAddress        => config['host'],
+            :MimeTypes          => mime_types,
+            :DoNotReverseLookup => true,
+            :StartCallback      => start_callback(config['detach']),
+            :DirectoryIndex     => %w(index.html index.htm index.cgi index.rhtml index.xml)
+          }
 
-      def self.start_callback(detached)
-        unless detached
-          Proc.new { Jekyll.logger.info "Server running...", "press ctrl-c to stop." }
+          if !config['verbose']
+            opts.merge!({
+              :AccessLog => [],
+              :Logger => WEBrick::Log.new([], WEBrick::Log::WARN)
+            })
+          end
+
+          opts
+        end
+
+        def start_callback(detached)
+          unless detached
+            Proc.new { Jekyll.logger.info "Server running...", "press ctrl-c to stop." }
+          end
+        end
+
+        def mime_types
+          mime_types_file = File.expand_path('../mime.types', File.dirname(__FILE__))
+          WEBrick::HTTPUtils::load_mime_types(mime_types_file)
+        end
+
+        def server_address(server, options)
+          baseurl = "#{options['baseurl']}/" if options['baseurl']
+          [
+            "http://",
+            server.config[:BindAddress],
+            ":",
+            server.config[:Port],
+            baseurl || ""
+          ].map(&:to_s).join("")
+        end
+
+        # recreate NondisclosureName under utf-8 circumstance
+        def file_handler_options
+          fh_option = WEBrick::Config::FileHandler
+          fh_option[:NondisclosureName] = ['.ht*','~*']
+          fh_option
         end
-      end
 
-      def self.mime_types
-        mime_types_file = File.expand_path('../mime.types', File.dirname(__FILE__))
-        WEBrick::HTTPUtils::load_mime_types(mime_types_file)
       end
+
     end
   end
 end
diff --git a/lib/jekyll/configuration.rb b/lib/jekyll/configuration.rb
index 86aca28..0c68365 100644
--- a/lib/jekyll/configuration.rb
+++ b/lib/jekyll/configuration.rb
@@ -13,10 +13,11 @@ module Jekyll
       'data_source'   =>  '_data',
       'keep_files'    => ['.git','.svn'],
       'gems'          => [],
+      'collections'   => nil,
 
       'timezone'      => nil,           # use the local timezone
 
-      'encoding'      => nil,           # use the system encoding
+      'encoding'      => 'utf-8',       # always use utf-8 encoding. NEVER FORGET
 
       'safe'          => false,
       'detach'        => false,          # default to not detaching the server
@@ -24,19 +25,19 @@ module Jekyll
       'limit_posts'   => 0,
       'lsi'           => false,
       'future'        => true,           # remove and make true just default
-      'pygments'      => true,
+      'unpublished'   => false,
 
-      'relative_permalinks' => true,     # backwards-compatibility with < 1.0
-                                         # will be set to false once 2.0 hits
+      'relative_permalinks' => false,
 
-      'markdown'      => 'maruku',
+      'markdown'      => 'kramdown',
+      'highlighter'   => 'pygments',
       'permalink'     => 'date',
-      'baseurl'       => '/',
+      'baseurl'       => '',
       'include'       => ['.htaccess'],
       'exclude'       => [],
       'paginate_path' => '/page:num',
 
-      'markdown_ext'  => 'markdown,mkd,mkdn,md',
+      'markdown_ext'  => 'markdown,mkdown,mkdn,mkd,md',
       'textile_ext'   => 'textile',
 
       'port'          => '4000',
@@ -44,13 +45,15 @@ module Jekyll
 
       'excerpt_separator' => "\n\n",
 
+      'defaults'     => [],
+
       'maruku' => {
-        'fenced_code_blocks' => true,
         'use_tex'    => false,
         'use_divs'   => false,
         'png_engine' => 'blahtex',
         'png_dir'    => 'images/latex',
-        'png_url'    => '/images/latex'
+        'png_url'    => '/images/latex',
+        'fenced_code_blocks' => true
       },
 
       'rdiscount' => {
@@ -105,7 +108,7 @@ module Jekyll
       when '.toml'
         TOML.load_file(filename)
       when /\.y(a)?ml/
-        YAML.safe_load_file(filename)
+        SafeYAML.load_file(filename)
       else
         raise ArgumentError, "No parser for '#{filename}' is available. Use a .toml or .y(a)ml file instead."
       end
@@ -159,7 +162,7 @@ module Jekyll
       begin
         files.each do |config_file|
           new_config = read_config_file(config_file)
-          configuration = configuration.deep_merge(new_config)
+          configuration = Utils.deep_merge_hashes(configuration, new_config)
         end
       rescue ArgumentError => err
         Jekyll.logger.warn "WARNING:", "Error reading configuration. " +
@@ -210,6 +213,16 @@ module Jekyll
         config.delete('server_port')
       end
 
+      if config.has_key? 'pygments'
+        Jekyll.logger.warn "Deprecation:", "The 'pygments' configuration option" +
+                            " has been renamed to 'highlighter'. Please update your" +
+                            " config file accordingly. The allowed values are 'rouge', " +
+                            "'pygments' or null."
+
+        config['highlighter'] = 'pygments' if config['pygments']
+        config.delete('pygments')
+      end
+
       %w[include exclude].each do |option|
         if config.fetch(option, []).is_a?(String)
           Jekyll.logger.warn "Deprecation:", "The '#{option}' configuration option" +
@@ -219,6 +232,12 @@ module Jekyll
           config[option] = csv_to_array(config[option])
         end
       end
+
+      if config.fetch('markdown', 'kramdown').to_s.downcase.eql?("maruku")
+        Jekyll::Deprecator.deprecation_message "You're using the 'maruku' " +
+          "Markdown processor. Maruku support has been deprecated and will " +
+          "be removed in 3.0.0. We recommend you switch to Kramdown."
+      end
       config
     end
 
@@ -233,6 +252,5 @@ module Jekyll
 
       config
     end
-
   end
 end
diff --git a/lib/jekyll/converter.rb b/lib/jekyll/converter.rb
index e2dc279..c30f494 100644
--- a/lib/jekyll/converter.rb
+++ b/lib/jekyll/converter.rb
@@ -1,27 +1,27 @@
 module Jekyll
   class Converter < Plugin
-    # Public: Get or set the pygments prefix. When an argument is specified,
+    # Public: Get or set the highlighter prefix. When an argument is specified,
     # the prefix will be set. If no argument is specified, the current prefix
     # will be returned.
     #
-    # pygments_prefix - The String prefix (default: nil).
+    # highlighter_prefix - The String prefix (default: nil).
     #
     # Returns the String prefix.
-    def self.pygments_prefix(pygments_prefix = nil)
-      @pygments_prefix = pygments_prefix if pygments_prefix
-      @pygments_prefix
+    def self.highlighter_prefix(highlighter_prefix = nil)
+      @highlighter_prefix = highlighter_prefix if highlighter_prefix
+      @highlighter_prefix
     end
 
-    # Public: Get or set the pygments suffix. When an argument is specified,
+    # Public: Get or set the highlighter suffix. When an argument is specified,
     # the suffix will be set. If no argument is specified, the current suffix
     # will be returned.
     #
-    # pygments_suffix - The String suffix (default: nil).
+    # highlighter_suffix - The String suffix (default: nil).
     #
     # Returns the String suffix.
-    def self.pygments_suffix(pygments_suffix = nil)
-      @pygments_suffix = pygments_suffix if pygments_suffix
-      @pygments_suffix
+    def self.highlighter_suffix(highlighter_suffix = nil)
+      @highlighter_suffix = highlighter_suffix if highlighter_suffix
+      @highlighter_suffix
     end
 
     # Initialize the converter.
@@ -31,18 +31,18 @@ module Jekyll
       @config = config
     end
 
-    # Get the pygments prefix.
+    # Get the highlighter prefix.
     #
     # Returns the String prefix.
-    def pygments_prefix
-      self.class.pygments_prefix
+    def highlighter_prefix
+      self.class.highlighter_prefix
     end
 
-    # Get the pygments suffix.
+    # Get the highlighter suffix.
     #
     # Returns the String suffix.
-    def pygments_suffix
-      self.class.pygments_suffix
+    def highlighter_suffix
+      self.class.highlighter_suffix
     end
   end
 end
diff --git a/lib/jekyll/converters/markdown.rb b/lib/jekyll/converters/markdown.rb
index 485cac8..f68af67 100644
--- a/lib/jekyll/converters/markdown.rb
+++ b/lib/jekyll/converters/markdown.rb
@@ -3,25 +3,27 @@ module Jekyll
     class Markdown < Converter
       safe true
 
-      pygments_prefix "\n"
-      pygments_suffix "\n"
+      highlighter_prefix "\n"
+      highlighter_suffix "\n"
 
       def setup
         return if @setup
-        @parser = case @config['markdown']
-          when 'redcarpet'
-            RedcarpetParser.new @config
-          when 'kramdown'
-            KramdownParser.new @config
-          when 'rdiscount'
-            RDiscountParser.new @config
-          when 'maruku'
-            MarukuParser.new @config
+        @parser =
+          case @config['markdown'].downcase
+            when 'redcarpet' then RedcarpetParser.new(@config)
+            when 'kramdown' then KramdownParser.new(@config)
+            when 'rdiscount' then RDiscountParser.new(@config)
+            when 'maruku' then MarukuParser.new(@config)
           else
-            STDERR.puts "Invalid Markdown processor: #{@config['markdown']}"
-            STDERR.puts "  Valid options are [ maruku | rdiscount | kramdown | redcarpet ]"
-            raise FatalException.new("Invalid Markdown process: #{@config['markdown']}")
-        end
+            # So they can't try some tricky bullshit or go down the ancestor chain, I hope.
+            if allowed_custom_class?(@config['markdown'])
+              self.class.const_get(@config['markdown']).new(@config)
+            else
+              Jekyll.logger.error "Invalid Markdown Processor:", "#{@config['markdown']}"
+              Jekyll.logger.error "", "Valid options are [ maruku | rdiscount | kramdown | redcarpet ]"
+              raise FatalException, "Invalid Markdown Processor: #{@config['markdown']}"
+            end
+          end
         @setup = true
       end
 
@@ -38,6 +40,19 @@ module Jekyll
         setup
         @parser.convert(content)
       end
+
+      private
+
+      # Private: Determine whether a class name is an allowed custom markdown
+      # class name
+      #
+      # parser_name - the name of the parser class
+      #
+      # Returns true if the parser name contains only alphanumeric characters
+      # and is defined within Jekyll::Converters::Markdown
+      def allowed_custom_class?(parser_name)
+        parser_name !~ /[^A-Za-z0-9]/ && self.class.constants.include?(parser_name.to_sym)
+      end
     end
   end
 end
diff --git a/lib/jekyll/converters/markdown/kramdown_parser.rb b/lib/jekyll/converters/markdown/kramdown_parser.rb
index caeb5b6..cd1fdf9 100644
--- a/lib/jekyll/converters/markdown/kramdown_parser.rb
+++ b/lib/jekyll/converters/markdown/kramdown_parser.rb
@@ -20,7 +20,7 @@ module Jekyll
             end
           end
 
-          Kramdown::Document.new(content, @config["kramdown"].symbolize_keys).to_html
+          Kramdown::Document.new(content, Utils.symbolize_hash_keys(@config["kramdown"])).to_html
         end
 
       end
diff --git a/lib/jekyll/converters/markdown/maruku_parser.rb b/lib/jekyll/converters/markdown/maruku_parser.rb
index 1e27e47..7d14c8a 100644
--- a/lib/jekyll/converters/markdown/maruku_parser.rb
+++ b/lib/jekyll/converters/markdown/maruku_parser.rb
@@ -8,7 +8,10 @@ module Jekyll
           @errors = []
           load_divs_library if @config['maruku']['use_divs']
           load_blahtext_library if @config['maruku']['use_tex']
-          enable_fenced_code_blocks if @config['maruku']['fenced_code_blocks']
+
+          # allow fenced code blocks (new in Maruku 0.7.0)
+          MaRuKu::Globals[:fenced_code_blocks] = !!@config['maruku']['fenced_code_blocks']
+
         rescue LoadError
           STDERR.puts 'You are missing a library required for Markdown. Please run:'
           STDERR.puts '  $ [sudo] gem install maruku'
@@ -36,10 +39,6 @@ module Jekyll
           MaRuKu::Globals[:html_png_url] = @config['maruku']['png_url']
         end
 
-        def enable_fenced_code_blocks
-          MaRuKu::Globals[:fenced_code_blocks] = true
-        end
-
         def print_errors_and_fail
           print @errors.join
           raise MaRuKu::Exception, "MaRuKu encountered problem(s) while converting your markup."
diff --git a/lib/jekyll/converters/markdown/redcarpet_parser.rb b/lib/jekyll/converters/markdown/redcarpet_parser.rb
index 9af8057..df18327 100644
--- a/lib/jekyll/converters/markdown/redcarpet_parser.rb
+++ b/lib/jekyll/converters/markdown/redcarpet_parser.rb
@@ -5,7 +5,8 @@ module Jekyll
 
         module CommonMethods
           def add_code_tags(code, lang)
-            code = code.sub(/<pre>/, "<pre><code class=\"#{lang} language-#{lang}\" data-lang=\"#{lang}\">")
+            code = code.to_s
+            code = code.sub(/<pre>/, "<pre><code class=\"language-#{lang}\" data-lang=\"#{lang}\">")
             code = code.sub(/<\/pre>/,"</code></pre>")
           end
         end
@@ -15,14 +16,14 @@ module Jekyll
           def block_code(code, lang)
             require 'pygments'
             lang = lang && lang.split.first || "text"
-            output = add_code_tags(
+            add_code_tags(
               Pygments.highlight(code, :lexer => lang, :options => { :encoding => 'utf-8' }),
               lang
             )
           end
         end
 
-        module WithoutPygments
+        module WithoutHighlighting
           require 'cgi'
 
           include CommonMethods
@@ -33,23 +34,53 @@ module Jekyll
 
           def block_code(code, lang)
             lang = lang && lang.split.first || "text"
-            output = add_code_tags(code_wrap(code), lang)
+            add_code_tags(code_wrap(code), lang)
           end
         end
 
+        module WithRouge
+          def block_code(code, lang)
+            code = "<pre>#{super}</pre>"
+
+            output = "<div class=\"highlight\">"
+            output << add_code_tags(code, lang)
+            output << "</div>"
+          end
+
+          protected
+          def rouge_formatter(opts = {})
+            Rouge::Formatters::HTML.new(opts.merge(wrap: false))
+          end
+        end
+
+
         def initialize(config)
           require 'redcarpet'
           @config = config
           @redcarpet_extensions = {}
           @config['redcarpet']['extensions'].each { |e| @redcarpet_extensions[e.to_sym] = true }
 
-          @renderer ||= if @config['pygments']
+          @renderer ||= case @config['highlighter']
+                        when 'pygments'
                           Class.new(Redcarpet::Render::HTML) do
                             include WithPygments
                           end
+                        when 'rouge'
+                          Class.new(Redcarpet::Render::HTML) do
+                            require 'rouge'
+                            require 'rouge/plugins/redcarpet'
+
+                            if Rouge.version < '1.3.0'
+                              abort "Please install Rouge 1.3.0 or greater and try running Jekyll again."
+                            end
+
+                            include Rouge::Plugins::Redcarpet
+                            include CommonMethods
+                            include WithRouge
+                          end
                         else
                           Class.new(Redcarpet::Render::HTML) do
-                            include WithoutPygments
+                            include WithoutHighlighting
                           end
                         end
         rescue LoadError
diff --git a/lib/jekyll/converters/textile.rb b/lib/jekyll/converters/textile.rb
index 54e9374..d05b216 100644
--- a/lib/jekyll/converters/textile.rb
+++ b/lib/jekyll/converters/textile.rb
@@ -3,8 +3,8 @@ module Jekyll
     class Textile < Converter
       safe true
 
-      pygments_prefix '<notextile>'
-      pygments_suffix '</notextile>'
+      highlighter_prefix '<notextile>'
+      highlighter_suffix '</notextile>'
 
       def setup
         return if @setup
diff --git a/lib/jekyll/convertible.rb b/lib/jekyll/convertible.rb
index 723b0da..9d00d70 100644
--- a/lib/jekyll/convertible.rb
+++ b/lib/jekyll/convertible.rb
@@ -13,17 +13,25 @@ require 'set'
 #   self.ext=
 #   self.output=
 #   self.name
+#   self.path
+#   self.type -> :page, :post or :draft
+
 module Jekyll
   module Convertible
     # Returns the contents as a String.
     def to_s
-      self.content || ''
+      content || ''
+    end
+
+    # Whether the file is published or not, as indicated in YAML front-matter
+    def published?
+      !(data.has_key?('published') && data['published'] == false)
     end
 
-    # Returns merged optin hash for File.read of self.site (if exists)
+    # Returns merged option hash for File.read of self.site (if exists)
     # and a given param
     def merged_file_read_opts(opts)
-      (self.site ? self.site.file_read_opts : {}).merge(opts)
+      (site ? site.file_read_opts : {}).merge(opts)
     end
 
     # Read the YAML frontmatter.
@@ -35,16 +43,16 @@ module Jekyll
     # Returns nothing.
     def read_yaml(base, name, opts = {})
       begin
-        self.content = File.read_with_options(File.join(base, name),
-                                              merged_file_read_opts(opts))
-        if self.content =~ /\A(---\s*\n.*?\n?)^(---\s*$\n?)/m
+        self.content = File.read(File.join(base, name),
+                                 merged_file_read_opts(opts))
+        if content =~ /\A(---\s*\n.*?\n?)^((---|\.\.\.)\s*$\n?)/m
           self.content = $POSTMATCH
-          self.data = YAML.safe_load($1)
+          self.data = SafeYAML.load($1)
         end
       rescue SyntaxError => e
-        puts "YAML Exception reading #{File.join(base, name)}: #{e.message}"
+        Jekyll.logger.warn "YAML Exception reading #{File.join(base, name)}: #{e.message}"
       rescue Exception => e
-        puts "Error reading file #{File.join(base, name)}: #{e.message}"
+        Jekyll.logger.warn "Error reading file #{File.join(base, name)}: #{e.message}"
       end
 
       self.data ||= {}
@@ -54,10 +62,10 @@ module Jekyll
     #
     # Returns nothing.
     def transform
-      self.content = converter.convert(self.content)
+      self.content = converter.convert(content)
     rescue => e
       Jekyll.logger.error "Conversion error:", "There was an error converting" +
-        " '#{self.path}'."
+        " '#{path}'."
       raise e
     end
 
@@ -66,7 +74,7 @@ module Jekyll
     # Returns the String extension for the output file.
     #   e.g. ".html" for an HTML output file.
     def output_ext
-      converter.output_ext(self.ext)
+      converter.output_ext(ext)
     end
 
     # Determine which converter to use based on this convertible's
@@ -74,7 +82,7 @@ module Jekyll
     #
     # Returns the Converter instance.
     def converter
-      @converter ||= self.site.converters.find { |c| c.matches(self.ext) }
+      @converter ||= site.converters.find { |c| c.matches(ext) }
     end
 
     # Render Liquid in the content
@@ -101,7 +109,19 @@ module Jekyll
       further_data = Hash[(attrs || self.class::ATTRIBUTES_FOR_LIQUID).map { |attribute|
         [attribute, send(attribute)]
       }]
-      data.deep_merge(further_data)
+
+      defaults = site.frontmatter_defaults.all(relative_path, type)
+      Utils.deep_merge_hashes defaults, Utils.deep_merge_hashes(data, further_data)
+    end
+
+    def type
+      if is_a?(Post)
+        :post
+      elsif is_a?(Page)
+        :page
+      elsif is_a?(Draft)
+        :draft
+      end
     end
 
     # Recursively render layouts
@@ -113,16 +133,16 @@ module Jekyll
     # Returns nothing
     def render_all_layouts(layouts, payload, info)
       # recursively render layouts
-      layout = layouts[self.data["layout"]]
+      layout = layouts[data["layout"]]
       used = Set.new([layout])
 
       while layout
-        payload = payload.deep_merge({"content" => self.output, "page" => layout.data})
+        payload = Utils.deep_merge_hashes(payload, {"content" => output, "page" => layout.data})
 
-        self.output = self.render_liquid(layout.content,
+        self.output = render_liquid(layout.content,
                                          payload,
                                          info,
-                                         File.join(self.site.config['layouts'], layout.name))
+                                         File.join(site.config['layouts'], layout.name))
 
         if layout = layouts[layout.data["layout"]]
           if used.include?(layout)
@@ -141,21 +161,19 @@ module Jekyll
     #
     # Returns nothing.
     def do_layout(payload, layouts)
-      info = { :filters => [Jekyll::Filters], :registers => { :site => self.site, :page => payload['page'] } }
+      info = { :filters => [Jekyll::Filters], :registers => { :site => site, :page => payload['page'] } }
 
       # render and transform content (this becomes the final content of the object)
-      payload["pygments_prefix"] = converter.pygments_prefix
-      payload["pygments_suffix"] = converter.pygments_suffix
+      payload["highlighter_prefix"] = converter.highlighter_prefix
+      payload["highlighter_suffix"] = converter.highlighter_suffix
 
-      self.content = self.render_liquid(self.content,
-                                        payload,
-                                        info)
-      self.transform
+      self.content = render_liquid(content, payload, info)
+      transform
 
       # output keeps track of what will finally be written
-      self.output = self.content
+      self.output = content
 
-      self.render_all_layouts(layouts, payload, info)
+      render_all_layouts(layouts, payload, info)
     end
 
     # Write the generated page file to the destination directory.
@@ -167,7 +185,20 @@ module Jekyll
       path = destination(dest)
       FileUtils.mkdir_p(File.dirname(path))
       File.open(path, 'wb') do |f|
-        f.write(self.output)
+        f.write(output)
+      end
+    end
+
+    # Accessor for data properties by Liquid.
+    #
+    # property - The String name of the property to retrieve.
+    #
+    # Returns the String value or nil if the property isn't included.
+    def [](property)
+      if self.class::ATTRIBUTES_FOR_LIQUID.include?(property)
+        send(property)
+      else
+        data[property]
       end
     end
   end
diff --git a/lib/jekyll/core_ext.rb b/lib/jekyll/core_ext.rb
deleted file mode 100644
index f3fa31b..0000000
--- a/lib/jekyll/core_ext.rb
+++ /dev/null
@@ -1,90 +0,0 @@
-class Hash
-  # Merges self with another hash, recursively.
-  #
-  # This code was lovingly stolen from some random gem:
-  # http://gemjack.com/gems/tartan-0.1.1/classes/Hash.html
-  #
-  # Thanks to whoever made it.
-  def deep_merge(hash)
-    target = dup
-
-    hash.keys.each do |key|
-      if hash[key].is_a? Hash and self[key].is_a? Hash
-        target[key] = target[key].deep_merge(hash[key])
-        next
-      end
-
-      target[key] = hash[key]
-    end
-
-    target
-  end
-
-  # Read array from the supplied hash favouring the singular key
-  # and then the plural key, and handling any nil entries.
-  #   +hash+ the hash to read from
-  #   +singular_key+ the singular key
-  #   +plural_key+ the plural key
-  #
-  # Returns an array
-  def pluralized_array(singular_key, plural_key)
-    hash = self
-    if hash.has_key?(singular_key)
-      array = [hash[singular_key]] if hash[singular_key]
-    elsif hash.has_key?(plural_key)
-      case hash[plural_key]
-      when String
-        array = hash[plural_key].split
-      when Array
-        array = hash[plural_key].compact
-      end
-    end
-    array || []
-  end
-
-  def symbolize_keys!
-    keys.each do |key|
-      self[(key.to_sym rescue key) || key] = delete(key)
-    end
-    self
-  end
-
-  def symbolize_keys
-    dup.symbolize_keys!
-  end
-end
-
-# Thanks, ActiveSupport!
-class Date
-  # Converts datetime to an appropriate format for use in XML
-  def xmlschema
-    strftime("%Y-%m-%dT%H:%M:%S%Z")
-  end if RUBY_VERSION < '1.9'
-end
-
-module Enumerable
-  # Returns true if path matches against any glob pattern.
-  # Look for more detail about glob pattern in method File::fnmatch.
-  def glob_include?(e)
-    any? { |exp| File.fnmatch?(exp, e) }
-  end
-end
-
-# Ruby 1.8's File.read don't support option.
-# read_with_options ignore optional parameter for 1.8,
-# and act as alias for 1.9 or later.
-class File
-  if RUBY_VERSION < '1.9'
-    def self.read_with_options(path, opts = {})
-      self.read(path)
-    end
-
-    def self.realpath(filename)
-      Pathname.new(filename).realpath.to_s
-    end
-  else
-    def self.read_with_options(path, opts = {})
-      self.read(path, opts)
-    end
-  end
-end
diff --git a/lib/jekyll/deprecator.rb b/lib/jekyll/deprecator.rb
index 23af739..7600cd2 100644
--- a/lib/jekyll/deprecator.rb
+++ b/lib/jekyll/deprecator.rb
@@ -9,8 +9,8 @@ module Jekyll
       arg_is_present? args, "--auto", "The switch '--auto' has been replaced with '--watch'."
       arg_is_present? args, "--no-auto", "To disable auto-replication, simply leave off \
                           the '--watch' switch."
-      arg_is_present? args, "--pygments", "The 'pygments' setting can only be set in \
-                          your config files."
+      arg_is_present? args, "--pygments", "The 'pygments'settings has been removed in \
+                          favour of 'highlighter'."
       arg_is_present? args, "--paginate", "The 'paginate' setting can only be set in your \
                           config files."
       arg_is_present? args, "--url", "The 'url' setting can only be set in your config files."
diff --git a/lib/jekyll/document.rb b/lib/jekyll/document.rb
new file mode 100644
index 0000000..be4ead2
--- /dev/null
+++ b/lib/jekyll/document.rb
@@ -0,0 +1,242 @@
+module Jekyll
+  class Document
+    include Comparable
+
+    attr_reader   :path, :site
+    attr_accessor :content, :collection, :output
+
+    # Create a new Document.
+    #
+    # site - the Jekyll::Site instance to which this Document belongs
+    # path - the path to the file
+    #
+    # Returns nothing.
+    def initialize(path, relations)
+      @site = relations[:site]
+      @path = path
+      @collection = relations[:collection]
+    end
+
+    # Fetch the Document's data.
+    #
+    # Returns a Hash containing the data. An empty hash is returned if
+    #   no data was read.
+    def data
+      @data ||= Hash.new
+    end
+
+    # The path to the document, relative to the site source.
+    #
+    # Returns a String path which represents the relative path
+    #   from the site source to this document
+    def relative_path
+      Pathname.new(path).relative_path_from(Pathname.new(site.source)).to_s
+    end
+
+    # The base filename of the document.
+    #
+    # suffix - (optional) the suffix to be removed from the end of the filename
+    #
+    # Returns the base filename of the document.
+    def basename(suffix = "")
+      File.basename(path, suffix)
+    end
+
+    # The extension name of the document.
+    #
+    # Returns the extension name of the document.
+    def extname
+      File.extname(path)
+    end
+
+    # Produces a "cleaned" relative path.
+    # The "cleaned" relative path is the relative path without the extname
+    #   and with the collection's directory removed as well.
+    # This method is useful when building the URL of the document.
+    #
+    # Examples:
+    #   When relative_path is "_methods/site/generate.md":
+    #     cleaned_relative_path
+    #     # => "/site/generate"
+    #
+    # Returns the cleaned relative path of the document.
+    def cleaned_relative_path
+      relative_path[0 .. -extname.length - 1].sub(collection.relative_directory, "")
+    end
+
+    # Determine whether the document is a YAML file.
+    #
+    # Returns true if the extname is either .yml or .yaml, false otherwise.
+    def yaml_file?
+      %w[.yaml .yml].include?(extname)
+    end
+
+    # Determine whether the document is an asset file.
+    # Asset files include CoffeeScript files and Sass/SCSS files.
+    #
+    # Returns true if the extname belongs to the set of extensions
+    #   that asset files use.
+    def asset_file?
+      %w[.sass .scss .coffee].include?(extname)
+    end
+
+    # Determine whether the file should be rendered with Liquid.
+    #
+    # Returns false if the document is either an asset file or a yaml file,
+    #   true otherwise.
+    def render_with_liquid?
+      !(asset_file? || yaml_file?)
+    end
+
+    # The URL template where the document would be accessible.
+    #
+    # Returns the URL template for the document.
+    def url_template
+      "/:collection/:path:output_ext"
+    end
+
+    # Construct a Hash of key-value pairs which contain a mapping between
+    #   a key in the URL template and the corresponding value for this document.
+    #
+    # Returns the Hash of key-value pairs for replacement in the URL.
+    def url_placeholders
+      {
+        collection: collection.label,
+        path:       cleaned_relative_path,
+        output_ext: Jekyll::Renderer.new(site, self).output_ext
+      }
+    end
+
+    # The permalink for this Document.
+    # Permalink is set via the data Hash.
+    #
+    # Returns the permalink or nil if no permalink was set in the data.
+    def permalink
+      data && data.is_a?(Hash) && data['permalink']
+    end
+
+    # The computed URL for the document. See `Jekyll::URL#to_s` for more details.
+    #
+    # Returns the computed URL for the document.
+    def url
+      @url ||= URL.new({
+        template:     url_template,
+        placeholders: url_placeholders,
+        permalink:    permalink
+      }).to_s
+    end
+
+    # The full path to the output file.
+    #
+    # base_directory - the base path of the output directory
+    #
+    # Returns the full path to the output file of this document.
+    def destination(base_directory)
+      path = Jekyll.sanitized_path(base_directory, url)
+      path = File.join(path, "index.html") if url =~ /\/$/
+      path
+    end
+
+    # Write the generated Document file to the destination directory.
+    #
+    # dest - The String path to the destination dir.
+    #
+    # Returns nothing.
+    def write(dest)
+      path = destination(dest)
+      FileUtils.mkdir_p(File.dirname(path))
+      File.open(path, 'wb') do |f|
+        f.write(output)
+      end
+    end
+
+    # Returns merged option hash for File.read of self.site (if exists)
+    # and a given param
+    #
+    # opts - override options
+    #
+    # Return the file read options hash.
+    def merged_file_read_opts(opts)
+      site ? site.file_read_opts.merge(opts) : opts
+    end
+
+    # Whether the file is published or not, as indicated in YAML front-matter
+    #
+    # Returns true if the 'published' key is specified in the YAML front-matter and not `false`.
+    def published?
+      !(data.has_key?('published') && data['published'] == false)
+    end
+
+    # Read in the file and assign the content and data based on the file contents.
+    #
+    # Returns nothing.
+    def read(opts = {})
+      if yaml_file?
+        @data = SafeYAML.load_file(path)
+      else
+        begin
+          @content = File.read(path, merged_file_read_opts(opts))
+          if content =~ /\A(---\s*\n.*?\n?)^(---\s*$\n?)/m
+            @content = $POSTMATCH
+            @data    = SafeYAML.load($1)
+          end
+        rescue SyntaxError => e
+          puts "YAML Exception reading #{path}: #{e.message}"
+        rescue Exception => e
+          puts "Error reading file #{path}: #{e.message}"
+        end
+      end
+    end
+
+    # Create a Liquid-understandable version of this Document.
+    #
+    # Returns a Hash representing this Document's data.
+    def to_liquid
+      if data.is_a?(Hash)
+        Utils.deep_merge_hashes data, {
+          "output"        => output,
+          "content"       => content,
+          "path"          => path,
+          "relative_path" => relative_path,
+          "url"           => url
+        }
+      else
+        data
+      end
+    end
+
+    # The inspect string for this document.
+    # Includes the relative path and the collection label.
+    #
+    # Returns the inspect string for this document.
+    def inspect
+      "#<Jekyll::Document #{relative_path} collection=#{collection.label}>"
+    end
+
+    # The string representation for this document.
+    #
+    # Returns the content of the document
+    def to_s
+      output || content
+    end
+
+    # Compare this document against another document.
+    # Comparison is a comparison between the 2 paths of the documents.
+    #
+    # Returns -1, 0, +1 or nil depending on whether this doc's path is less than,
+    #   equal or greater than the other doc's path. See String#<=> for more details.
+    def <=>(anotherDocument)
+      path <=> anotherDocument.path
+    end
+
+    # Determine whether this document should be written.
+    # Based on the Collection to which it belongs.
+    #
+    # True if the document has a collection and if that collection's #write?
+    #   method returns true, otherwise false.
+    def write?
+      collection && collection.write?
+    end
+
+  end
+end
diff --git a/lib/jekyll/draft.rb b/lib/jekyll/draft.rb
index 321a6e5..7b1d9ac 100644
--- a/lib/jekyll/draft.rb
+++ b/lib/jekyll/draft.rb
@@ -18,6 +18,11 @@ module Jekyll
       File.join(source, dir, '_drafts')
     end
 
+    # The path to the draft source file, relative to the site source
+    def relative_path
+      File.join(@dir, '_drafts', @name)
+    end
+
     # Extract information from the post filename.
     #
     # name - The String filename of the post file.
diff --git a/lib/jekyll/entry_filter.rb b/lib/jekyll/entry_filter.rb
index 56f3cfc..d2cd6f8 100644
--- a/lib/jekyll/entry_filter.rb
+++ b/lib/jekyll/entry_filter.rb
@@ -1,35 +1,72 @@
-class EntryFilter
-  attr_reader :site
-  def initialize(site)
-    @site = site
-  end
+module Jekyll
+  class EntryFilter
+    SPECIAL_LEADING_CHARACTERS = ['.', '_', '#'].freeze
+
+    attr_reader :site
+
+    def initialize(site, base_directory = nil)
+      @site = site
+      @base_directory = derive_base_directory(@site, base_directory.to_s.dup)
+    end
 
-  def filter(entries)
-    entries.reject do |e|
-      unless included?(e)
-        special?(e) || backup?(e) || excluded?(e) || symlink?(e)
+    def base_directory
+      @base_directory.to_s
+    end
+
+    def derive_base_directory(site, base_dir)
+      if base_dir.start_with?(site.source)
+        base_dir[site.source] = ""
       end
+      base_dir
     end
-  end
 
-  def included?(entry)
-    site.include.glob_include?(entry)
-  end
+    def relative_to_source(entry)
+      File.join(base_directory, entry)
+    end
 
-  def special?(entry)
-    ['.', '_', '#'].include?(entry[0..0])
-  end
+    def filter(entries)
+      entries.reject do |e|
+        unless included?(e)
+          special?(e) || backup?(e) || excluded?(e) || symlink?(e)
+        end
+      end
+    end
 
-  def backup?(entry)
-    entry[-1..-1] == '~'
-  end
+    def included?(entry)
+      glob_include?(site.include, entry)
+    end
 
-  def excluded?(entry)
-    site.exclude.glob_include?(entry)
-  end
+    def special?(entry)
+      SPECIAL_LEADING_CHARACTERS.include?(entry[0..0]) ||
+        SPECIAL_LEADING_CHARACTERS.include?(File.basename(entry)[0..0])
+    end
 
-  def symlink?(entry)
-    File.symlink?(entry) && site.safe
-  end
+    def backup?(entry)
+      entry[-1..-1] == '~'
+    end
 
+    def excluded?(entry)
+      excluded = glob_include?(site.exclude, relative_to_source(entry))
+      Jekyll.logger.debug "excluded?(#{relative_to_source(entry)}) ==> #{excluded}"
+      excluded
+    end
+
+    def symlink?(entry)
+      File.symlink?(entry) && site.safe
+    end
+
+    def ensure_leading_slash(path)
+      path[0..0] == "/" ? path : "/#{path}"
+    end
+
+    # Returns true if path matches against any glob pattern.
+    # Look for more detail about glob pattern in method File::fnmatch.
+    def glob_include?(enum, e)
+      entry = ensure_leading_slash(e)
+      enum.any? do |exp|
+        item = ensure_leading_slash(exp)
+        File.fnmatch?(item, entry) || entry.start_with?(item)
+      end
+    end
+  end
 end
diff --git a/lib/jekyll/excerpt.rb b/lib/jekyll/excerpt.rb
index a02272b..61327eb 100644
--- a/lib/jekyll/excerpt.rb
+++ b/lib/jekyll/excerpt.rb
@@ -1,10 +1,18 @@
+require 'jekyll/convertible'
+require 'forwardable'
+
 module Jekyll
   class Excerpt
     include Convertible
+    extend Forwardable
 
     attr_accessor :post
     attr_accessor :content, :output, :ext
 
+    def_delegator :@post, :site, :site
+    def_delegator :@post, :name, :name
+    def_delegator :@post, :ext,  :ext
+
     # Initialize this Post instance.
     #
     # site       - The Site.
@@ -17,12 +25,6 @@ module Jekyll
       self.content = extract_excerpt(post.content)
     end
 
-    %w[site name ext].each do |meth|
-      define_method(meth) do
-        post.send(meth)
-      end
-    end
-
     def to_liquid
       post.to_liquid(Post::EXCERPT_ATTRIBUTES_FOR_LIQUID)
     end
@@ -37,7 +39,7 @@ module Jekyll
     end
 
     # 'Path' of the excerpt.
-    # 
+    #
     # Returns the path for the post this excerpt belongs to with #excerpt appended
     def path
       File.join(post.path, "#excerpt")
@@ -45,9 +47,9 @@ module Jekyll
 
     # Check if excerpt includes a string
     #
-    # Returns true if the string passed in 
+    # Returns true if the string passed in
     def include?(something)
-      (self.output && self.output.include?(something)) || self.content.include?(something)
+      (output && output.include?(something)) || content.include?(something)
     end
 
     # The UID for this post (useful in feeds).
@@ -59,7 +61,7 @@ module Jekyll
     end
 
     def to_s
-      self.output || self.content
+      output || content
     end
 
     # Returns the shorthand String identifier of this Post.
diff --git a/lib/jekyll/filters.rb b/lib/jekyll/filters.rb
index 95ada0b..72d1286 100644
--- a/lib/jekyll/filters.rb
+++ b/lib/jekyll/filters.rb
@@ -83,7 +83,7 @@ module Jekyll
     #
     # Returns the escaped String.
     def xml_escape(input)
-      CGI.escapeHTML(input)
+      CGI.escapeHTML(input.to_s)
     end
 
     # CGI escape a string for use in a URL. Replaces any special characters
@@ -100,7 +100,7 @@ module Jekyll
     def cgi_escape(input)
       CGI::escape(input)
     end
-    
+
     # URI escape a string.
     #
     # input - The String to escape.
@@ -124,7 +124,7 @@ module Jekyll
       input.split.length
     end
 
-    # Join an array of things into a string by separating with commes and the
+    # Join an array of things into a string by separating with commas and the
     # word "and" for the last one.
     #
     # array - The Array of Strings to join.
@@ -158,17 +158,97 @@ module Jekyll
       input.to_json
     end
 
+    # Group an array of items by a property
+    #
+    # input - the inputted Enumerable
+    # property - the property
+    #
+    # Returns an array of Hashes, each looking something like this:
+    #  {"name"  => "larry"
+    #   "items" => [...] } # all the items where `property` == "larry"
+    def group_by(input, property)
+      if groupable?(input)
+        input.group_by do |item|
+          item_property(item, property).to_s
+        end.inject([]) do |memo, i|
+          memo << {"name" => i.first, "items" => i.last}
+        end
+      else
+        input
+      end
+    end
+
+    # Filter an array of objects
+    #
+    # input - the object array
+    # key - key within each object to filter by
+    # value - desired value
+    #
+    # Returns the filtered array of objects
+    def where(input, property, value)
+      return input unless input.is_a?(Array)
+      input.select { |object| item_property(object, property) == value }
+    end
+
+    # Sort an array of objects
+    #
+    # input - the object array
+    # key - key within each object to filter by
+    # nils ('first' | 'last') - nils appear before or after non-nil values
+    #
+    # Returns the filtered array of objects
+    def sort(input, key = nil, nils = "first")
+      if key.nil?
+        input.sort
+      else
+        case
+        when nils == "first"
+          order = - 1
+        when nils == "last"
+          order = + 1
+        else
+          Jekyll.logger.error "Invalid nils order:",
+            "'#{nils}' is not a valid nils order. It must be 'first' or 'last'."
+          exit(1)
+        end
+
+        input.sort { |a, b|
+          if !a[key].nil? && b[key].nil?
+            - order
+          elsif a[key].nil? && !b[key].nil?
+            + order
+          else
+            a[key] <=> b[key]
+          end
+        }
+      end
+    end
+
     private
     def time(input)
       case input
       when Time
         input
       when String
-        Time.parse(input)
+        Time.parse(input) rescue Time.at(input.to_i)
+      when Number
+        Time.at(input)
       else
         Jekyll.logger.error "Invalid Date:", "'#{input}' is not a valid datetime."
         exit(1)
       end
     end
+
+    def groupable?(element)
+      element.respond_to?(:group_by)
+    end
+
+    def item_property(item, property)
+      if item.respond_to?(:data)
+        item.data[property.to_s]
+      else
+        item[property.to_s]
+      end
+    end
   end
 end
diff --git a/lib/jekyll/frontmatter_defaults.rb b/lib/jekyll/frontmatter_defaults.rb
new file mode 100644
index 0000000..2c5755b
--- /dev/null
+++ b/lib/jekyll/frontmatter_defaults.rb
@@ -0,0 +1,148 @@
+module Jekyll
+  class Configuration
+    # This class handles custom defaults for YAML frontmatter settings.
+    # These are set in _config.yml and apply both to internal use (e.g. layout)
+    # and the data available to liquid.
+    #
+    # It is exposed via the frontmatter_defaults method on the site class.
+    class FrontmatterDefaults
+      # Initializes a new instance.
+      def initialize(site)
+        @site = site
+      end
+
+      # Finds a default value for a given setting, filtered by path and type
+      #
+      # path - the path (relative to the source) of the page, post or :draft the default is used in
+      # type - a symbol indicating whether a :page, a :post or a :draft calls this method
+      #
+      # Returns the default value or nil if none was found
+      def find(path, type, setting)
+        value = nil
+        old_scope = nil
+
+        matching_sets(path, type).each do |set|
+          if set['values'].has_key?(setting) && has_precedence?(old_scope, set['scope'])
+            value = set['values'][setting]
+            old_scope = set['scope']
+          end
+        end
+        value
+      end
+
+      # Collects a hash with all default values for a page or post
+      #
+      # path - the relative path of the page or post
+      # type - a symbol indicating the type (:post, :page or :draft)
+      #
+      # Returns a hash with all default values (an empty hash if there are none)
+      def all(path, type)
+        defaults = {}
+        old_scope = nil
+        matching_sets(path, type).each do |set|
+          if has_precedence?(old_scope, set['scope'])
+            defaults.merge! set['values']
+            old_scope = set['scope']
+          else
+            defaults = set['values'].merge(defaults)
+          end
+        end
+        defaults
+      end
+
+      private
+
+      # Checks if a given default setting scope matches the given path and type
+      #
+      # scope - the hash indicating the scope, as defined in _config.yml
+      # path - the path to check for
+      # type - the type (:post, :page or :draft) to check for
+      #
+      # Returns true if the scope applies to the given path and type
+      def applies?(scope, path, type)
+        applies_path?(scope, path) && applies_type?(scope, type)
+      end
+
+      def applies_path?(scope, path)
+        return true if scope['path'].empty?
+
+        scope_path = Pathname.new(scope['path'])
+        Pathname.new(sanitize_path(path)).ascend do |path|
+          if path == scope_path
+            return true
+          end
+        end
+      end
+
+      def applies_type?(scope, type)
+        !scope.has_key?('type') || scope['type'] == type.to_s
+      end
+
+      # Checks if a given set of default values is valid
+      #
+      # set - the default value hash, as defined in _config.yml
+      #
+      # Returns true if the set is valid and can be used in this class
+      def valid?(set)
+        set.is_a?(Hash) && set['scope'].is_a?(Hash) && set['scope']['path'].is_a?(String) && set['values'].is_a?(Hash)
+      end
+
+      # Determines if a new scope has precedence over an old one
+      #
+      # old_scope - the old scope hash, or nil if there's none
+      # new_scope - the new scope hash
+      #
+      # Returns true if the new scope has precedence over the older
+      def has_precedence?(old_scope, new_scope)
+        return true if old_scope.nil?
+
+        new_path = sanitize_path(new_scope['path'])
+        old_path = sanitize_path(old_scope['path'])
+
+        if new_path.length != old_path.length
+          new_path.length >= old_path.length
+        elsif new_scope.has_key? 'type'
+          true
+        else
+          !old_scope.has_key? 'type'
+        end
+      end
+
+      # Collects a list of sets that match the given path and type
+      #
+      # Returns an array of hashes
+      def matching_sets(path, type)
+        valid_sets.select do |set|
+          applies?(set['scope'], path, type)
+        end
+      end
+
+      # Returns a list of valid sets
+      #
+      # This is not cached to allow plugins to modify the configuration
+      # and have their changes take effect
+      #
+      # Returns an array of hashes
+      def valid_sets
+        sets = @site.config['defaults']
+        return [] unless sets.is_a?(Array)
+
+        sets.select do |set|
+          unless valid?(set)
+            Jekyll.logger.warn "Default:", "An invalid default set was found"
+          end
+          valid?(set)
+        end
+      end
+
+      # Sanitizes the given path by removing a leading and addding a trailing slash
+      def sanitize_path(path)
+        if path.nil? || path.empty?
+          ""
+        else
+          path.gsub(/\A\//, '').gsub(/([^\/])\z/, '\1/')
+        end
+      end
+    end
+  end
+end
\ No newline at end of file
diff --git a/lib/jekyll/layout.rb b/lib/jekyll/layout.rb
index f75a478..4dde59b 100644
--- a/lib/jekyll/layout.rb
+++ b/lib/jekyll/layout.rb
@@ -29,8 +29,8 @@ module Jekyll
 
       self.data = {}
 
-      self.process(name)
-      self.read_yaml(base, name)
+      process(name)
+      read_yaml(base, name)
     end
 
     # Extract information from the layout filename.
diff --git a/lib/jekyll/layout_reader.rb b/lib/jekyll/layout_reader.rb
new file mode 100644
index 0000000..a9172c0
--- /dev/null
+++ b/lib/jekyll/layout_reader.rb
@@ -0,0 +1,53 @@
+module Jekyll
+  class LayoutReader
+    attr_reader :site
+    def initialize(site)
+      @site = site
+      @layouts = {}
+    end
+
+    def read
+      layout_entries.each do |f|
+        @layouts[layout_name(f)] = Layout.new(site, layout_directory, f)
+      end
+
+      @layouts
+    end
+
+    def layout_directory
+      @layout_directory ||= (layout_directory_in_cwd || layout_directory_inside_source)
+    end
+
+    private
+
+    def layout_entries
+      entries = []
+      within(layout_directory) do
+        entries = EntryFilter.new(site).filter(Dir['**/*.*'])
+      end
+      entries
+    end
+
+    def layout_name(file)
+      file.split(".")[0..-2].join(".")
+    end
+
+    def within(directory)
+      return unless File.exist?(directory)
+      Dir.chdir(directory) { yield }
+    end
+
+    def layout_directory_inside_source
+      Jekyll.sanitized_path(site.source, site.config['layouts'])
+    end
+
+    def layout_directory_in_cwd
+      dir = Jekyll.sanitized_path(Dir.pwd, site.config['layouts'])
+      if File.directory?(dir)
+        dir
+      else
+        nil
+      end
+    end
+  end
+end
diff --git a/lib/jekyll/liquid_extensions.rb b/lib/jekyll/liquid_extensions.rb
new file mode 100644
index 0000000..5ba7dd8
--- /dev/null
+++ b/lib/jekyll/liquid_extensions.rb
@@ -0,0 +1,22 @@
+module Jekyll
+  module LiquidExtensions
+
+    # Lookup a Liquid variable in the given context.
+    #
+    # context  - the Liquid context in question.
+    # variable - the variable name, as a string.
+    #
+    # Returns the value of the variable in the context
+    #   or the variable name if not found.
+    def lookup_variable(context, variable)
+      lookup = context
+
+      variable.split(".").each do |value|
+        lookup = lookup[value]
+      end
+
+      lookup || variable
+    end
+
+  end
+end
diff --git a/lib/jekyll/mime.types b/lib/jekyll/mime.types
index b926a00..ee7aa44 100644
--- a/lib/jekyll/mime.types
+++ b/lib/jekyll/mime.types
@@ -1,12 +1,13 @@
-# These are the same MIME types that GitHub Pages uses as of 17 Mar 2013.
+-# These are the same MIME types that GitHub Pages uses as of 26 January 2014
 
 text/html                             html htm shtml
 text/css                              css
-text/xml                              xml rss xsl
+text/xml                              xml rss xsl xsd
 image/gif                             gif
 image/jpeg                            jpeg jpg
 application/x-javascript              js
 application/atom+xml                  atom
+application/json                      json geojson topojson
 
 text/mathml                           mml
 text/plain                            txt
@@ -17,16 +18,22 @@ text/cache-manifest                   manifest appcache
 text/coffeescript                     coffee
 text/plain                            pde
 text/plain                            md markdown
+text/vcard                            vcf vcard
 
 image/png                             png
 image/svg+xml                         svg
+image/svg+xml                         svgz
 image/tiff                            tif tiff
 image/vnd.wap.wbmp                    wbmp
 image/x-icon                          ico
 image/x-jng                           jng
 image/x-ms-bmp                        bmp
 
-application/json                      json
+application/vnd.ms-fontobject         eot
+application/x-font-ttf                ttf
+application/x-font-woff               woff
+font/opentype                         otf
+
 application/java-archive              jar ear
 application/mac-binhex40              hqx
 application/msword                    doc
@@ -34,18 +41,19 @@ application/pdf                       pdf
 application/postscript                ps eps ai
 application/rdf+xml                   rdf
 application/rtf                       rtf
-text/vcard                            vcf vcard
 application/vnd.apple.pkpass          pkpass
 application/vnd.ms-excel              xls
 application/vnd.ms-powerpoint         ppt
 application/vnd.wap.wmlc              wmlc
 application/xhtml+xml                 xhtml
-application/x-chrome-extension        crx
 application/x-cocoa                   cco
-application/x-font-ttf                ttf
+application/x-chrome-extension        crx
 application/x-java-archive-diff       jardiff
 application/x-java-jnlp-file          jnlp
 application/x-makeself                run
+application/x-ms-application          application
+application/x-ms-manifest             manifest
+application/x-ms-vsto                 vsto
 application/x-ns-proxy-autoconfig     pac
 application/x-perl                    pl pm
 application/x-pilot                   prc pdb
@@ -63,8 +71,8 @@ application/zip                       zip
 
 application/octet-stream              bin exe dll
 application/octet-stream              deb
+application/octet-stream              deploy
 application/octet-stream              dmg
-application/octet-stream              eot
 application/octet-stream              iso img
 application/octet-stream              msi msp msm
 
@@ -74,12 +82,14 @@ audio/x-realaudio                     ra
 audio/ogg                             ogg
 
 video/3gpp                            3gpp 3gp
+video/m4v                             m4v
+video/mp4                             mp4
 video/mpeg                            mpeg mpg
+video/ogg                             ogg ogv
 video/quicktime                       mov
+video/webm                            webm
 video/x-flv                           flv
 video/x-mng                           mng
 video/x-ms-asf                        asx asf
 video/x-ms-wmv                        wmv
 video/x-msvideo                       avi
-video/ogg                             ogv
-video/webm                            webm
diff --git a/lib/jekyll/page.rb b/lib/jekyll/page.rb
index 4889678..d045b7c 100644
--- a/lib/jekyll/page.rb
+++ b/lib/jekyll/page.rb
@@ -9,9 +9,11 @@ module Jekyll
 
     # Attributes for Liquid templates
     ATTRIBUTES_FOR_LIQUID = %w[
-      url
       content
+      dir
+      name
       path
+      url
     ]
 
     # Initialize a new Page.
@@ -26,8 +28,13 @@ module Jekyll
       @dir  = dir
       @name = name
 
-      self.process(name)
-      self.read_yaml(File.join(base, dir), name)
+
+      process(name)
+      read_yaml(File.join(base, dir), name)
+
+      data.default_proc = proc do |hash, key|
+        site.frontmatter_defaults.find(File.join(dir, name), type, key)
+      end
     end
 
     # The generated directory into which the page will be placed
@@ -44,11 +51,11 @@ module Jekyll
     #
     # Returns the String permalink or nil if none has been set.
     def permalink
-      return nil if self.data.nil? || self.data['permalink'].nil?
+      return nil if data.nil? || data['permalink'].nil?
       if site.config['relative_permalinks']
-        File.join(@dir, self.data['permalink'])
+        File.join(@dir, data['permalink'])
       else
-        self.data['permalink']
+        data['permalink']
       end
     end
 
@@ -56,7 +63,7 @@ module Jekyll
     #
     # Returns the template String.
     def template
-      if self.site.permalink_style == :pretty
+      if site.permalink_style == :pretty
         if index? && html?
           "/:path/"
         elsif html?
@@ -85,8 +92,8 @@ module Jekyll
     def url_placeholders
       {
         :path       => @dir,
-        :basename   => self.basename,
-        :output_ext => self.output_ext
+        :basename   => basename,
+        :output_ext => output_ext
       }
     end
 
@@ -97,7 +104,7 @@ module Jekyll
     # Returns nothing.
     def process(name)
       self.ext = File.extname(name)
-      self.basename = name[0 .. -self.ext.length-1]
+      self.basename = name[0 .. -ext.length - 1]
     end
 
     # Add any necessary layouts to this post
@@ -107,10 +114,10 @@ module Jekyll
     #
     # Returns nothing.
     def render(layouts, site_payload)
-      payload = {
-        "page" => self.to_liquid,
+      payload = Utils.deep_merge_hashes({
+        "page" => to_liquid,
         'paginator' => pager.to_liquid
-      }.deep_merge(site_payload)
+      }, site_payload)
 
       do_layout(payload, layouts)
     end
@@ -119,12 +126,12 @@ module Jekyll
     #
     # Returns the path to the source file
     def path
-      self.data.fetch('path', self.relative_path.sub(/\A\//, ''))
+      data.fetch('path', relative_path.sub(/\A\//, ''))
     end
 
     # The path to the page source file, relative to the site source
     def relative_path
-      File.join(@dir, @name)
+      File.join(*[@dir, @name].map(&:to_s).reject(&:empty?))
     end
 
     # Obtain destination path.
@@ -133,14 +140,14 @@ module Jekyll
     #
     # Returns the destination file path String.
     def destination(dest)
-      path = Jekyll.sanitized_path(dest, url)
+      path = Jekyll.sanitized_path(dest, URL.unescape_path(url))
       path = File.join(path, "index.html") if url =~ /\/$/
       path
     end
 
     # Returns the object as a debug String.
     def inspect
-      "#<Jekyll:Page @name=#{self.name.inspect}>"
+      "#<Jekyll:Page @name=#{name.inspect}>"
     end
 
     # Returns the Boolean of whether this Page is HTML or not.
@@ -154,7 +161,7 @@ module Jekyll
     end
 
     def uses_relative_permalinks
-      permalink && @dir != "" && site.config['relative_permalinks']
+      permalink && !@dir.empty? && site.config['relative_permalinks']
     end
   end
 end
diff --git a/lib/jekyll/plugin.rb b/lib/jekyll/plugin.rb
index 2613f70..94c0b28 100644
--- a/lib/jekyll/plugin.rb
+++ b/lib/jekyll/plugin.rb
@@ -6,22 +6,15 @@ module Jekyll
                    :high => 10,
                    :highest => 100 }
 
-    # Install a hook so that subclasses are recorded. This method is only
-    # ever called by Ruby itself.
+    # Fetch all the subclasses of this class and its subclasses' subclasses.
     #
-    # base - The Class subclass.
-    #
-    # Returns nothing.
-    def self.inherited(base)
-      subclasses << base
-      subclasses.sort!
-    end
-
-    # The list of Classes that have been subclassed.
-    #
-    # Returns an Array of Class objects.
-    def self.subclasses
-      @subclasses ||= []
+    # Returns an array of descendant classes.
+    def self.descendants
+      descendants = []
+      ObjectSpace.each_object(singleton_class) do |k|
+        descendants.unshift k unless k == self
+      end
+      descendants
     end
 
     # Get or set the priority of this plugin. When called without an
diff --git a/lib/jekyll/plugin_manager.rb b/lib/jekyll/plugin_manager.rb
new file mode 100644
index 0000000..7b817e3
--- /dev/null
+++ b/lib/jekyll/plugin_manager.rb
@@ -0,0 +1,76 @@
+module Jekyll
+  class PluginManager
+    attr_reader :site
+
+    # Create an instance of this class.
+    #
+    # site - the instance of Jekyll::Site we're concerned with
+    #
+    # Returns nothing
+    def initialize(site)
+      @site = site
+    end
+
+    # Require all the plugins which are allowed.
+    #
+    # Returns nothing
+    def conscientious_require
+      require_plugin_files
+      require_gems
+    end
+
+    # Require each of the gem plugins specified.
+    #
+    # Returns nothing.
+    def require_gems
+      site.gems.each do |gem|
+        if plugin_allowed?(gem)
+          require gem
+        end
+      end
+    end
+
+    # Check whether a gem plugin is allowed to be used during this build.
+    #
+    # gem_name - the name of the gem
+    #
+    # Returns true if the gem name is in the whitelist or if the site is not
+    #   in safe mode.
+    def plugin_allowed?(gem_name)
+      !site.safe || whitelist.include?(gem_name)
+    end
+
+    # Build an array of allowed plugin gem names.
+    #
+    # Returns an array of strings, each string being the name of a gem name
+    #   that is allowed to be used.
+    def whitelist
+      @whitelist ||= Array[site.config['whitelist']].flatten
+    end
+
+    # Require all .rb files if safe mode is off
+    #
+    # Returns nothing.
+    def require_plugin_files
+      unless site.safe
+        plugins_path.each do |plugins|
+          Dir[File.join(plugins, "**", "*.rb")].sort.each do |f|
+            require f
+          end
+        end
+      end
+    end
+
+    # Public: Setup the plugin search path
+    #
+    # Returns an Array of plugin search paths
+    def plugins_path
+      if (site.config['plugins'] == Jekyll::Configuration::DEFAULTS['plugins'])
+        [Jekyll.sanitized_path(site.source, site.config['plugins'])]
+      else
+        Array(site.config['plugins']).map { |d| File.expand_path(d) }
+      end
+    end
+
+  end
+end
diff --git a/lib/jekyll/post.rb b/lib/jekyll/post.rb
index 0a1eb42..13217bf 100644
--- a/lib/jekyll/post.rb
+++ b/lib/jekyll/post.rb
@@ -9,6 +9,7 @@ module Jekyll
     EXCERPT_ATTRIBUTES_FOR_LIQUID = %w[
       title
       url
+      dir
       date
       id
       categories
@@ -34,7 +35,7 @@ module Jekyll
 
     attr_accessor :site
     attr_accessor :data, :extracted_excerpt, :content, :output, :ext
-    attr_accessor :date, :slug, :published, :tags, :categories
+    attr_accessor :date, :slug, :tags, :categories
 
     attr_reader :name
 
@@ -48,25 +49,27 @@ module Jekyll
     def initialize(site, source, dir, name)
       @site = site
       @dir = dir
-      @base = self.containing_dir(source, dir)
+      @base = containing_dir(source, dir)
       @name = name
 
       self.categories = dir.downcase.split('/').reject { |x| x.empty? }
-      self.process(name)
-      self.read_yaml(@base, name)
+      process(name)
+      read_yaml(@base, name)
 
-      if self.data.has_key?('date')
-        self.date = Time.parse(self.data["date"].to_s)
+      data.default_proc = proc do |hash, key|
+        site.frontmatter_defaults.find(File.join(dir, name), type, key)
       end
 
-      self.published = self.published?
+      if data.has_key?('date')
+        self.date = Time.parse(data["date"].to_s)
+      end
 
-      self.populate_categories
-      self.populate_tags
+      populate_categories
+      populate_tags
     end
 
     def published?
-      if self.data.has_key?('published') && self.data['published'] == false
+      if data.has_key?('published') && data['published'] == false
         false
       else
         true
@@ -74,19 +77,19 @@ module Jekyll
     end
 
     def populate_categories
-      if self.categories.empty?
-        self.categories = self.data.pluralized_array('category', 'categories').map {|c| c.to_s.downcase}
+      if categories.empty?
+        self.categories = Utils.pluralized_array_from_hash(data, 'category', 'categories').map {|c| c.to_s.downcase}
       end
-      self.categories.flatten!
+      categories.flatten!
     end
 
     def populate_tags
-      self.tags = self.data.pluralized_array("tag", "tags").flatten
+      self.tags = Utils.pluralized_array_from_hash(data, "tag", "tags").flatten
     end
 
     # Get the full path to the directory containing the post files
     def containing_dir(source, dir)
-      File.join(source, dir, '_posts')
+      return File.join(source, dir, '_posts')
     end
 
     # Read the YAML frontmatter.
@@ -97,7 +100,7 @@ module Jekyll
     # Returns nothing.
     def read_yaml(base, name)
       super(base, name)
-      self.extracted_excerpt = self.extract_excerpt
+      self.extracted_excerpt = extract_excerpt
     end
 
     # The post excerpt. This is either a custom excerpt
@@ -105,19 +108,19 @@ module Jekyll
     #
     # Returns excerpt string.
     def excerpt
-      self.data.fetch('excerpt', self.extracted_excerpt.to_s)
+      data.fetch('excerpt', extracted_excerpt.to_s)
     end
 
     # Public: the Post title, from the YAML Front-Matter or from the slug
     #
     # Returns the post title
     def title
-      self.data.fetch("title", self.titleized_slug)
+      data.fetch("title", titleized_slug)
     end
 
     # Turns the post slug into a suitable title
     def titleized_slug
-      self.slug.split('-').select {|w| w.capitalize! || w }.join(' ')
+      slug.split('-').select {|w| w.capitalize! || w }.join(' ')
     end
 
     # Public: the path to the post relative to the site source,
@@ -127,12 +130,12 @@ module Jekyll
     #
     # Returns the path to the file relative to the site source
     def path
-      self.data.fetch('path', self.relative_path.sub(/\A\//, ''))
+      data.fetch('path', relative_path.sub(/\A\//, ''))
     end
 
     # The path to the post source file, relative to the site source
     def relative_path
-      File.join(@dir, '_posts', @name)
+      File.join(*[@dir, "_posts", @name].map(&:to_s).reject(&:empty?))
     end
 
     # Compares Post objects. First compares the Post date. If the dates are
@@ -160,7 +163,10 @@ module Jekyll
       self.slug = slug
       self.ext = ext
     rescue ArgumentError
-      raise FatalException.new("Post #{name} does not have a valid date.")
+      path = File.join(@dir || "", name)
+      msg  =  "Post '#{path}' does not have a valid date.\n"
+      msg  << "Fix the date, or exclude the file or directory from being processed"
+      raise FatalException.new(msg)
     end
 
     # The generated directory into which the post will be placed
@@ -178,11 +184,11 @@ module Jekyll
     #
     # Returns the String permalink.
     def permalink
-      self.data && self.data['permalink']
+      data && data['permalink']
     end
 
     def template
-      case self.site.permalink_style
+      case site.permalink_style
       when :pretty
         "/:categories/:year/:month/:day/:title/"
       when :none
@@ -192,7 +198,7 @@ module Jekyll
       when :ordinal
         "/:categories/:year/:y_day/:title.html"
       else
-        self.site.permalink_style.to_s
+        site.permalink_style.to_s
       end
     end
 
@@ -214,13 +220,14 @@ module Jekyll
         :year        => date.strftime("%Y"),
         :month       => date.strftime("%m"),
         :day         => date.strftime("%d"),
-        :title       => CGI.escape(slug),
+        :title       => slug,
         :i_day       => date.strftime("%d").to_i.to_s,
         :i_month     => date.strftime("%m").to_i.to_s,
-        :categories  => (categories || []).map { |c| URI.escape(c.to_s) }.join('/'),
+        :categories  => (categories || []).map { |c| c.to_s }.join('/'),
         :short_month => date.strftime("%b"),
+        :short_year  => date.strftime("%y"),
         :y_day       => date.strftime("%j"),
-        :output_ext  => self.output_ext
+        :output_ext  => output_ext
       }
     end
 
@@ -229,7 +236,7 @@ module Jekyll
     #
     # Returns the String UID.
     def id
-      File.join(self.dir, self.slug)
+      File.join(dir, slug)
     end
 
     # Calculate related posts.
@@ -247,16 +254,16 @@ module Jekyll
     # Returns nothing.
     def render(layouts, site_payload)
       # construct payload
-      payload = {
+      payload = Utils.deep_merge_hashes({
         "site" => { "related_posts" => related_posts(site_payload["site"]["posts"]) },
-        "page" => self.to_liquid(EXCERPT_ATTRIBUTES_FOR_LIQUID)
-      }.deep_merge(site_payload)
+        "page" => to_liquid(EXCERPT_ATTRIBUTES_FOR_LIQUID)
+      }, site_payload)
 
       if generate_excerpt?
-        self.extracted_excerpt.do_layout(payload, {})
+        extracted_excerpt.do_layout(payload, {})
       end
 
-      do_layout(payload.merge({"page" => self.to_liquid}), layouts)
+      do_layout(payload.merge({"page" => to_liquid}), layouts)
     end
 
     # Obtain destination path.
@@ -266,30 +273,29 @@ module Jekyll
     # Returns destination file path String.
     def destination(dest)
       # The url needs to be unescaped in order to preserve the correct filename
-      path = Jekyll.sanitized_path(dest, CGI.unescape(url))
+      path = Jekyll.sanitized_path(dest, URL.unescape_path(url))
       path = File.join(path, "index.html") if path[/\.html$/].nil?
       path
     end
 
     # Returns the shorthand String identifier of this Post.
     def inspect
-      "<Post: #{self.id}>"
+      "<Post: #{id}>"
     end
 
     def next
-      pos = self.site.posts.index(self)
-
-      if pos && pos < self.site.posts.length-1
-        self.site.posts[pos+1]
+      pos = site.posts.index {|post| post.equal?(self) }
+      if pos && pos < site.posts.length - 1
+        site.posts[pos + 1]
       else
         nil
       end
     end
 
     def previous
-      pos = self.site.posts.index(self)
+      pos = site.posts.index {|post| post.equal?(self) }
       if pos && pos > 0
-        self.site.posts[pos-1]
+        site.posts[pos - 1]
       else
         nil
       end
diff --git a/lib/jekyll/publisher.rb b/lib/jekyll/publisher.rb
new file mode 100644
index 0000000..e86e96b
--- /dev/null
+++ b/lib/jekyll/publisher.rb
@@ -0,0 +1,21 @@
+module Jekyll
+  class Publisher
+    def initialize(site)
+      @site = site
+    end
+
+    def publish?(thing)
+      can_be_published?(thing) && !hidden_in_the_future?(thing)
+    end
+
+    private
+
+    def can_be_published?(thing)
+      thing.data.fetch('published', true) || @site.unpublished
+    end
+
+    def hidden_in_the_future?(thing)
+      thing.is_a?(Post) && !@site.future && thing.date > @site.time
+    end
+  end
+end
\ No newline at end of file
diff --git a/lib/jekyll/related_posts.rb b/lib/jekyll/related_posts.rb
index f3040c1..bc71ebd 100644
--- a/lib/jekyll/related_posts.rb
+++ b/lib/jekyll/related_posts.rb
@@ -14,9 +14,9 @@ module Jekyll
     end
 
     def build
-      return [] unless self.site.posts.size > 1
+      return [] unless site.posts.size > 1
 
-      if self.site.lsi
+      if site.lsi
         build_index
         lsi_related_posts
       else
@@ -30,7 +30,7 @@ module Jekyll
         lsi = Classifier::LSI.new(:auto_rebuild => false)
         display("Populating LSI...")
 
-        self.site.posts.each do |x|
+        site.posts.each do |x|
           lsi.add_item(x)
         end
 
@@ -42,11 +42,11 @@ module Jekyll
     end
 
     def lsi_related_posts
-      self.class.lsi.find_related(post.content, 11) - [self.post]
+      self.class.lsi.find_related(post.content, 11) - [post]
     end
 
     def most_recent_posts
-      recent_posts = self.site.posts.reverse - [self.post]
+      recent_posts = site.posts.reverse - [post]
       recent_posts.first(10)
     end
 
diff --git a/lib/jekyll/renderer.rb b/lib/jekyll/renderer.rb
new file mode 100644
index 0000000..e3d233d
--- /dev/null
+++ b/lib/jekyll/renderer.rb
@@ -0,0 +1,132 @@
+module Jekyll
+  class Renderer
+
+    attr_reader :document, :site
+
+    def initialize(site, document)
+      @site     = site
+      @document = document
+    end
+
+    # Determine which converters to use based on this document's
+    # extension.
+    #
+    # Returns an array of Converter instances.
+    def converters
+      @converters ||= site.converters.select { |c| c.matches(document.extname) }
+    end
+
+    # Determine the extname the outputted file should have
+    #
+    # Returns the output extname including the leading period.
+    def output_ext
+      converters.first.output_ext(document.extname)
+    end
+
+    ######################
+    ## DAT RENDER THO
+    ######################
+
+    def run
+      payload = Utils.deep_merge_hashes({
+        "page" => document.to_liquid
+      }, site.site_payload)
+
+      info = {
+        filters:   [Jekyll::Filters],
+        registers: { :site => site, :page => payload['page'] }
+      }
+
+      # render and transform content (this becomes the final content of the object)
+      payload["highlighter_prefix"] = converters.first.highlighter_prefix
+      payload["highlighter_suffix"] = converters.first.highlighter_suffix
+
+      output = document.content
+
+      if document.render_with_liquid?
+        output = render_liquid(output, payload, info)
+      end
+
+      place_in_layouts(
+        convert(output),
+        payload,
+        info
+      )
+    end
+
+    # Convert the given content using the converters which match this renderer's document.
+    #
+    # content - the raw, unconverted content
+    #
+    # Returns the converted content.
+    def convert(content)
+      converters.reduce(content) do |output, converter|
+        begin
+          converter.convert output
+        rescue => e
+          Jekyll.logger.error "Conversion error:", "#{converter.class} encountered an error converting '#{document.relative_path}'."
+          raise e
+        end
+      end
+    end
+
+    # Render the given content with the payload and info
+    #
+    # content -
+    # payload -
+    # info    -
+    # path    - (optional) the path to the file, for use in ex
+    #
+    # Returns the content, rendered by Liquid.
+    def render_liquid(content, payload, info, path = nil)
+      Liquid::Template.parse(content).render!(payload, info)
+    rescue Tags::IncludeTagError => e
+      Jekyll.logger.error "Liquid Exception:", "#{e.message} in #{e.path}, included in #{path || document.relative_path}"
+      raise e
+    rescue Exception => e
+      Jekyll.logger.error "Liquid Exception:", "#{e.message} in #{path || document.relative_path}"
+      raise e
+    end
+
+    # Render layouts and place given content inside.
+    #
+    # content - the content to be placed in the layout
+    #
+    #
+    # Returns the content placed in the Liquid-rendered layouts
+    def place_in_layouts(content, payload, info)
+      output = content.dup
+      layout = site.layouts[document.data["layout"]]
+      used   = Set.new([layout])
+
+      while layout
+        payload = Utils.deep_merge_hashes(
+          payload,
+          {
+            "content" => output,
+            "page"    => document.to_liquid,
+            "layout"  => layout.data
+          }
+        )
+
+        output = render_liquid(
+          layout.content,
+          payload,
+          info,
+          File.join(site.config['layouts'], layout.name)
+        )
+
+        if layout = site.layouts[layout.data["layout"]]
+          if used.include?(layout)
+            layout = nil # avoid recursive chain
+          else
+            used << layout
+          end
+        end
+      end
+
+      output
+    end
+
+  end
+end
diff --git a/lib/jekyll/site.rb b/lib/jekyll/site.rb
index 2ce1c02..288662a 100644
--- a/lib/jekyll/site.rb
+++ b/lib/jekyll/site.rb
@@ -1,9 +1,10 @@
 module Jekyll
   class Site
     attr_accessor :config, :layouts, :posts, :pages, :static_files,
-                  :categories, :exclude, :include, :source, :dest, :lsi, :pygments,
-                  :permalink_style, :tags, :time, :future, :safe, :plugins, :limit_posts,
-                  :show_drafts, :keep_files, :baseurl, :data, :file_read_opts, :gems
+                  :exclude, :include, :source, :dest, :lsi, :highlighter,
+                  :permalink_style, :time, :future, :unpublished, :safe, :plugins, :limit_posts,
+                  :show_drafts, :keep_files, :baseurl, :data, :file_read_opts, :gems,
+                  :plugin_manager
 
     attr_accessor :converters, :generators
 
@@ -11,54 +12,52 @@ module Jekyll
     #
     # config - A Hash containing site configuration details.
     def initialize(config)
-      self.config          = config.clone
+      self.config = config.clone
 
-      %w[safe lsi pygments baseurl exclude include future show_drafts limit_posts keep_files gems].each do |opt|
+      %w[safe lsi highlighter baseurl exclude include future unpublished
+        show_drafts limit_posts keep_files gems].each do |opt|
         self.send("#{opt}=", config[opt])
       end
 
       self.source          = File.expand_path(config['source'])
       self.dest            = File.expand_path(config['destination'])
-      self.plugins         = plugins_path
       self.permalink_style = config['permalink'].to_sym
 
+      self.plugin_manager = Jekyll::PluginManager.new(self)
+      self.plugins        = plugin_manager.plugins_path
+
       self.file_read_opts = {}
       self.file_read_opts[:encoding] = config['encoding'] if config['encoding']
 
-      self.reset
-      self.setup
+      reset
+      setup
     end
 
     # Public: Read, process, and write this Site to output.
     #
     # Returns nothing.
     def process
-      self.reset
-      self.read
-      self.generate
-      self.render
-      self.cleanup
-      self.write
+      reset
+      read
+      generate
+      render
+      cleanup
+      write
     end
 
     # Reset Site details.
     #
     # Returns nothing
     def reset
-      self.time            = if self.config['time']
-                               Time.parse(self.config['time'].to_s)
-                             else
-                               Time.now
-                             end
-      self.layouts         = {}
-      self.posts           = []
-      self.pages           = []
-      self.static_files    = []
-      self.categories      = Hash.new { |hash, key| hash[key] = [] }
-      self.tags            = Hash.new { |hash, key| hash[key] = [] }
-      self.data            = {}
-
-      if self.limit_posts < 0
+      self.time = (config['time'] ? Time.parse(config['time'].to_s) : Time.now)
+      self.layouts = {}
+      self.posts = []
+      self.pages = []
+      self.static_files = []
+      self.data = {}
+      @collections = nil
+
+      if limit_posts < 0
         raise ArgumentError, "limit_posts must be a non-negative number"
       end
     end
@@ -69,18 +68,7 @@ module Jekyll
     def setup
       ensure_not_in_dest
 
-      # If safe mode is off, load in any Ruby files under the plugins
-      # directory.
-      unless self.safe
-        self.plugins.each do |plugins|
-            Dir[File.join(plugins, "**/*.rb")].sort.each do |f|
-              require f
-            end
-        end
-        self.gems.each do |gem|
-          require gem
-        end
-      end
+      plugin_manager.conscientious_require
 
       self.converters = instantiate_subclasses(Jekyll::Converter)
       self.generators = instantiate_subclasses(Jekyll::Generator)
@@ -89,22 +77,37 @@ module Jekyll
     # Check that the destination dir isn't the source dir or a directory
     # parent to the source dir.
     def ensure_not_in_dest
-      dest = Pathname.new(self.dest)
-      Pathname.new(self.source).ascend do |path|
-        if path == dest
+      dest_pathname = Pathname.new(dest)
+      Pathname.new(source).ascend do |path|
+        if path == dest_pathname
           raise FatalException.new "Destination directory cannot be or contain the Source directory."
         end
       end
     end
 
-    # Internal: Setup the plugin search path
+    # The list of collections and their corresponding Jekyll::Collection instances.
+    # If config['collections'] is set, a new instance is created for each item in the collection.
+    # If config['collections'] is not set, a new hash is returned.
     #
-    # Returns an Array of plugin search paths
-    def plugins_path
-      if (config['plugins'] == Jekyll::Configuration::DEFAULTS['plugins'])
-        [File.join(self.source, config['plugins'])]
+    # Returns a Hash containing collection name-to-instance pairs.
+    def collections
+      @collections ||= Hash[collection_names.map { |coll| [coll, Jekyll::Collection.new(self, coll)] } ]
+    end
+
+    # The list of collection names.
+    #
+    # Returns an array of collection names from the configuration,
+    #   or an empty array if the `collections` key is not set.
+    def collection_names
+      case config['collections']
+      when Hash
+        config['collections'].keys
+      when Array
+        config['collections']
+      when nil
+        []
       else
-        Array(config['plugins']).map { |d| File.expand_path(d) }
+        raise ArgumentError, "Your `collections` key must be a hash or an array."
       end
     end
 
@@ -112,25 +115,10 @@ module Jekyll
     #
     # Returns nothing.
     def read
-      self.read_layouts
-      self.read_directories
-      self.read_data(config['data_source'])
-    end
-
-    # Read all the files in <source>/<layouts> and create a new Layout object
-    # with each one.
-    #
-    # Returns nothing.
-    def read_layouts
-      base = File.join(self.source, self.config['layouts'])
-      return unless File.exists?(base)
-      entries = []
-      Dir.chdir(base) { entries = filter_entries(Dir['**/*.*']) }
-
-      entries.each do |f|
-        name = f.split(".")[0..-2].join(".")
-        self.layouts[name] = Layout.new(self, base, f)
-      end
+      self.layouts = LayoutReader.new(self).read
+      read_directories
+      read_data(config['data_source'])
+      read_collections
     end
 
     # Recursively traverse directories to find posts, pages and static files
@@ -141,25 +129,28 @@ module Jekyll
     #
     # Returns nothing.
     def read_directories(dir = '')
-      base = File.join(self.source, dir)
-      entries = Dir.chdir(base) { filter_entries(Dir.entries('.')) }
+      base = File.join(source, dir)
+      entries = Dir.chdir(base) { filter_entries(Dir.entries('.'), base) }
 
-      self.read_posts(dir)
-      self.read_drafts(dir) if self.show_drafts
-      self.posts.sort!
+      read_posts(dir)
+      read_drafts(dir) if show_drafts
+      posts.sort!
       limit_posts! if limit_posts > 0 # limit the posts if :limit_posts option is set
 
       entries.each do |f|
         f_abs = File.join(base, f)
         if File.directory?(f_abs)
           f_rel = File.join(dir, f)
-          read_directories(f_rel) unless self.dest.sub(/\/$/, '') == f_abs
+          read_directories(f_rel) unless dest.sub(/\/$/, '') == f_abs
         elsif has_yaml_header?(f_abs)
-          pages << Page.new(self, self.source, dir, f)
+          page = Page.new(self, source, dir, f)
+          pages << page if publisher.publish?(page)
         else
-          static_files << StaticFile.new(self, self.source, dir, f)
+          static_files << StaticFile.new(self, source, dir, f)
         end
       end
+
+      pages.sort_by!(&:name)
     end
 
     # Read all the files in <source>/<dir>/_posts and create a new Post
@@ -169,14 +160,12 @@ module Jekyll
     #
     # Returns nothing.
     def read_posts(dir)
-      posts = read_things(dir, '_posts', Post)
+      posts = read_content(dir, '_posts', Post)
 
       posts.each do |post|
-        if post.published && (self.future || post.date <= self.time)
-          aggregate_post_info(post)
-        end
+        aggregate_post_info(post) if publisher.publish?(post)
       end
-   end
+    end
 
     # Read all the files in <source>/<dir>/_drafts and create a new Post
     # object with each one.
@@ -185,16 +174,18 @@ module Jekyll
     #
     # Returns nothing.
     def read_drafts(dir)
-      drafts = read_things(dir, '_drafts', Draft)
+      drafts = read_content(dir, '_drafts', Draft)
 
       drafts.each do |draft|
-        aggregate_post_info(draft)
+        if draft.published?
+          aggregate_post_info(draft)
+        end
       end
     end
 
-    def read_things(dir, magic_dir, klass)
+    def read_content(dir, magic_dir, klass)
       get_entries(dir, magic_dir).map do |entry|
-        klass.new(self, self.source, dir, entry) if klass.valid?(entry)
+        klass.new(self, source, dir, entry) if klass.valid?(entry)
       end.reject do |entry|
         entry.nil?
       end
@@ -204,18 +195,27 @@ module Jekyll
     #
     # Returns nothing
     def read_data(dir)
-      base = File.join(self.source, dir)
-      return unless File.directory?(base) && (!self.safe || !File.symlink?(base))
+      base = File.join(source, dir)
+      return unless File.directory?(base) && (!safe || !File.symlink?(base))
 
       entries = Dir.chdir(base) { Dir['*.{yaml,yml}'] }
       entries.delete_if { |e| File.directory?(File.join(base, e)) }
 
       entries.each do |entry|
-        path = File.join(self.source, dir, entry)
-        next if File.symlink?(path) && self.safe
+        path = File.join(source, dir, entry)
+        next if File.symlink?(path) && safe
 
         key = sanitize_filename(File.basename(entry, '.*'))
-        self.data[key] = YAML.safe_load_file(path)
+        self.data[key] = SafeYAML.load_file(path)
+      end
+    end
+
+    # Read in all collections specified in the configuration
+    #
+    # Returns nothing.
+    def read_collections
+      collections.each do |_, collection|
+        collection.read unless collection.label.eql?("data")
       end
     end
 
@@ -223,7 +223,7 @@ module Jekyll
     #
     # Returns nothing.
     def generate
-      self.generators.each do |generator|
+      generators.each do |generator|
         generator.generate(self)
       end
     end
@@ -234,13 +234,16 @@ module Jekyll
     def render
       relative_permalinks_deprecation_method
 
-      payload = site_payload
-      [self.posts, self.pages].flatten.each do |page_or_post|
-        page_or_post.render(self.layouts, payload)
+      collections.each do |label, collection|
+        collection.docs.each do |document|
+          document.output = Jekyll::Renderer.new(self, document).run
+        end
       end
 
-      self.categories.values.map { |ps| ps.sort! { |a, b| b <=> a } }
-      self.tags.values.map { |ps| ps.sort! { |a, b| b <=> a } }
+      payload = site_payload
+      [posts, pages].flatten.each do |page_or_post|
+        page_or_post.render(layouts, payload)
+      end
     rescue Errno::ENOENT => e
       # ignore missing layout dir
     end
@@ -256,7 +259,7 @@ module Jekyll
     #
     # Returns nothing.
     def write
-      each_site_file { |item| item.write(self.dest) }
+      each_site_file { |item| item.write(dest) }
     end
 
     # Construct a Hash of Posts indexed by the specified Post attribute.
@@ -275,18 +278,26 @@ module Jekyll
     def post_attr_hash(post_attr)
       # Build a hash map based on the specified post attribute ( post attr =>
       # array of posts ) then sort each array in reverse order.
-      hash = Hash.new { |hsh, key| hsh[key] = Array.new }
-      self.posts.each { |p| p.send(post_attr.to_sym).each { |t| hash[t] << p } }
-      hash.values.map { |sortme| sortme.sort! { |a, b| b <=> a } }
+      hash = Hash.new { |h, key| h[key] = [] }
+      posts.each { |p| p.send(post_attr.to_sym).each { |t| hash[t] << p } }
+      hash.values.each { |posts| posts.sort!.reverse! }
       hash
     end
 
+    def tags
+      post_attr_hash('tags')
+    end
+
+    def categories
+      post_attr_hash('categories')
+    end
+
     # Prepare site data for site payload. The method maintains backward compatibility
     # if the key 'data' is already used in _config.yml.
     #
     # Returns the Hash to be hooked to site.data.
     def site_data
-      self.config['data'] || self.data
+      config['data'] || data
     end
 
     # The Hash payload containing site-wide data.
@@ -304,14 +315,20 @@ module Jekyll
     #                  See Site#post_attr_hash for type info.
     def site_payload
       {"jekyll" => { "version" => Jekyll::VERSION },
-       "site" => self.config.merge({
-          "time"       => self.time,
-          "posts"      => self.posts.sort { |a, b| b <=> a },
-          "pages"      => self.pages,
-          "html_pages" => self.pages.reject { |page| !page.html? },
-          "categories" => post_attr_hash('categories'),
-          "tags"       => post_attr_hash('tags'),
-          "data"       => site_data})}
+       "site"   => Utils.deep_merge_hashes(config,
+         Utils.deep_merge_hashes(Hash[collections.map{|label, coll| [label, coll.docs]}], {
+          "time"         => time,
+          "posts"        => posts.sort { |a, b| b <=> a },
+          "pages"        => pages,
+          "static_files" => static_files.sort { |a, b| a.relative_path <=> b.relative_path },
+          "html_pages"   => pages.reject { |page| !page.html? },
+          "categories"   => post_attr_hash('categories'),
+          "tags"         => post_attr_hash('tags'),
+          "collections"  => collections,
+          "documents"    => documents,
+          "data"         => site_data
+        }))
+      }
     end
 
     # Filter out any files/directories that are hidden or backup files (start
@@ -322,8 +339,8 @@ module Jekyll
     # entries - The Array of String file/directory entries to filter.
     #
     # Returns the Array of filtered entries.
-    def filter_entries(entries)
-      EntryFilter.new(self).filter(entries)
+    def filter_entries(entries, base_directory = nil)
+      EntryFilter.new(self, base_directory).filter(entries)
     end
 
     # Get the implementation class for the given Converter.
@@ -332,7 +349,7 @@ module Jekyll
     #
     # Returns the Converter instance implementing the given Converter.
     def getConverterImpl(klass)
-      matches = self.converters.select { |c| c.class == klass }
+      matches = converters.select { |c| c.class == klass }
       if impl = matches.first
         impl
       else
@@ -348,10 +365,10 @@ module Jekyll
     #
     # Returns array of instances of subclasses of parameter
     def instantiate_subclasses(klass)
-      klass.subclasses.select do |c|
-        !self.safe || c.safe
+      klass.descendants.select do |c|
+        !safe || c.safe
       end.sort.map do |c|
-        c.new(self.config)
+        c.new(config)
       end
     end
 
@@ -362,9 +379,9 @@ module Jekyll
     #
     # Returns the list of entries to process
     def get_entries(dir, subfolder)
-      base = File.join(self.source, dir, subfolder)
-      return [] unless File.exists?(base)
-      entries = Dir.chdir(base) { filter_entries(Dir['**/*']) }
+      base = File.join(source, dir, subfolder)
+      return [] unless File.exist?(base)
+      entries = Dir.chdir(base) { filter_entries(Dir['**/*'], base) }
       entries.delete_if { |e| File.directory?(File.join(base, e)) }
     end
 
@@ -374,44 +391,54 @@ module Jekyll
     #
     # Returns nothing
     def aggregate_post_info(post)
-      self.posts << post
-      post.categories.each { |c| self.categories[c] << post }
-      post.tags.each { |c| self.tags[c] << post }
+      posts << post
     end
 
     def relative_permalinks_deprecation_method
       if config['relative_permalinks'] && has_relative_page?
-        $stderr.puts # Places newline after "Generating..."
         Jekyll.logger.warn "Deprecation:", "Starting in 2.0, permalinks for pages" +
                                             " in subfolders must be relative to the" +
                                             " site source directory, not the parent" +
                                             " directory. Check http://jekyllrb.com/docs/upgrading/"+
                                             " for more info."
-        $stderr.print Jekyll.logger.formatted_topic("") + "..." # for "done."
       end
     end
 
+    def docs_to_write
+      documents.select(&:write?)
+    end
+
+    def documents
+      collections.reduce(Set.new) do |docs, (_, collection)|
+        docs.merge(collection.docs)
+      end.to_a
+    end
+
     def each_site_file
-      %w(posts pages static_files).each do |type|
-        self.send(type).each do |item|
+      %w(posts pages static_files docs_to_write).each do |type|
+        send(type).each do |item|
           yield item
         end
       end
     end
 
+    def frontmatter_defaults
+      @frontmatter_defaults ||= Configuration::FrontmatterDefaults.new(self)
+    end
+
     private
 
     def has_relative_page?
-      self.pages.any? { |page| page.uses_relative_permalinks }
+      pages.any? { |page| page.uses_relative_permalinks }
     end
 
     def has_yaml_header?(file)
-      "---" == File.open(file) { |fd| fd.read(3) }
+      !!(File.open(file, 'rb') { |f| f.read(5) } =~ /\A---\r?\n/)
     end
 
     def limit_posts!
-      limit = self.posts.length < limit_posts ? self.posts.length : limit_posts
-      self.posts = self.posts[-limit, limit]
+      limit = posts.length < limit_posts ? posts.length : limit_posts
+      self.posts = posts[-limit, limit]
     end
 
     def site_cleaner
@@ -419,9 +446,13 @@ module Jekyll
     end
 
     def sanitize_filename(name)
-      name = name.gsub(/[^\w\s_-]+/, '')
-      name = name.gsub(/(^|\b\s)\s+($|\s?\b)/, '\\1\\2')
-      name = name.gsub(/\s+/, '_')
+      name.gsub!(/[^\w\s_-]+/, '')
+      name.gsub!(/(^|\b\s)\s+($|\s?\b)/, '\\1\\2')
+      name.gsub(/\s+/, '_')
+    end
+
+    def publisher
+      @publisher ||= Publisher.new(self)
     end
   end
 end
diff --git a/lib/jekyll/static_file.rb b/lib/jekyll/static_file.rb
index 3d863ca..dfbc9fb 100644
--- a/lib/jekyll/static_file.rb
+++ b/lib/jekyll/static_file.rb
@@ -18,7 +18,12 @@ module Jekyll
 
     # Returns source file path.
     def path
-      File.join(@base, @dir, @name)
+      File.join(*[@base, @dir, @name].compact)
+    end
+
+    # Returns the source file path relative to the site source
+    def relative_path
+      @relative_path ||= path.sub(/\A#{@site.source}/, '')
     end
 
     # Obtain destination path.
@@ -27,7 +32,7 @@ module Jekyll
     #
     # Returns destination file path.
     def destination(dest)
-      File.join(dest, @dir, @name)
+      File.join(*[dest, @dir, @name].compact)
     end
 
     # Returns last modification time for this file.
@@ -66,5 +71,13 @@ module Jekyll
       @@mtimes = Hash.new
       nil
     end
+
+    def to_liquid
+      {
+        "path"          => relative_path,
+        "modified_time" => mtime.to_s,
+        "extname"       => File.extname(relative_path)
+      }
+    end
   end
 end
diff --git a/lib/jekyll/stevenson.rb b/lib/jekyll/stevenson.rb
index 8765220..b50368c 100644
--- a/lib/jekyll/stevenson.rb
+++ b/lib/jekyll/stevenson.rb
@@ -2,20 +2,22 @@ module Jekyll
   class Stevenson
     attr_accessor :log_level
 
-    DEBUG  = 0
-    INFO   = 1
-    WARN   = 2
-    ERROR  = 3
+    LOG_LEVELS = {
+      debug: 0,
+      info:  1,
+      warn:  2,
+      error: 3
+    }
 
     # Public: Create a new instance of Stevenson, Jekyll's logger
     #
-    # level - (optional, integer) the log level
+    # level - (optional, symbol) the log level
     #
     # Returns nothing
-    def initialize(level = INFO)
+    def initialize(level = :info)
       @log_level = level
     end
-    
+
     # Public: Print a jekyll debug message to stdout
     #
     # topic - the topic of the message, e.g. "Configuration file", "Deprecation", etc.
@@ -23,7 +25,7 @@ module Jekyll
     #
     # Returns nothing
     def debug(topic, message = nil)
-      $stdout.puts(message(topic, message)) if log_level <= DEBUG
+      $stdout.puts(message(topic, message)) if should_log(:debug)
     end
 
     # Public: Print a jekyll message to stdout
@@ -33,7 +35,7 @@ module Jekyll
     #
     # Returns nothing
     def info(topic, message = nil)
-      $stdout.puts(message(topic, message)) if log_level <= INFO
+      $stdout.puts(message(topic, message)) if should_log(:info)
     end
 
     # Public: Print a jekyll message to stderr
@@ -43,7 +45,7 @@ module Jekyll
     #
     # Returns nothing
     def warn(topic, message = nil)
-      $stderr.puts(message(topic, message).yellow) if log_level <= WARN
+      $stderr.puts(message(topic, message).yellow) if should_log(:warn)
     end
 
     # Public: Print a jekyll error message to stderr
@@ -53,7 +55,7 @@ module Jekyll
     #
     # Returns nothing
     def error(topic, message = nil)
-      $stderr.puts(message(topic, message).red) if log_level <= ERROR
+      $stderr.puts(message(topic, message).red) if should_log(:error)
     end
 
     # Public: Print a Jekyll error message to stderr and immediately abort the process
@@ -85,5 +87,16 @@ module Jekyll
     def formatted_topic(topic)
       "#{topic} ".rjust(20)
     end
+
+    # Public: Determine whether the current log level warrants logging at the
+    #         proposed level.
+    #
+    # level_of_message - the log level of the message (symbol)
+    #
+    # Returns true if the log level of the message is greater than or equal to
+    #   this logger's log level.
+    def should_log(level_of_message)
+      LOG_LEVELS.fetch(log_level) <= LOG_LEVELS.fetch(level_of_message)
+    end
   end
 end
diff --git a/lib/jekyll/tags/gist.rb b/lib/jekyll/tags/gist.rb
index f4f3288..977933d 100644
--- a/lib/jekyll/tags/gist.rb
+++ b/lib/jekyll/tags/gist.rb
@@ -1,8 +1,8 @@
 # Gist Liquid Tag
 #
 # Example:
-#    {% gist 1234567 %}
-#    {% gist 1234567 file.rb %}
+#    {% gist username/1234567 %}
+#    {% gist username/1234567 file.rb %}
 
 module Jekyll
   class GistTag < Liquid::Tag
@@ -18,8 +18,7 @@ Syntax error in tag 'gist' while parsing the following markup:
   #{@markup}
 
 Valid syntax:
-  for public gists:  {% gist 1234567 %}
-  for private gists: {% gist user/1234567 %}
+  for all gists: {% gist user/1234567 %}
 eos
       end
     end
diff --git a/lib/jekyll/tags/highlight.rb b/lib/jekyll/tags/highlight.rb
index 2ea144d..29a6ea0 100644
--- a/lib/jekyll/tags/highlight.rb
+++ b/lib/jekyll/tags/highlight.rb
@@ -5,10 +5,7 @@ module Jekyll
 
       # The regular expression syntax checker. Start with the language specifier.
       # Follow that by zero or more space separated options that take one of two
-      # forms:
-      #
-      # 1. name
-      # 2. name=value
+      # forms: name or name=value
       SYNTAX = /^([a-zA-Z0-9.+#-]+)((\s+\w+(=\w+)?)*)$/
 
       def initialize(tag_name, markup, tokens)
@@ -19,16 +16,10 @@ module Jekyll
           if defined?($2) && $2 != ''
             $2.split.each do |opt|
               key, value = opt.split('=')
-              if value.nil?
-                if key == 'linenos'
-                  value = 'inline'
-                else
-                  value = true
-                end
-              end
-              @options[key] = value
+              @options[key.to_sym] = value || true
             end
           end
+          @options[:linenos] = "inline" if @options.key?(:linenos) and @options[:linenos] == true
         else
           raise SyntaxError.new <<-eos
 Syntax Error in tag 'highlight' while parsing the following markup:
@@ -41,41 +32,60 @@ eos
       end
 
       def render(context)
-        if context.registers[:site].pygments
-          render_pygments(context, super)
+        prefix = context["highlighter_prefix"] || ""
+        suffix = context["highlighter_suffix"] || ""
+        code = super.to_s.strip
+
+        output = case context.registers[:site].highlighter
+        when 'pygments'
+          render_pygments(code)
+        when 'rouge'
+          render_rouge(code)
         else
-          render_codehighlighter(context, super)
+          render_codehighlighter(code)
         end
+
+        rendered_output = add_code_tag(output)
+        prefix + rendered_output + suffix
       end
 
-      def render_pygments(context, code)
+      def render_pygments(code)
         require 'pygments'
-
         @options[:encoding] = 'utf-8'
 
-        output = add_code_tags(
-          Pygments.highlight(code, :lexer => @lang, :options => @options),
-          @lang
-        )
+        highlighted_code = Pygments.highlight(code, :lexer => @lang, :options => @options)
+
+        if highlighted_code.nil?
+          Jekyll.logger.error "There was an error highlighting your code:"
+          puts
+          Jekyll.logger.error code
+          puts
+          Jekyll.logger.error "While attempting to convert the above code, Pygments.rb" +
+            " returned an unacceptable value."
+          Jekyll.logger.error "This is usually a timeout problem solved by running `jekyll build` again."
+          raise ArgumentError.new("Pygments.rb returned an unacceptable value when attempting to highlight some code.")
+        end
+
+        highlighted_code
+      end
 
-        output = context["pygments_prefix"] + output if context["pygments_prefix"]
-        output = output + context["pygments_suffix"] if context["pygments_suffix"]
-        output
+      def render_rouge(code)
+        require 'rouge'
+        formatter = Rouge::Formatters::HTML.new(line_numbers: @options[:linenos], wrap: false)
+        lexer = Rouge::Lexer.find_fancy(@lang, code) || Rouge::Lexers::PlainText
+        code = formatter.format(lexer.lex(code))
+        "<div class=\"highlight\"><pre>#{code}</pre></div>"
       end
 
-      def render_codehighlighter(context, code)
-        #The div is required because RDiscount blows ass
-        <<-HTML
-  <div>
-    <pre><code class='#{@lang}'>#{h(code).strip}</code></pre>
-  </div>
-        HTML
+      def render_codehighlighter(code)
+        "<div class=\"highlight\"><pre>#{h(code).strip}</pre></div>"
       end
 
-      def add_code_tags(code, lang)
+      def add_code_tag(code)
         # Add nested <code> tags to code blocks
-        code = code.sub(/<pre>/,'<pre><code class="' + lang + '">')
-        code = code.sub(/<\/pre>/,"</code></pre>")
+        code = code.sub(/<pre>\n*/,'<pre><code class="' + @lang.to_s.gsub("+", "-") + '">')
+        code = code.sub(/\n*<\/pre>/,"</code></pre>")
+        code.strip
       end
 
     end
diff --git a/lib/jekyll/tags/include.rb b/lib/jekyll/tags/include.rb
index adcdedf..1d655af 100644
--- a/lib/jekyll/tags/include.rb
+++ b/lib/jekyll/tags/include.rb
@@ -14,12 +14,19 @@ module Jekyll
       SYNTAX_EXAMPLE = "{% include file.ext param='value' param2='value' %}"
 
       VALID_SYNTAX = /([\w-]+)\s*=\s*(?:"([^"\\]*(?:\\.[^"\\]*)*)"|'([^'\\]*(?:\\.[^'\\]*)*)'|([\w\.-]+))/
+      VARIABLE_SYNTAX = /(?<variable>\{\{\s*(?<name>[\w\-\.]+)\s*(\|.*)?\}\})(?<params>.*)/
 
       INCLUDES_DIR = '_includes'
 
       def initialize(tag_name, markup, tokens)
         super
-        @file, @params = markup.strip.split(' ', 2);
+        matched = markup.strip.match(VARIABLE_SYNTAX)
+        if matched
+          @file = matched['variable'].strip
+          @params = matched['params'].strip
+        else
+          @file, @params = markup.strip.split(' ', 2);
+        end
         validate_params if @params
       end
 
@@ -48,11 +55,11 @@ module Jekyll
             raise ArgumentError.new <<-eos
 Invalid syntax for include tag. File contains invalid characters or sequences:
 
-	#{@file}
+  #{file}
 
 Valid syntax:
 
-	#{SYNTAX_EXAMPLE}
+  #{SYNTAX_EXAMPLE}
 
 eos
         end
@@ -64,11 +71,11 @@ eos
           raise ArgumentError.new <<-eos
 Invalid syntax for include tag:
 
-	#{@params}
+  #{@params}
 
 Valid syntax:
 
-	#{SYNTAX_EXAMPLE}
+  #{SYNTAX_EXAMPLE}
 
 eos
         end
@@ -79,17 +86,18 @@ eos
         context.registers[:site].file_read_opts
       end
 
-      def retrieve_variable(context)
-        if /\{\{([\w\-\.]+)\}\}/ =~ @file
-          raise ArgumentError.new("No variable #{$1} was found in include tag") if context[$1].nil?
-          context[$1]
+      # Render the variable if required
+      def render_variable(context)
+        if @file.match(VARIABLE_SYNTAX)
+          partial = Liquid::Template.parse(@file)
+          partial.render!(context)
         end
       end
 
       def render(context)
         dir = File.join(File.realpath(context.registers[:site].source), INCLUDES_DIR)
 
-        file = retrieve_variable(context) || @file
+        file = render_variable(context) || @file
         validate_file_name(file)
 
         path = File.join(dir, file)
@@ -111,10 +119,14 @@ eos
         if safe && !realpath_prefixed_with?(path, dir)
           raise IOError.new "The included file '#{path}' should exist and should not be a symlink"
         elsif !File.exist?(path)
-          raise IOError.new "Included file '#{path}' not found"
+          raise IOError.new "Included file '#{path_relative_to_source(dir, path)}' not found"
         end
       end
 
+      def path_relative_to_source(dir, path)
+        File.join(INCLUDES_DIR, path.sub(Regexp.new("^#{dir}"), ""))
+      end
+
       def realpath_prefixed_with?(path, dir)
         File.exist?(path) && File.realpath(path).start_with?(dir)
       end
@@ -125,7 +137,7 @@ eos
 
       # This method allows to modify the file content by inheriting from the class.
       def source(file, context)
-        File.read_with_options(file, file_read_opts(context))
+        File.read(file, file_read_opts(context))
       end
     end
   end
diff --git a/lib/jekyll/tags/post_url.rb b/lib/jekyll/tags/post_url.rb
index 063e22a..af36670 100644
--- a/lib/jekyll/tags/post_url.rb
+++ b/lib/jekyll/tags/post_url.rb
@@ -7,6 +7,7 @@ module Jekyll
 
       def initialize(name)
         all, path, date, slug = *name.sub(/^\//, "").match(MATCHER)
+        raise ArgumentError.new("'#{name}' does not contain valid date and/or title") unless all
         @slug = path ? path + slug : slug
         @date = Time.parse(date)
       end
@@ -38,7 +39,15 @@ module Jekyll
       def initialize(tag_name, post, tokens)
         super
         @orig_post = post.strip
-        @post = PostComparer.new(@orig_post)
+        begin
+          @post = PostComparer.new(@orig_post)
+        rescue
+          raise ArgumentError.new <<-eos
+Could not parse name of post "#{@orig_post}" in tag 'post_url'.
+
+Make sure the post exists and the name is correct.
+eos
+        end
       end
 
       def render(context)
diff --git a/lib/jekyll/url.rb b/lib/jekyll/url.rb
index 813b9c8..8cd4724 100644
--- a/lib/jekyll/url.rb
+++ b/lib/jekyll/url.rb
@@ -1,3 +1,5 @@
+require 'uri'
+
 # Public: Methods that generate a URL for a resource such as a Post or a Page.
 #
 # Examples
@@ -22,9 +24,9 @@ module Jekyll
     #                           template. Instead, the given permalink will be
     #                           used as URL.
     def initialize(options)
-      @template = options[:template]
+      @template     = options[:template]
       @placeholders = options[:placeholders] || {}
-      @permalink = options[:permalink]
+      @permalink    = options[:permalink]
 
       if (@template || @permalink).nil?
         raise ArgumentError, "One of :template or :permalink must be supplied."
@@ -44,7 +46,7 @@ module Jekyll
     # Returns the _unsanitizied_ String URL
     def generate_url
       @placeholders.inject(@template) do |result, token|
-        result.gsub(/:#{token.first}/, token.last)
+        result.gsub(/:#{token.first}/, self.class.escape_path(token.last))
       end
     end
 
@@ -65,5 +67,43 @@ module Jekyll
 
       url
     end
+
+    # Escapes a path to be a valid URL path segment
+    #
+    # path - The path to be escaped.
+    #
+    # Examples:
+    #
+    #   URL.escape_path("/a b")
+    #   # => "/a%20b"
+    #
+    # Returns the escaped path.
+    def self.escape_path(path)
+      # Because URI.escape doesn't escape '?', '[' and ']' by defaut,
+      # specify unsafe string (except unreserved, sub-delims, ":", "@" and "/").
+      #
+      # URI path segment is defined in RFC 3986 as follows:
+      #   segment       = *pchar
+      #   pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
+      #   unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
+      #   pct-encoded   = "%" HEXDIG HEXDIG
+      #   sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
+      #                 / "*" / "+" / "," / ";" / "="
+      URI.escape(path, /[^a-zA-Z\d\-._~!$&\'()*+,;=:@\/]/)
+    end
+
+    # Unescapes a URL path segment
+    #
+    # path - The path to be unescaped.
+    #
+    # Examples:
+    #
+    #   URL.unescape_path("/a%20b")
+    #   # => "/a b"
+    #
+    # Returns the unescaped path.
+    def self.unescape_path(path)
+      URI.unescape(path)
+    end
   end
 end
diff --git a/lib/jekyll/utils.rb b/lib/jekyll/utils.rb
new file mode 100644
index 0000000..dc19a3e
--- /dev/null
+++ b/lib/jekyll/utils.rb
@@ -0,0 +1,79 @@
+module Jekyll
+  module Utils
+    class << self
+
+      # Merges a master hash with another hash, recursively.
+      #
+      # master_hash - the "parent" hash whose values will be overridden
+      # other_hash  - the other hash whose values will be persisted after the merge
+      #
+      # This code was lovingly stolen from some random gem:
+      # http://gemjack.com/gems/tartan-0.1.1/classes/Hash.html
+      #
+      # Thanks to whoever made it.
+      def deep_merge_hashes(master_hash, other_hash)
+        target = master_hash.dup
+
+        other_hash.keys.each do |key|
+          if other_hash[key].is_a? Hash and target[key].is_a? Hash
+            target[key] = Utils.deep_merge_hashes(target[key], other_hash[key])
+            next
+          end
+
+          target[key] = other_hash[key]
+        end
+
+        target
+      end
+
+      # Read array from the supplied hash favouring the singular key
+      # and then the plural key, and handling any nil entries.
+      #
+      # hash - the hash to read from
+      # singular_key - the singular key
+      # plural_key - the plural key
+      #
+      # Returns an array
+      def pluralized_array_from_hash(hash, singular_key, plural_key)
+        if hash.has_key?(singular_key)
+          array = [hash[singular_key]] if hash[singular_key]
+        elsif hash.has_key?(plural_key)
+          case hash[plural_key]
+          when String
+            array = hash[plural_key].split
+          when Array
+            array = hash[plural_key].compact
+          end
+        end
+        array || []
+      end
+
+      def transform_keys(hash)
+        result = {}
+        hash.each_key do |key|
+          result[yield(key)] = hash[key]
+        end
+        result
+      end
+
+      # Apply #to_sym to all keys in the hash
+      #
+      # hash - the hash to which to apply this transformation
+      #
+      # Returns a new hash with symbolized keys
+      def symbolize_hash_keys(hash)
+        transform_keys(hash) { |key| key.to_sym rescue key }
+      end
+
+      # Apply #to_s to all keys in the Hash
+      #
+      # hash - the hash to which to apply this transformation
+      #
+      # Returns a new hash with stringified keys
+      def stringify_hash_keys(hash)
+        transform_keys(hash) { |key| key.to_s rescue key }
+      end
+
+    end
+  end
+end
diff --git a/lib/jekyll/version.rb b/lib/jekyll/version.rb
new file mode 100644
index 0000000..18840a5
--- /dev/null
+++ b/lib/jekyll/version.rb
@@ -0,0 +1,3 @@
+module Jekyll
+  VERSION = '2.0.3'
+end
diff --git a/lib/site_template/.gitignore b/lib/site_template/.gitignore
deleted file mode 100644
index c08f9ad..0000000
--- a/lib/site_template/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-_site
\ No newline at end of file
diff --git a/lib/site_template/_config.yml b/lib/site_template/_config.yml
index 85daa77..2c0d737 100644
--- a/lib/site_template/_config.yml
+++ b/lib/site_template/_config.yml
@@ -1,3 +1,10 @@
-name: Your New Jekyll Site
-markdown: redcarpet
-pygments: true
+# Site settings
+title: Your awesome title
+email: your-email at domain.com
+description: "Write an awesome description for your new site here. You can edit this line in _config.yml. It will appear in your document head meta (for Google search results) and in your feed.xml site description."
+baseurl: ""
+url: "http://yourdomain.com"
+
+# Build settings
+markdown: kramdown
+permalink: pretty
diff --git a/lib/site_template/_includes/footer.html b/lib/site_template/_includes/footer.html
new file mode 100644
index 0000000..e908217
--- /dev/null
+++ b/lib/site_template/_includes/footer.html
@@ -0,0 +1,61 @@
+<footer class="site-footer">
+
+  <div class="wrap">
+
+    <h2 class="footer-heading">{{ site.title }}</h2>
+
+    <div class="footer-col-1 column">
+      <ul>
+        <li>{{ site.title }}</li>
+        <li><a href="mailto:{{ site.email }}">{{ site.email }}</a></li>
+      </ul>
+    </div>
+
+    <div class="footer-col-2 column">
+      <ul>
+        <li>
+          <a href="https://github.com/{{ site.username }}">
+            <span class="icon github">
+              <svg version="1.1" class="github-icon-svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+                 viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
+                <path fill-rule="evenodd" clip-rule="evenodd" fill="#C2C2C2" d="M7.999,0.431c-4.285,0-7.76,3.474-7.76,7.761
+                c0,3.428,2.223,6.337,5.307,7.363c0.388,0.071,0.53-0.168,0.53-0.374c0-0.184-0.007-0.672-0.01-1.32
+                c-2.159,0.469-2.614-1.04-2.614-1.04c-0.353-0.896-0.862-1.135-0.862-1.135c-0.705-0.481,0.053-0.472,0.053-0.472
+                c0.779,0.055,1.189,0.8,1.189,0.8c0.692,1.186,1.816,0.843,2.258,0.645c0.071-0.502,0.271-0.843,0.493-1.037
+                C4.86,11.425,3.049,10.76,3.049,7.786c0-0.847,0.302-1.54,0.799-2.082C3.768,5.507,3.501,4.718,3.924,3.65
+                c0,0,0.652-0.209,2.134,0.796C6.677,4.273,7.34,4.187,8,4.184c0.659,0.003,1.323,0.089,1.943,0.261
+                c1.482-1.004,2.132-0.796,2.132-0.796c0.423,1.068,0.157,1.857,0.077,2.054c0.497,0.542,0.798,1.235,0.798,2.082
+                c0,2.981-1.814,3.637-3.543,3.829c0.279,0.24,0.527,0.713,0.527,1.437c0,1.037-0.01,1.874-0.01,2.129
+                c0,0.208,0.14,0.449,0.534,0.373c3.081-1.028,5.302-3.935,5.302-7.362C15.76,3.906,12.285,0.431,7.999,0.431z"/>
+              </svg>
+            </span>
+            <span class="username">{{ site.username }}</span>
+          </a>
+        </li>
+        <li>
+          <a href="https://twitter.com/{{ site.username }}">
+            <span class="icon twitter">
+              <svg version="1.1" class="twitter-icon-svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+                 viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
+                <path fill="#C2C2C2" d="M15.969,3.058c-0.586,0.26-1.217,0.436-1.878,0.515c0.675-0.405,1.194-1.045,1.438-1.809
+                c-0.632,0.375-1.332,0.647-2.076,0.793c-0.596-0.636-1.446-1.033-2.387-1.033c-1.806,0-3.27,1.464-3.27,3.27
+                c0,0.256,0.029,0.506,0.085,0.745C5.163,5.404,2.753,4.102,1.14,2.124C0.859,2.607,0.698,3.168,0.698,3.767
+                c0,1.134,0.577,2.135,1.455,2.722C1.616,6.472,1.112,6.325,0.671,6.08c0,0.014,0,0.027,0,0.041c0,1.584,1.127,2.906,2.623,3.206
+                C3.02,9.402,2.731,9.442,2.433,9.442c-0.211,0-0.416-0.021-0.615-0.059c0.416,1.299,1.624,2.245,3.055,2.271
+                c-1.119,0.877-2.529,1.4-4.061,1.4c-0.264,0-0.524-0.015-0.78-0.046c1.447,0.928,3.166,1.469,5.013,1.469
+                c6.015,0,9.304-4.983,9.304-9.304c0-0.142-0.003-0.283-0.009-0.423C14.976,4.29,15.531,3.714,15.969,3.058z"/>
+              </svg>
+            </span>
+            <span class="username">{{ site.username }}</span>
+          </a>
+        </li>
+      </ul>
+    </div>
+
+    <div class="footer-col-3 column">
+      <p class="text">{{ site.description }}</p>
+    </div>
+
+  </div>
+
+</footer>
diff --git a/lib/site_template/_includes/head.html b/lib/site_template/_includes/head.html
new file mode 100644
index 0000000..c8f1016
--- /dev/null
+++ b/lib/site_template/_includes/head.html
@@ -0,0 +1,12 @@
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <title>{% if page.title %}{{ page.title }}{% else %}{{ site.title }}{% endif %}</title>
+    <meta name="viewport" content="width=device-width">
+    <meta name="description" content="{{ site.description }}">
+    <link rel="canonical" href="{{ page.url | replace:'index.html','' | prepend: site.baseurl | prepend: site.url }}">
+
+    <!-- Custom CSS -->
+    <link rel="stylesheet" href="{{ "/css/main.css" | prepend: site.baseurl }}">
+
+</head>
diff --git a/lib/site_template/_includes/header.html b/lib/site_template/_includes/header.html
new file mode 100644
index 0000000..36ff6cc
--- /dev/null
+++ b/lib/site_template/_includes/header.html
@@ -0,0 +1,28 @@
+<header class="site-header">
+
+  <div class="wrap">
+
+    <a class="site-title" href="{{ site.baseurl }}/">{{ site.title }}</a>
+
+    <nav class="site-nav">
+      <a href="#" class="menu-icon">
+        <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+           viewBox="0 0 18 15" enable-background="new 0 0 18 15" xml:space="preserve">
+          <path fill="#505050" d="M18,1.484c0,0.82-0.665,1.484-1.484,1.484H1.484C0.665,2.969,0,2.304,0,1.484l0,0C0,0.665,0.665,0,1.484,0
+            h15.031C17.335,0,18,0.665,18,1.484L18,1.484z"/>
+          <path fill="#505050" d="M18,7.516C18,8.335,17.335,9,16.516,9H1.484C0.665,9,0,8.335,0,7.516l0,0c0-0.82,0.665-1.484,1.484-1.484
+            h15.031C17.335,6.031,18,6.696,18,7.516L18,7.516z"/>
+          <path fill="#505050" d="M18,13.516C18,14.335,17.335,15,16.516,15H1.484C0.665,15,0,14.335,0,13.516l0,0
+            c0-0.82,0.665-1.484,1.484-1.484h15.031C17.335,12.031,18,12.696,18,13.516L18,13.516z"/>
+        </svg>
+      </a>
+      <div class="trigger">
+        {% for page in site.pages %}
+          <a class="page-link" href="{{ page.url | prepend: site.baseurl }}">{{ page.title }}</a>
+        {% endfor %}
+      </div>
+    </nav>
+
+  </div>
+
+</header>
diff --git a/lib/site_template/_layouts/default.html b/lib/site_template/_layouts/default.html
index 22e7e3f..af41586 100644
--- a/lib/site_template/_layouts/default.html
+++ b/lib/site_template/_layouts/default.html
@@ -1,44 +1,19 @@
 <!DOCTYPE html>
 <html>
-    <head>
-        <meta charset="utf-8">
-        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-        <title>{{ page.title }}</title>
-        <meta name="viewport" content="width=device-width">
 
-        <!-- syntax highlighting CSS -->
-        <link rel="stylesheet" href="/css/syntax.css">
+  {% include head.html %}
 
-        <!-- Custom CSS -->
-        <link rel="stylesheet" href="/css/main.css">
-
-    </head>
     <body>
 
-        <div class="site">
-          <div class="header">
-            <h1 class="title"><a href="/">{{ site.name }}</a></h1>
-            <a class="extra" href="/">home</a>
-          </div>
+    {% include header.html %}
 
-          {{ content }}
+    <div class="page-content">
+      <div class="wrap">
+      {{ content }}
+      </div>
+    </div>
 
-          <div class="footer">
-            <div class="contact">
-              <p>
-                Your Name<br />
-                What You Are<br />
-                you at example.com
-              </p>
-            </div>
-            <div class="contact">
-              <p>
-                <a href="https://github.com/yourusername">github.com/yourusername</a><br />
-                <a href="https://twitter.com/yourusername">twitter.com/yourusername</a><br />
-              </p>
-            </div>
-          </div>
-        </div>
+    {% include footer.html %}
 
     </body>
-</html>
+</html>
\ No newline at end of file
diff --git a/lib/site_template/_layouts/page.html b/lib/site_template/_layouts/page.html
new file mode 100644
index 0000000..59821b1
--- /dev/null
+++ b/lib/site_template/_layouts/page.html
@@ -0,0 +1,14 @@
+---
+layout: default
+---
+<div class="post">
+
+  <header class="post-header">
+    <h1>{{ page.title }}</h1>
+  </header>
+
+  <article class="post-content">
+  {{ content }}
+  </article>
+
+</div>
\ No newline at end of file
diff --git a/lib/site_template/_layouts/post.html b/lib/site_template/_layouts/post.html
index 04e3586..838ad7a 100644
--- a/lib/site_template/_layouts/post.html
+++ b/lib/site_template/_layouts/post.html
@@ -1,9 +1,15 @@
 ---
 layout: default
 ---
-<h2>{{ page.title }}</h2>
-<p class="meta">{{ page.date | date_to_string }}</p>
-
 <div class="post">
-{{ content }}
-</div>
+
+  <header class="post-header">
+    <h1>{{ page.title }}</h1>
+    <p class="meta">{{ page.date | date: "%b %-d, %Y" }}{% if page.author %} • {{ page.author }}{% endif %}{% if page.meta %} • {{ page.meta }}{% endif %}</p>
+  </header>
+
+  <article class="post-content">
+  {{ content }}
+  </article>
+
+</div>
\ No newline at end of file
diff --git a/lib/site_template/_posts/0000-00-00-welcome-to-jekyll.markdown.erb b/lib/site_template/_posts/0000-00-00-welcome-to-jekyll.markdown.erb
index c500b41..bc639fc 100644
--- a/lib/site_template/_posts/0000-00-00-welcome-to-jekyll.markdown.erb
+++ b/lib/site_template/_posts/0000-00-00-welcome-to-jekyll.markdown.erb
@@ -20,5 +20,5 @@ print_hi('Tom')
 
 Check out the [Jekyll docs][jekyll] for more info on how to get the most out of Jekyll. File all bugs/feature requests at [Jekyll's GitHub repo][jekyll-gh].
 
-[jekyll-gh]: https://github.com/mojombo/jekyll
+[jekyll-gh]: https://github.com/jekyll/jekyll
 [jekyll]:    http://jekyllrb.com
diff --git a/lib/site_template/about.md b/lib/site_template/about.md
new file mode 100644
index 0000000..3ed64bb
--- /dev/null
+++ b/lib/site_template/about.md
@@ -0,0 +1,11 @@
+---
+layout: page
+title: About
+permalink: /about/
+---
+
+This is the base Jekyll theme. You can find out more info about customizing your Jekyll theme, as well as basic Jekyll usage documentation at [jekyllrb.com](http://jekyllrb.com/)
+
+You can find the source code for the Jekyll new theme at: [github.com/jglovier/jekyll-new](https://github.com/jglovier/jekyll-new)
+
+You can find the source code for Jekyll at [github.com/jekyll/jekyll](https://github.com/jekyll/jekyll)
diff --git a/lib/site_template/css/main.css b/lib/site_template/css/main.css
old mode 100755
new mode 100644
index 1a2c013..93ab284
--- a/lib/site_template/css/main.css
+++ b/lib/site_template/css/main.css
@@ -1,10 +1,6 @@
-/*****************************************************************************/
-/*
-/* Common
-/*
-/*****************************************************************************/
+/* Base */
+/* ----------------------------------------------------------*/
 
-/* Global Reset */
 * {
   margin: 0;
   padding: 0;
@@ -13,148 +9,397 @@
 html, body { height: 100%; }
 
 body {
-  background-color: #FFF;
-  font: 13.34px Helvetica, Arial, sans-serif;
-  font-size: small;
-  text-align: center;
+  font-family: Helvetica, Arial, sans-serif;
+  font-size: 16px;
+  line-height: 1.5;
+  font-weight: 300;
+  background-color: #fdfdfd;
 }
 
-h1, h2, h3, h4, h5, h6 {
-  font-size: 100%; }
+h1, h2, h3, h4, h5, h6 { font-size: 100%; font-weight: 400; }
 
-h1 { margin-bottom: 1em; }
-p { margin: 1em 0; }
+a         { color: #2a7ae2; text-decoration: none; }
+a:hover   { color: #000; text-decoration: underline; }
+a:visited { color: #205caa; }
 
-a         { color: #00a; }
-a:hover   { color: #000; }
-a:visited { color: #a0a; }
+/* Utility */
 
-/*****************************************************************************/
-/*
-/* Home
-/*
-/*****************************************************************************/
-.posts {
-  list-style-type: none;
-  margin-bottom: 2em;
+.wrap:before,
+.wrap:after { content:""; display:table; }
+.wrap:after { clear: both; }
+.wrap {
+  max-width: 800px;
+  padding: 0 30px;
+  margin: 0 auto;
+  zoom: 1;
 }
 
-.posts li {
-  line-height: 1.75em;
+
+/* Layout Styles */
+/* ----------------------------------------------------------*/
+
+/* Site header */
+
+.site-header {
+  border-top: 5px solid #333;
+  border-bottom: 1px solid #e8e8e8;
+  min-height: 56px;
+  background-color: white;
+}
+
+.site-title,
+.site-title:hover,
+.site-title:visited {
+  display: block;
+  color: #333;
+  font-size: 26px;
+  letter-spacing: -1px;
+  float: left;
+  line-height: 56px;
+  position: relative;
+  z-index: 1;
 }
 
-.posts span {
-  color: #aaa;
-  font-family: Monaco, "Courier New", monospace;
-  font-size: 80%;
+.site-nav {
+  float: right;
+  line-height: 56px;
 }
 
-/*****************************************************************************/
-/*
-/* Site
-/*
-/*****************************************************************************/
+.site-nav .menu-icon { display: none; }
 
-.site {
-  font-size: 115%;
-  text-align: justify;
-  width: 42em;
-  margin: 3em auto 2em;
-  line-height: 1.5em;
+.site-nav .page-link {
+  margin-left: 20px;
+  color: #727272;
+  letter-spacing: -.5px;
 }
 
-.header a {
-  font-weight: bold;
-  text-decoration: none;
+/* Site footer */
+
+.site-footer {
+  border-top: 1px solid #e8e8e8;
+  padding: 30px 0;
 }
 
-.title {
-  display: inline-block;
-  margin-bottom: 2em;
+.footer-heading {
+  font-size: 18px;
+  font-weight: 300;
+  letter-spacing: -.5px;
+  margin-bottom: 15px;
 }
 
-.title a {
-  color: #a00;
+.site-footer .column { float: left; margin-bottom: 15px; }
+
+.footer-col-1 {
+  width: 270px; /*fallback*/
+  width: -webkit-calc(35% - 10px);
+  width: -moz-calc(35% - 10px);
+  width: -o-calc(35% - 10px);
+  width: calc(35% - 10px);
+  margin-right: 10px
+}
+.footer-col-2 {
+  width: 175px; /*fallback*/
+  width: -webkit-calc(23.125% - 10px);
+  width: -moz-calc(23.125% - 10px);
+  width: -o-calc(23.125% - 10px);
+  width: calc(23.125% - 10px);
+  margin-right: 10px
+}
+.footer-col-3 {
+  width: 335px; /*fallback*/
+  width: -webkit-calc(41.875%);
+  width: -moz-calc(41.875%);
+  width: -o-calc(41.875%);
+  width: calc(41.875%);
 }
 
-.title a:hover {
-  color: #000;
+.site-footer ul { list-style: none; }
+
+.site-footer li,
+.site-footer p {
+  font-size: 15px;
+  letter-spacing: -.3px;
+  color: #828282;
 }
 
-.header a.extra {
-  color: #aaa;
-  margin-left: 1em;
+.github-icon-svg,
+.twitter-icon-svg {
+  display: inline-block;
+  width: 16px;
+  height: 16px;
+  position: relative;
+  top: 3px;
 }
 
-.header a.extra:hover {
-  color: #000;
+
+/* Page Content styles */
+/* ----------------------------------------------------------*/
+
+.page-content {
+  padding: 30px 0;
+  background-color: #fff;
 }
 
-.meta {
-  color: #aaa;
+
+/* Home styles */
+/* ----------------------------------------------------------*/
+
+.home h1 { margin-bottom: 25px; }
+
+.posts { list-style-type: none; }
+
+.posts li { margin-bottom: 30px; }
+
+.posts .post-link {
+  font-size: 24px;
+  letter-spacing: -1px;
+  line-height: 1;
 }
 
-.footer {
-  font-size: 80%;
-  color: #666;
-  border-top: 4px solid #eee;
-  margin-top: 2em;
-  overflow: hidden;
+.posts .post-date {
+  display: block;
+  font-size: 15px;
+  color: #818181;
 }
 
-.footer .contact {
-  float: left;
-  margin-right: 3em;
+
+/* Post styles */
+/* ----------------------------------------------------------*/
+
+.post-header { margin: 10px 0 30px; }
+
+.post-header h1 {
+  font-size: 42px;
+  letter-spacing: -1.75px;
+  line-height: 1;
+  font-weight: 300;
 }
 
-.footer .contact a {
-  color: #8085C1;
+.post-header .meta {
+  font-size: 15px;
+  color: #818181;
+  margin-top: 5px;
 }
 
-.footer .rss {
-  margin-top: 1.1em;
-  margin-right: -.2em;
-  float: right;
+.post-content { margin: 0 0 30px; }
+
+.post-content > * { margin: 20px 0; }
+
+
+.post-content h1,
+.post-content h2,
+.post-content h3,
+.post-content h4,
+.post-content h5,
+.post-content h6 {
+  line-height: 1;
+  font-weight: 300;
+  margin: 40px 0 20px;
 }
 
-.footer .rss img {
-  border: 0;
+.post-content h2 {
+  font-size: 32px;
+  letter-spacing: -1.25px;
 }
 
-/*****************************************************************************/
-/*
-/* Posts
-/*
-/*****************************************************************************/
+.post-content h3 {
+  font-size: 26px;
+  letter-spacing: -1px;
+}
 
-/* standard */
-.post pre {
-  border: 1px solid #ddd;
-  background-color: #eef;
-  padding: 0 .4em;
+.post-content h4 {
+  font-size: 20px;
+  letter-spacing: -1px;
 }
 
-.post ul, .post ol {
-  margin-left: 1.35em;
+.post-content blockquote {
+  border-left: 4px solid #e8e8e8;
+  padding-left: 20px;
+  font-size: 18px;
+  opacity: .6;
+  letter-spacing: -1px;
+  font-style: italic;
+  margin: 30px 0;
 }
 
+.post-content ul,
+.post-content ol { padding-left: 20px; }
+
+.post pre,
 .post code {
-  border: 1px solid #ddd;
+  border: 1px solid #d5d5e9;
   background-color: #eef;
-  padding: 0 .2em;
+  padding: 8px 12px;
+  -webkit-border-radius: 3px;
+  -moz-border-radius: 3px;
+  border-radius: 3px;
+  font-size: 15px;
 }
 
-.post pre code {
-  border: none;
-}
+.post code { padding: 1px 5px; }
+
+.post ul,
+.post ol { margin-left: 1.35em; }
+
+.post pre code { border: none; }
 
 /* terminal */
 .post pre.terminal {
   border: 1px solid #000;
   background-color: #333;
   color: #FFF;
+  -webkit-border-radius: 3px;
+  -moz-border-radius: 3px;
+  border-radius: 3px;
 }
 
-.post pre.terminal code {
-  background-color: #333;
+.post pre.terminal code { background-color: #333; }
+
+/* Syntax highlighting styles */
+/* ----------------------------------------------------------*/
+
+.highlight  { background: #ffffff; }
+.highlight .c { color: #999988; font-style: italic } /* Comment */
+.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
+.highlight .k { font-weight: bold } /* Keyword */
+.highlight .o { font-weight: bold } /* Operator */
+.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */
+.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */
+.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */
+.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */
+.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
+.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */
+.highlight .ge { font-style: italic } /* Generic.Emph */
+.highlight .gr { color: #aa0000 } /* Generic.Error */
+.highlight .gh { color: #999999 } /* Generic.Heading */
+.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
+.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */
+.highlight .go { color: #888888 } /* Generic.Output */
+.highlight .gp { color: #555555 } /* Generic.Prompt */
+.highlight .gs { font-weight: bold } /* Generic.Strong */
+.highlight .gu { color: #aaaaaa } /* Generic.Subheading */
+.highlight .gt { color: #aa0000 } /* Generic.Traceback */
+.highlight .kc { font-weight: bold } /* Keyword.Constant */
+.highlight .kd { font-weight: bold } /* Keyword.Declaration */
+.highlight .kp { font-weight: bold } /* Keyword.Pseudo */
+.highlight .kr { font-weight: bold } /* Keyword.Reserved */
+.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */
+.highlight .m { color: #009999 } /* Literal.Number */
+.highlight .s { color: #d14 } /* Literal.String */
+.highlight .na { color: #008080 } /* Name.Attribute */
+.highlight .nb { color: #0086B3 } /* Name.Builtin */
+.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */
+.highlight .no { color: #008080 } /* Name.Constant */
+.highlight .ni { color: #800080 } /* Name.Entity */
+.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */
+.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */
+.highlight .nn { color: #555555 } /* Name.Namespace */
+.highlight .nt { color: #000080 } /* Name.Tag */
+.highlight .nv { color: #008080 } /* Name.Variable */
+.highlight .ow { font-weight: bold } /* Operator.Word */
+.highlight .w { color: #bbbbbb } /* Text.Whitespace */
+.highlight .mf { color: #009999 } /* Literal.Number.Float */
+.highlight .mh { color: #009999 } /* Literal.Number.Hex */
+.highlight .mi { color: #009999 } /* Literal.Number.Integer */
+.highlight .mo { color: #009999 } /* Literal.Number.Oct */
+.highlight .sb { color: #d14 } /* Literal.String.Backtick */
+.highlight .sc { color: #d14 } /* Literal.String.Char */
+.highlight .sd { color: #d14 } /* Literal.String.Doc */
+.highlight .s2 { color: #d14 } /* Literal.String.Double */
+.highlight .se { color: #d14 } /* Literal.String.Escape */
+.highlight .sh { color: #d14 } /* Literal.String.Heredoc */
+.highlight .si { color: #d14 } /* Literal.String.Interpol */
+.highlight .sx { color: #d14 } /* Literal.String.Other */
+.highlight .sr { color: #009926 } /* Literal.String.Regex */
+.highlight .s1 { color: #d14 } /* Literal.String.Single */
+.highlight .ss { color: #990073 } /* Literal.String.Symbol */
+.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */
+.highlight .vc { color: #008080 } /* Name.Variable.Class */
+.highlight .vg { color: #008080 } /* Name.Variable.Global */
+.highlight .vi { color: #008080 } /* Name.Variable.Instance */
+.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */
+
+
+/* media queries */
+/* ----------------------------------------------------------*/
+
+
+ at media screen and (max-width: 750px) {
+
+  .footer-col-1 { width: 50%; }
+
+  .footer-col-2 {
+    width: 45%; /*fallback*/
+    width: -webkit-calc(50% - 10px);
+    width: -moz-calc(50% - 10px);
+    width: -o-calc(50% - 10px);
+    width: calc(50% - 10px);
+    margin-right: 0;
+  }
+
+  .site-footer .column.footer-col-3 {
+    width: auto;
+    float: none;
+    clear: both;
+  }
+
 }
+
+ at media screen and (max-width: 600px) {
+
+  .wrap { padding: 0 12px; }
+
+  .site-nav {
+    position: fixed;
+    z-index: 10;
+    top: 14px; right: 8px;
+    background-color: white;
+    -webkit-border-radius: 5px;
+    -moz-border-radius: 5px;
+    border-radius: 5px;
+    border: 1px solid #e8e8e8;
+  }
+
+  .site-nav .menu-icon {
+    display: block;
+    font-size: 24px;
+    color: #505050;
+    float: right;
+    width: 36px;
+    text-align: center;
+    line-height: 36px;
+  }
+
+  .site-nav .menu-icon svg { width: 18px; height: 16px; }
+
+  .site-nav .trigger {
+    clear: both;
+    margin-bottom: 5px;
+    display: none;
+  }
+
+  .site-nav:hover .trigger { display: block; }
+
+  .site-nav .page-link {
+    display: block;
+    text-align: right;
+    line-height: 1.25;
+    padding: 5px 10px;
+    margin: 0;
+  }
+
+  .post-header h1 { font-size: 36px; }
+  .post-content h2 { font-size: 28px; }
+  .post-content h3 { font-size: 22px; }
+  .post-content h4 { font-size: 18px; }
+  .post-content blockquote { padding-left: 10px; }
+  .post-content ul,
+  .post-content ol { padding-left: 10px; }
+
+  .site-footer .column {
+    float: none;
+    clear: both;
+    width: auto;
+    margin: 0 0 15px; }
+
+}
\ No newline at end of file
diff --git a/lib/site_template/css/syntax.css b/lib/site_template/css/syntax.css
deleted file mode 100644
index 2774b76..0000000
--- a/lib/site_template/css/syntax.css
+++ /dev/null
@@ -1,60 +0,0 @@
-.highlight  { background: #ffffff; }
-.highlight .c { color: #999988; font-style: italic } /* Comment */
-.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
-.highlight .k { font-weight: bold } /* Keyword */
-.highlight .o { font-weight: bold } /* Operator */
-.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */
-.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */
-.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */
-.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */
-.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
-.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */
-.highlight .ge { font-style: italic } /* Generic.Emph */
-.highlight .gr { color: #aa0000 } /* Generic.Error */
-.highlight .gh { color: #999999 } /* Generic.Heading */
-.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
-.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */
-.highlight .go { color: #888888 } /* Generic.Output */
-.highlight .gp { color: #555555 } /* Generic.Prompt */
-.highlight .gs { font-weight: bold } /* Generic.Strong */
-.highlight .gu { color: #aaaaaa } /* Generic.Subheading */
-.highlight .gt { color: #aa0000 } /* Generic.Traceback */
-.highlight .kc { font-weight: bold } /* Keyword.Constant */
-.highlight .kd { font-weight: bold } /* Keyword.Declaration */
-.highlight .kp { font-weight: bold } /* Keyword.Pseudo */
-.highlight .kr { font-weight: bold } /* Keyword.Reserved */
-.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */
-.highlight .m { color: #009999 } /* Literal.Number */
-.highlight .s { color: #d14 } /* Literal.String */
-.highlight .na { color: #008080 } /* Name.Attribute */
-.highlight .nb { color: #0086B3 } /* Name.Builtin */
-.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */
-.highlight .no { color: #008080 } /* Name.Constant */
-.highlight .ni { color: #800080 } /* Name.Entity */
-.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */
-.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */
-.highlight .nn { color: #555555 } /* Name.Namespace */
-.highlight .nt { color: #000080 } /* Name.Tag */
-.highlight .nv { color: #008080 } /* Name.Variable */
-.highlight .ow { font-weight: bold } /* Operator.Word */
-.highlight .w { color: #bbbbbb } /* Text.Whitespace */
-.highlight .mf { color: #009999 } /* Literal.Number.Float */
-.highlight .mh { color: #009999 } /* Literal.Number.Hex */
-.highlight .mi { color: #009999 } /* Literal.Number.Integer */
-.highlight .mo { color: #009999 } /* Literal.Number.Oct */
-.highlight .sb { color: #d14 } /* Literal.String.Backtick */
-.highlight .sc { color: #d14 } /* Literal.String.Char */
-.highlight .sd { color: #d14 } /* Literal.String.Doc */
-.highlight .s2 { color: #d14 } /* Literal.String.Double */
-.highlight .se { color: #d14 } /* Literal.String.Escape */
-.highlight .sh { color: #d14 } /* Literal.String.Heredoc */
-.highlight .si { color: #d14 } /* Literal.String.Interpol */
-.highlight .sx { color: #d14 } /* Literal.String.Other */
-.highlight .sr { color: #009926 } /* Literal.String.Regex */
-.highlight .s1 { color: #d14 } /* Literal.String.Single */
-.highlight .ss { color: #990073 } /* Literal.String.Symbol */
-.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */
-.highlight .vc { color: #008080 } /* Name.Variable.Class */
-.highlight .vg { color: #008080 } /* Name.Variable.Global */
-.highlight .vi { color: #008080 } /* Name.Variable.Instance */
-.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */
diff --git a/lib/site_template/feed.xml b/lib/site_template/feed.xml
new file mode 100644
index 0000000..234d1c0
--- /dev/null
+++ b/lib/site_template/feed.xml
@@ -0,0 +1,21 @@
+---
+layout: none
+---
+<?xml version="1.0" encoding="UTF-8"?>
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
+  <channel>
+    <title>{{ site.title | xml_escape }}</title>
+    <description>{{ site.description | xml_escape }}</description>
+    <link>{{ site.url }}{{ site.baseurl }}/</link>
+    <atom:link href="{{ "/feed.xml" | prepend: site.baseurl | prepend: site.url }}" rel="self" type="application/rss+xml" />
+    {% for post in site.posts limit:10 %}
+      <item>
+        <title>{{ post.title | xml_escape }}</title>
+        <description>{{ post.content | xml_escape }}</description>
+        <pubDate>{{ post.date | date: "%a, %d %b %Y %H:%M:%S %z" }}</pubDate>
+        <link>{{ post.url | prepend: site.baseurl | prepend: site.url }}</link>
+        <guid isPermaLink="true">{{ post.url | prepend: site.baseurl | prepend: site.url }}</guid>
+      </item>
+    {% endfor %}
+  </channel>
+</rss>
diff --git a/lib/site_template/index.html b/lib/site_template/index.html
index c726819..a9f5097 100644
--- a/lib/site_template/index.html
+++ b/lib/site_template/index.html
@@ -1,13 +1,20 @@
 ---
 layout: default
-title: Your New Jekyll Site
 ---
 
-<div id="home">
-  <h1>Blog Posts</h1>
+<div class="home">
+
+  <h1>Posts</h1>
+
   <ul class="posts">
     {% for post in site.posts %}
-      <li><span>{{ post.date | date_to_string }}</span> » <a href="{{ post.url }}">{{ post.title }}</a></li>
+      <li>
+        <span class="post-date">{{ post.date | date: "%b %-d, %Y" }}</span>
+        <a class="post-link" href="{{ post.url | prepend: site.baseurl }}">{{ post.title }}</a>
+      </li>
     {% endfor %}
   </ul>
-</div>
\ No newline at end of file
+
+  <p class="rss-subscribe">subscribe <a href="{{ "/feed.xml" | prepend: site.baseurl }}">via RSS</a></p>
+
+</div>
diff --git a/metadata.yml b/metadata.yml
index dbbc1bd..5b543c1 100644
--- a/metadata.yml
+++ b/metadata.yml
@@ -1,14 +1,14 @@
 --- !ruby/object:Gem::Specification
 name: jekyll
 version: !ruby/object:Gem::Version
-  version: 1.5.1
+  version: 2.0.3
 platform: ruby
 authors:
 - Tom Preston-Werner
 autorequire: 
 bindir: bin
 cert_chain: []
-date: 2014-03-28 00:00:00.000000000 Z
+date: 2014-05-09 00:00:00.000000000 Z
 dependencies:
 - !ruby/object:Gem::Dependency
   name: liquid
@@ -44,28 +44,28 @@ dependencies:
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: '1.3'
+        version: '2.5'
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: '1.3'
+        version: '2.5'
 - !ruby/object:Gem::Dependency
-  name: maruku
+  name: kramdown
   requirement: !ruby/object:Gem::Requirement
     requirements:
-    - - '='
+    - - "~>"
       - !ruby/object:Gem::Version
-        version: 0.7.0
+        version: '1.3'
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
-    - - '='
+    - - "~>"
       - !ruby/object:Gem::Version
-        version: 0.7.0
+        version: '1.3'
 - !ruby/object:Gem::Dependency
   name: pygments.rb
   requirement: !ruby/object:Gem::Requirement
@@ -81,19 +81,19 @@ dependencies:
       - !ruby/object:Gem::Version
         version: 0.5.0
 - !ruby/object:Gem::Dependency
-  name: commander
+  name: mercenary
   requirement: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: 4.1.3
+        version: 0.3.3
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: 4.1.3
+        version: 0.3.3
 - !ruby/object:Gem::Dependency
   name: safe_yaml
   requirement: !ruby/object:Gem::Requirement
@@ -128,14 +128,14 @@ dependencies:
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: 2.3.0
+        version: '3.1'
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: 2.3.0
+        version: '3.1'
 - !ruby/object:Gem::Dependency
   name: toml
   requirement: !ruby/object:Gem::Requirement
@@ -151,6 +151,34 @@ dependencies:
       - !ruby/object:Gem::Version
         version: 0.1.0
 - !ruby/object:Gem::Dependency
+  name: jekyll-coffeescript
+  requirement: !ruby/object:Gem::Requirement
+    requirements:
+    - - "~>"
+      - !ruby/object:Gem::Version
+        version: '1.0'
+  type: :runtime
+  prerelease: false
+  version_requirements: !ruby/object:Gem::Requirement
+    requirements:
+    - - "~>"
+      - !ruby/object:Gem::Version
+        version: '1.0'
+- !ruby/object:Gem::Dependency
+  name: jekyll-sass-converter
+  requirement: !ruby/object:Gem::Requirement
+    requirements:
+    - - "~>"
+      - !ruby/object:Gem::Version
+        version: '1.0'
+  type: :runtime
+  prerelease: false
+  version_requirements: !ruby/object:Gem::Requirement
+    requirements:
+    - - "~>"
+      - !ruby/object:Gem::Version
+        version: '1.0'
+- !ruby/object:Gem::Dependency
   name: rake
   requirement: !ruby/object:Gem::Requirement
     requirements:
@@ -198,14 +226,14 @@ dependencies:
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: 3.3.2
+        version: '3.5'
   type: :development
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: 3.3.2
+        version: '3.5'
 - !ruby/object:Gem::Dependency
   name: rr
   requirement: !ruby/object:Gem::Requirement
@@ -249,19 +277,19 @@ dependencies:
       - !ruby/object:Gem::Version
         version: '4.2'
 - !ruby/object:Gem::Dependency
-  name: kramdown
+  name: maruku
   requirement: !ruby/object:Gem::Requirement
     requirements:
-    - - "~>"
+    - - '='
       - !ruby/object:Gem::Version
-        version: '1.2'
+        version: 0.7.0
   type: :development
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
-    - - "~>"
+    - - '='
       - !ruby/object:Gem::Version
-        version: '1.2'
+        version: 0.7.0
 - !ruby/object:Gem::Dependency
   name: rdiscount
   requirement: !ruby/object:Gem::Requirement
@@ -374,6 +402,34 @@ dependencies:
     - - ">="
       - !ruby/object:Gem::Version
         version: '0'
+- !ruby/object:Gem::Dependency
+  name: jekyll_test_plugin_malicious
+  requirement: !ruby/object:Gem::Requirement
+    requirements:
+    - - ">="
+      - !ruby/object:Gem::Version
+        version: '0'
+  type: :development
+  prerelease: false
+  version_requirements: !ruby/object:Gem::Requirement
+    requirements:
+    - - ">="
+      - !ruby/object:Gem::Version
+        version: '0'
+- !ruby/object:Gem::Dependency
+  name: rouge
+  requirement: !ruby/object:Gem::Requirement
+    requirements:
+    - - "~>"
+      - !ruby/object:Gem::Version
+        version: '1.3'
+  type: :development
+  prerelease: false
+  version_requirements: !ruby/object:Gem::Requirement
+    requirements:
+    - - "~>"
+      - !ruby/object:Gem::Version
+        version: '1.3'
 description: Jekyll is a simple, blog aware, static site generator.
 email: tom at mojombo.com
 executables:
@@ -383,6 +439,8 @@ extra_rdoc_files:
 - README.markdown
 - LICENSE
 files:
+- ".gitignore"
+- ".travis.yml"
 - CONTRIBUTING.markdown
 - Gemfile
 - History.markdown
@@ -391,10 +449,14 @@ files:
 - Rakefile
 - bin/jekyll
 - cucumber.yml
+- docs/jp/CONTRIBUTING.jp.markdown
+- docs/jp/README.jp.markdown
+- features/collections.feature
 - features/create_sites.feature
 - features/data.feature
 - features/drafts.feature
 - features/embed_filters.feature
+- features/frontmatter_defaults.feature
 - features/include_tag.feature
 - features/markdown.feature
 - features/pagination.feature
@@ -408,8 +470,10 @@ files:
 - jekyll.gemspec
 - lib/jekyll.rb
 - lib/jekyll/cleaner.rb
+- lib/jekyll/collection.rb
 - lib/jekyll/command.rb
 - lib/jekyll/commands/build.rb
+- lib/jekyll/commands/docs.rb
 - lib/jekyll/commands/doctor.rb
 - lib/jekyll/commands/new.rb
 - lib/jekyll/commands/serve.rb
@@ -423,21 +487,27 @@ files:
 - lib/jekyll/converters/markdown/redcarpet_parser.rb
 - lib/jekyll/converters/textile.rb
 - lib/jekyll/convertible.rb
-- lib/jekyll/core_ext.rb
 - lib/jekyll/deprecator.rb
+- lib/jekyll/document.rb
 - lib/jekyll/draft.rb
 - lib/jekyll/entry_filter.rb
 - lib/jekyll/errors.rb
 - lib/jekyll/excerpt.rb
 - lib/jekyll/filters.rb
+- lib/jekyll/frontmatter_defaults.rb
 - lib/jekyll/generator.rb
 - lib/jekyll/generators/pagination.rb
 - lib/jekyll/layout.rb
+- lib/jekyll/layout_reader.rb
+- lib/jekyll/liquid_extensions.rb
 - lib/jekyll/mime.types
 - lib/jekyll/page.rb
 - lib/jekyll/plugin.rb
+- lib/jekyll/plugin_manager.rb
 - lib/jekyll/post.rb
+- lib/jekyll/publisher.rb
 - lib/jekyll/related_posts.rb
+- lib/jekyll/renderer.rb
 - lib/jekyll/site.rb
 - lib/jekyll/static_file.rb
 - lib/jekyll/stevenson.rb
@@ -446,20 +516,39 @@ files:
 - lib/jekyll/tags/include.rb
 - lib/jekyll/tags/post_url.rb
 - lib/jekyll/url.rb
+- lib/jekyll/utils.rb
+- lib/jekyll/version.rb
 - lib/site_template/.gitignore
 - lib/site_template/_config.yml
+- lib/site_template/_includes/footer.html
+- lib/site_template/_includes/head.html
+- lib/site_template/_includes/header.html
 - lib/site_template/_layouts/default.html
+- lib/site_template/_layouts/page.html
 - lib/site_template/_layouts/post.html
 - lib/site_template/_posts/0000-00-00-welcome-to-jekyll.markdown.erb
+- lib/site_template/about.md
 - lib/site_template/css/main.css
-- lib/site_template/css/syntax.css
+- lib/site_template/feed.xml
 - lib/site_template/index.html
 - script/bootstrap
+- script/branding
+- script/cibuild
+- script/console
+- script/rebund
+- script/test
 - site/.gitignore
 - site/CNAME
 - site/README
 - site/_config.yml
+- site/_data/docs.yml
 - site/_includes/analytics.html
+- site/_includes/anchor_links.html
+- site/_includes/css/font-awesome.css
+- site/_includes/css/gridism.css
+- site/_includes/css/normalize.css
+- site/_includes/css/pygments.css
+- site/_includes/css/style.css
 - site/_includes/docs_contents.html
 - site/_includes/docs_contents_mobile.html
 - site/_includes/docs_option.html
@@ -490,14 +579,16 @@ files:
 - site/_posts/2013-11-04-jekyll-1-3-0-released.markdown
 - site/_posts/2013-11-26-jekyll-1-3-1-released.markdown
 - site/_posts/2013-12-07-jekyll-1-4-0-released.markdown
+- site/_posts/2013-12-09-jekyll-1-4-1-released.markdown
 - site/_posts/2013-12-16-jekyll-1-4-2-released.markdown
 - site/_posts/2014-01-13-jekyll-1-4-3-released.markdown
 - site/_posts/2014-03-24-jekyll-1-5-0-released.markdown
 - site/_posts/2014-03-27-jekyll-1-5-1-released.markdown
-- site/css/gridism.css
-- site/css/normalize.css
-- site/css/pygments.css
-- site/css/style.css
+- site/_posts/2014-05-06-jekyll-turns-2-0-0.markdown
+- site/_posts/2014-05-08-jekyll-2-0-3-released.markdown
+- site/css/screen.css
+- site/docs/assets.md
+- site/docs/collections.md
 - site/docs/configuration.md
 - site/docs/contributing.md
 - site/docs/datafiles.md
@@ -525,18 +616,24 @@ files:
 - site/docs/upgrading.md
 - site/docs/usage.md
 - site/docs/variables.md
-- site/favicon.png
+- site/docs/windows.md
+- site/favicon.ico
 - site/feed.xml
+- site/fonts/FontAwesome.otf
+- site/fonts/fontawesome-webfont.eot
+- site/fonts/fontawesome-webfont.svg
+- site/fonts/fontawesome-webfont.ttf
+- site/fonts/fontawesome-webfont.woff
 - site/freenode.txt
 - site/img/article-footer.png
 - site/img/footer-arrow.png
 - site/img/footer-logo.png
 - site/img/logo-2x.png
+- site/img/logo-rss.png
 - site/img/octojekyll.png
-- site/img/tube.png
-- site/img/tube1x.png
 - site/index.html
-- site/js/modernizr-2.5.3.min.js
+- site/js/html5shiv.min.js
+- site/js/respond.min.js
 - site/news/index.html
 - site/news/releases/index.html
 - test/fixtures/broken_front_matter1.erb
@@ -545,17 +642,27 @@ files:
 - test/fixtures/exploit_front_matter.erb
 - test/fixtures/front_matter.erb
 - test/helper.rb
+- test/source/+/%# +.md
 - test/source/+/foo.md
 - test/source/.htaccess
 - test/source/_config.dev.toml
 - test/source/_data/languages.yml
 - test/source/_data/members.yaml
 - test/source/_data/products.yml
+- test/source/_drafts/draft-properties.text
+- test/source/_includes/include.html
 - test/source/_includes/params.html
 - test/source/_includes/sig.markdown
 - test/source/_layouts/default.html
 - test/source/_layouts/post/simple.html
 - test/source/_layouts/simple.html
+- test/source/_methods/_do_not_read_me.md
+- test/source/_methods/configuration.md
+- test/source/_methods/sanitized_path.md
+- test/source/_methods/site/_dont_include_me_either.md
+- test/source/_methods/site/generate.md
+- test/source/_methods/site/initialize.md
+- test/source/_methods/um_hi.md
 - test/source/_plugins/dummy.rb
 - test/source/_posts/2008-02-02-not-published.textile
 - test/source/_posts/2008-02-02-published.textile
@@ -590,33 +697,49 @@ files:
 - test/source/_posts/2013-05-10-number-category.textile
 - test/source/_posts/2013-07-22-post-excerpt-with-layout.markdown
 - test/source/_posts/2013-08-01-mkdn-extension.mkdn
+- test/source/_posts/2013-12-17-include-variable-filters.markdown
+- test/source/_posts/2013-12-20-properties.text
 - test/source/_posts/2014-01-06-permalink-traversal.md
+- test/source/_posts/2014-03-03-yaml-with-dots.md
+- test/source/_posts/2014-03-22-escape-+ %20[].markdown
 - test/source/_posts/es/2008-11-21-nested.textile
+- test/source/_sass/_grid.scss
 - test/source/about.html
 - test/source/category/_posts/2008-9-23-categories.textile
 - test/source/contacts.html
 - test/source/contacts/bar.html
 - test/source/contacts/index.html
+- test/source/css/main.scss
 - test/source/css/screen.css
 - test/source/deal.with.dots.html
 - test/source/exploit.md
 - test/source/foo/_posts/bar/2008-12-12-topical-post.textile
 - test/source/index.html
+- test/source/js/coffeescript.coffee
+- test/source/pgp.key
 - test/source/products.yml
+- test/source/properties.html
 - test/source/sitemap.xml
+- test/source/static_files.html
 - test/source/symlink-test/symlinked-file
+- test/source/unpublished.html
 - test/source/win/_posts/2009-05-24-yaml-linebreak.markdown
 - test/source/z_category/_posts/2008-9-23-categories.textile
 - test/suite.rb
+- test/test_coffeescript.rb
+- test/test_collections.rb
 - test/test_command.rb
 - test/test_configuration.rb
 - test/test_convertible.rb
-- test/test_core_ext.rb
+- test/test_document.rb
+- test/test_draft.rb
 - test/test_entry_filter.rb
 - test/test_excerpt.rb
 - test/test_filters.rb
 - test/test_generated_site.rb
 - test/test_kramdown.rb
+- test/test_layout_reader.rb
+- test/test_liquid_extensions.rb
 - test/test_new_command.rb
 - test/test_page.rb
 - test/test_pager.rb
@@ -626,10 +749,12 @@ files:
 - test/test_redcarpet.rb
 - test/test_redcloth.rb
 - test/test_related_posts.rb
+- test/test_sass.rb
 - test/test_site.rb
 - test/test_tags.rb
 - test/test_url.rb
-homepage: http://github.com/mojombo/jekyll
+- test/test_utils.rb
+homepage: http://github.com/jekyll/jekyll
 licenses:
 - MIT
 metadata: {}
@@ -642,28 +767,139 @@ required_ruby_version: !ruby/object:Gem::Requirement
   requirements:
   - - ">="
     - !ruby/object:Gem::Version
-      version: '0'
+      version: 1.9.3
 required_rubygems_version: !ruby/object:Gem::Requirement
   requirements:
   - - ">="
     - !ruby/object:Gem::Version
       version: '0'
 requirements: []
-rubyforge_project: jekyll
+rubyforge_project: 
 rubygems_version: 2.2.2
 signing_key: 
 specification_version: 2
 summary: A simple, blog aware, static site generator.
 test_files:
+- features/collections.feature
+- features/create_sites.feature
+- features/data.feature
+- features/drafts.feature
+- features/embed_filters.feature
+- features/frontmatter_defaults.feature
+- features/include_tag.feature
+- features/markdown.feature
+- features/pagination.feature
+- features/permalinks.feature
+- features/post_data.feature
+- features/post_excerpts.feature
+- features/site_configuration.feature
+- features/site_data.feature
+- features/step_definitions/jekyll_steps.rb
+- features/support/env.rb
+- test/fixtures/broken_front_matter1.erb
+- test/fixtures/broken_front_matter2.erb
+- test/fixtures/broken_front_matter3.erb
+- test/fixtures/exploit_front_matter.erb
+- test/fixtures/front_matter.erb
+- test/helper.rb
+- test/source/+/%# +.md
+- test/source/+/foo.md
+- test/source/.htaccess
+- test/source/_config.dev.toml
+- test/source/_data/languages.yml
+- test/source/_data/members.yaml
+- test/source/_data/products.yml
+- test/source/_drafts/draft-properties.text
+- test/source/_includes/include.html
+- test/source/_includes/params.html
+- test/source/_includes/sig.markdown
+- test/source/_layouts/default.html
+- test/source/_layouts/post/simple.html
+- test/source/_layouts/simple.html
+- test/source/_methods/_do_not_read_me.md
+- test/source/_methods/configuration.md
+- test/source/_methods/sanitized_path.md
+- test/source/_methods/site/_dont_include_me_either.md
+- test/source/_methods/site/generate.md
+- test/source/_methods/site/initialize.md
+- test/source/_methods/um_hi.md
+- test/source/_plugins/dummy.rb
+- test/source/_posts/2008-02-02-not-published.textile
+- test/source/_posts/2008-02-02-published.textile
+- test/source/_posts/2008-10-18-foo-bar.textile
+- test/source/_posts/2008-11-21-complex.textile
+- test/source/_posts/2008-12-03-permalinked-post.textile
+- test/source/_posts/2008-12-13-include.markdown
+- test/source/_posts/2009-01-27-array-categories.textile
+- test/source/_posts/2009-01-27-categories.textile
+- test/source/_posts/2009-01-27-category.textile
+- test/source/_posts/2009-01-27-empty-categories.textile
+- test/source/_posts/2009-01-27-empty-category.textile
+- test/source/_posts/2009-03-12-hash-#1.markdown
+- test/source/_posts/2009-05-18-empty-tag.textile
+- test/source/_posts/2009-05-18-empty-tags.textile
+- test/source/_posts/2009-05-18-tag.textile
+- test/source/_posts/2009-05-18-tags.textile
+- test/source/_posts/2009-06-22-empty-yaml.textile
+- test/source/_posts/2009-06-22-no-yaml.textile
+- test/source/_posts/2010-01-08-triple-dash.markdown
+- test/source/_posts/2010-01-09-date-override.textile
+- test/source/_posts/2010-01-09-time-override.textile
+- test/source/_posts/2010-01-09-timezone-override.textile
+- test/source/_posts/2010-01-16-override-data.textile
+- test/source/_posts/2011-04-12-md-extension.md
+- test/source/_posts/2011-04-12-text-extension.text
+- test/source/_posts/2013-01-02-post-excerpt.markdown
+- test/source/_posts/2013-01-12-nil-layout.textile
+- test/source/_posts/2013-01-12-no-layout.textile
+- test/source/_posts/2013-03-19-not-a-post.markdown/.gitkeep
+- test/source/_posts/2013-04-11-custom-excerpt.markdown
+- test/source/_posts/2013-05-10-number-category.textile
+- test/source/_posts/2013-07-22-post-excerpt-with-layout.markdown
+- test/source/_posts/2013-08-01-mkdn-extension.mkdn
+- test/source/_posts/2013-12-17-include-variable-filters.markdown
+- test/source/_posts/2013-12-20-properties.text
+- test/source/_posts/2014-01-06-permalink-traversal.md
+- test/source/_posts/2014-03-03-yaml-with-dots.md
+- test/source/_posts/2014-03-22-escape-+ %20[].markdown
+- test/source/_posts/es/2008-11-21-nested.textile
+- test/source/_sass/_grid.scss
+- test/source/about.html
+- test/source/category/_posts/2008-9-23-categories.textile
+- test/source/contacts.html
+- test/source/contacts/bar.html
+- test/source/contacts/index.html
+- test/source/css/main.scss
+- test/source/css/screen.css
+- test/source/deal.with.dots.html
+- test/source/exploit.md
+- test/source/foo/_posts/bar/2008-12-12-topical-post.textile
+- test/source/index.html
+- test/source/js/coffeescript.coffee
+- test/source/pgp.key
+- test/source/products.yml
+- test/source/properties.html
+- test/source/sitemap.xml
+- test/source/static_files.html
+- test/source/symlink-test/symlinked-file
+- test/source/unpublished.html
+- test/source/win/_posts/2009-05-24-yaml-linebreak.markdown
+- test/source/z_category/_posts/2008-9-23-categories.textile
+- test/suite.rb
+- test/test_coffeescript.rb
+- test/test_collections.rb
 - test/test_command.rb
 - test/test_configuration.rb
 - test/test_convertible.rb
-- test/test_core_ext.rb
+- test/test_document.rb
+- test/test_draft.rb
 - test/test_entry_filter.rb
 - test/test_excerpt.rb
 - test/test_filters.rb
 - test/test_generated_site.rb
 - test/test_kramdown.rb
+- test/test_layout_reader.rb
+- test/test_liquid_extensions.rb
 - test/test_new_command.rb
 - test/test_page.rb
 - test/test_pager.rb
@@ -673,6 +909,8 @@ test_files:
 - test/test_redcarpet.rb
 - test/test_redcloth.rb
 - test/test_related_posts.rb
+- test/test_sass.rb
 - test/test_site.rb
 - test/test_tags.rb
 - test/test_url.rb
+- test/test_utils.rb
diff --git a/script/bootstrap b/script/bootstrap
index da4e3ef..097f3e2 100755
--- a/script/bootstrap
+++ b/script/bootstrap
@@ -1,2 +1,4 @@
 #!/bin/sh
+
+script/branding
 bundle install
diff --git a/script/branding b/script/branding
new file mode 100755
index 0000000..2df6c67
--- /dev/null
+++ b/script/branding
@@ -0,0 +1,11 @@
+#! /bin/bash
+
+echo " ---------------------------------------------------------- "
+echo "          _   ______   _  __ __     __  _        _          "
+echo "         | | |  ____| | |/ / \ \   / / | |      | |         "
+echo "         | | | |__    | ' /   \ \_/ /  | |      | |         "
+echo "     _   | | |  __|   |  <     \   /   | |      | |         "
+echo "    | |__| | | |____  | . \     | |    | |____  | |____     "
+echo "     \____/  |______| |_|\_\    |_|    |______| |______|    "
+echo "                                                            "
+echo " ---------------------------------------------------------- "
diff --git a/script/cibuild b/script/cibuild
new file mode 100755
index 0000000..9e9102b
--- /dev/null
+++ b/script/cibuild
@@ -0,0 +1,4 @@
+#! /bin/bash
+
+script/branding
+bundle exec rake
diff --git a/script/console b/script/console
new file mode 100755
index 0000000..34ad6e8
--- /dev/null
+++ b/script/console
@@ -0,0 +1,38 @@
+#!/usr/bin/env ruby
+
+require 'pry'
+$LOAD_PATH.unshift File.join(File.dirname(__FILE__), *%w{ .. lib })
+require 'jekyll'
+
+TEST_DIR = File.expand_path(File.join(File.dirname(__FILE__), *%w{ .. test }))
+
+def fixture_site(overrides = {})
+  Jekyll::Site.new(site_configuration(overrides))
+end
+
+def build_configs(overrides, base_hash = Jekyll::Configuration::DEFAULTS)
+  Jekyll::Utils.deep_merge_hashes(base_hash, overrides)
+end
+
+def site_configuration(overrides = {})
+  build_configs({
+    "source"      => source_dir,
+    "destination" => dest_dir
+  }, build_configs(overrides))
+end
+
+def dest_dir(*subdirs)
+  test_dir('dest', *subdirs)
+end
+
+def source_dir(*subdirs)
+  test_dir('source', *subdirs)
+end
+
+def test_dir(*subdirs)
+  File.join(TEST_DIR, *subdirs)
+end
+
+module Jekyll
+  binding.pry
+end
diff --git a/script/rebund b/script/rebund
new file mode 100755
index 0000000..2e8d3b1
--- /dev/null
+++ b/script/rebund
@@ -0,0 +1,140 @@
+#!/bin/bash
+#
+# rebund(1)
+#
+# Author: Julien Letessier
+# Homepage: https://github.com/mezis/rebund
+# License:
+#
+# Copyright (c) 2014 HouseTrip Ltd
+#
+# MIT License
+#
+# 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.
+
+
+# Configuration
+: ${REBUND_CREDENTIALS:=user:secret}
+: ${REBUND_ENDPOINT=http://keyfile-production.herokuapp.com}
+: ${REBUND_TARBALL:=bundle.tbz}
+: ${REBUND_BUNDLE_DIR:=vendor/bundle}
+
+
+
+log() {
+  echo "rebund: $*" > /dev/stderr
+}
+
+die() {
+  echo "fatal: $*" > /dev/stderr
+  exit 1
+}
+
+success() {
+  log "$*"
+  exit 0
+}
+
+on_error() {
+  die 'unknown error.'
+}
+
+get_ruby_version() {
+  bundle exec ruby --version
+}
+
+get_gemfile() {
+  bundle exec sh -c 'echo $BUNDLE_GEMFILE'
+}
+
+calculate_hash() {
+  (get_ruby_version ; cat $(get_gemfile)) | openssl sha256 | sed -e 's/.* //'
+}
+
+build_tarball() {
+  test -e $REBUND_BUNDLE_DIR || die "cannot find bundle directory in ${REBUND_BUNDLE_DIR}"
+  test -e $REBUND_TARBALL && success 'bundle already uploaded'
+  tar jcf $REBUND_TARBALL $REBUND_BUNDLE_DIR
+}
+
+upload_tarball() {
+  curl --fail \
+    -F filedata=@${REBUND_TARBALL} \
+    --digest --user $REBUND_CREDENTIALS \
+    ${REBUND_ENDPOINT}/$(calculate_hash) \
+  || success "could not upload bundle"
+}
+
+expand_tarball() {
+  test -e $REBUND_TARBALL || success "no tarball"
+  tar jxf $REBUND_TARBALL
+}
+
+download_tarball() {
+  curl --fail \
+    --location \
+    -o ${REBUND_TARBALL} \
+    --digest --user $REBUND_CREDENTIALS \
+    ${REBUND_ENDPOINT}/$(calculate_hash) \
+    || success "could not download bundle"
+}
+
+rebund_upload() {
+  build_tarball
+  upload_tarball
+}
+
+rebund_download() {
+  download_tarball
+  expand_tarball
+}
+
+rebund_usage() {
+  success "usage: $0 [-v] [upload|download]"
+}
+
+# cath errors
+trap on_error ERR
+
+# inherit the ERR trap in subprocesses
+set -E
+
+while test $# -gt 0 ; do
+  case $1 in
+    -v)
+      set -x
+      ;;
+    upload)
+      rebund_upload
+      exit 0
+      ;;
+    download)
+      rebund_download
+      exit 0
+      ;;
+    *)
+      rebund_usage
+      exit 1
+      ;;
+  esac
+  shift
+done
+
+rebund_usage
diff --git a/script/test b/script/test
new file mode 100755
index 0000000..78e6866
--- /dev/null
+++ b/script/test
@@ -0,0 +1,11 @@
+#! /bin/bash
+
+set -x
+
+if [ -z "$1" ]; then
+  TEST_FILES="test/test*.rb"
+else
+  TEST_FILES="$@"
+fi
+
+/usr/bin/env bundle exec ruby -I"lib:test" -r rake -r rake/rake_test_loader ${TEST_FILES}
diff --git a/site/.gitignore b/site/.gitignore
deleted file mode 100644
index 79bd74f..0000000
--- a/site/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-_site/
-*.swp
-pkg/
-test/
diff --git a/site/_config.yml b/site/_config.yml
index c71e4d3..44c2772 100644
--- a/site/_config.yml
+++ b/site/_config.yml
@@ -1,6 +1,9 @@
-pygments: true
+markdown: kramdown
+highlighter: pygments
 relative_permalinks: false
 gauges_id: 503c5af6613f5d0f19000027
 permalink: /news/:year/:month/:day/:title/
 excerpt_separator: noifniof3nioaniof3nioafafinoafnoif
-repository: https://github.com/mojombo/jekyll
+repository: https://github.com/jekyll/jekyll
+help_url: https://github.com/jekyll/jekyll-help
+google_analytics_id: UA-50755011-1
diff --git a/site/_data/docs.yml b/site/_data/docs.yml
new file mode 100644
index 0000000..7d0a83f
--- /dev/null
+++ b/site/_data/docs.yml
@@ -0,0 +1,45 @@
+- title: Getting Started
+  docs:
+  - home
+  - quickstart
+  - installation
+  - usage
+  - structure
+  - configuration
+
+- title: Your Content
+  docs:
+  - frontmatter
+  - posts
+  - drafts
+  - pages
+  - variables
+  - collections
+  - datafiles
+  - assets
+  - migrations
+
+- title: Customization
+  docs:
+  - templates
+  - permalinks
+  - pagination
+  - plugins
+  - extras
+
+- title: Deployment
+  docs:
+  - github-pages
+  - deployment-methods
+
+- title: Miscellaneous
+  docs:
+  - troubleshooting
+  - sites
+  - resources
+  - upgrading
+
+- title: Meta
+  docs:
+  - contributing
+  - history
diff --git a/site/_includes/analytics.html b/site/_includes/analytics.html
index bbdc351..4ef9ea0 100644
--- a/site/_includes/analytics.html
+++ b/site/_includes/analytics.html
@@ -1,6 +1,6 @@
 {% if site.gauges_id %}
   <!-- Gauges (http://gaug.es/) -->
-  <script type="text/javascript">
+  <script>
     var _gauges = _gauges || [];
     (function() {
       var t   = document.createElement('script');
@@ -17,16 +17,14 @@
 
 {% if site.google_analytics_id %}
   <!-- Google Analytics (http://google.com/analytics) -->
-  <script type="text/javascript">
-    var _gaq = _gaq || [];
-    _gaq.push(['_setAccount', '{{ site.google_analytics_id }}']);
-    _gaq.push(['_setDomainName', '{{ site.url }}']); // Multiple sub-domains
-    _gaq.push(['_setAllowLinker', true]); // Multiple TLDs
-    _gaq.push(['_trackPageview']);
-    (function() {
-      var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
-      ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
-      var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
-    })();
+  <script>
+    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+    (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+    m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+    })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+
+    ga('create', '{{ site.google_analytics_id }}', 'jekyllrb.com');
+    ga('send', 'pageview');
+
   </script>
 {% endif %}
diff --git a/site/_includes/anchor_links.html b/site/_includes/anchor_links.html
new file mode 100644
index 0000000..e980207
--- /dev/null
+++ b/site/_includes/anchor_links.html
@@ -0,0 +1,27 @@
+<script type="text/javascript" charset="utf-8">
+var anchorForId = function(id){
+
+  var anchor = document.createElement("a");
+  anchor.className = "header-link";
+  anchor.href      = "#" + id;
+  anchor.innerHTML = '<i class="fa fa-link"></i>';
+  return anchor;
+}
+var linkifyAnchors = function(level, containingElement) {
+
+  var headers = containingElement.getElementsByTagName("h"+level);
+  for(var h=0; h<headers.length; h++){
+    var header = headers[h];
+
+    if( typeof(header.id) !== "undefined" && header.id !== "" )
+      header.appendChild(anchorForId(header.id));
+  }
+};
+document.onreadystatechange = function(){
+  if(this.readyState === "complete"){
+    var contentBlock = document.getElementsByClassName("docs")[0] || document.getElementsByClassName("news")[0]
+    for(var level=1; level<=6; level++)
+      linkifyAnchors(level, contentBlock);
+  }
+}
+</script>
diff --git a/site/_includes/css/font-awesome.css b/site/_includes/css/font-awesome.css
new file mode 100644
index 0000000..f864c27
--- /dev/null
+++ b/site/_includes/css/font-awesome.css
@@ -0,0 +1,44 @@
+/*!
+ *  Font Awesome 4.0.3 by @davegandy - http://fontawesome.io - @fontawesome
+ *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */
+ at font-face {
+  font-family: 'FontAwesome';
+  src: url('../fonts/fontawesome-webfont.eot?v=4.0.3');
+  src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.0.3') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff?v=4.0.3') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.0.3') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.0.3#fontawesomeregular') format('svg');
+  font-weight: normal;
+  font-style: normal;
+}
+.fa {
+  display: inline-block;
+  font-family: FontAwesome;
+  font-style: normal;
+  font-weight: normal;
+  line-height: 1;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+.fa-link:before {
+  content: "\f0c1";
+}
+/*
+ * This code is courtesy Ben Balter, modified by Parker Moore for jekyllrb.com
+ * http://ben.balter.com/2014/03/13/pages-anchor-links/
+ */
+.header-link {
+  position: relative;
+  left: 0.5em;
+  opacity: 0;
+  font-size: 0.8em;
+
+  -webkit-transition: opacity 0.2s ease-in-out 0.1s;
+  -moz-transition: opacity 0.2s ease-in-out 0.1s;
+  -ms-transition: opacity 0.2s ease-in-out 0.1s;
+}
+h2:hover .header-link,
+h3:hover .header-link,
+h4:hover .header-link,
+h5:hover .header-link,
+h6:hover .header-link {
+  opacity: 1;
+}
diff --git a/site/css/gridism.css b/site/_includes/css/gridism.css
similarity index 100%
rename from site/css/gridism.css
rename to site/_includes/css/gridism.css
diff --git a/site/css/pygments.css b/site/_includes/css/pygments.css
similarity index 96%
rename from site/css/pygments.css
rename to site/_includes/css/pygments.css
index 408a44f..5fe679f 100644
--- a/site/css/pygments.css
+++ b/site/_includes/css/pygments.css
@@ -68,3 +68,5 @@
 .highlight .vg { color: #98fb98} /* Name.Variable.Global */
 .highlight .vi { color: #98fb98} /* Name.Variable.Instance */
 .highlight .il { color: #ffffff} /* Literal.Number.Integer.Long */
+
+.highlight .bash .nv {-webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; -o-user-select: none; user-select: none; }
diff --git a/site/_includes/css/style.css b/site/_includes/css/style.css
new file mode 100644
index 0000000..e65c906
--- /dev/null
+++ b/site/_includes/css/style.css
@@ -0,0 +1,1040 @@
+/* Base */
+
+* {
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+}
+
+body {
+  font: 300 21px Lato, 'Helvetica Neue', Helvetica, Arial, sans-serif;
+  color: #ddd;
+  background-color: #333;
+  border-top: 5px solid #fc0;
+  -webkit-box-shadow: inset 0 3px 30px rgba(0,0,0,.3);
+  -moz-box-shadow: inset 0 3px 30px rgba(0,0,0,.3);
+  box-shadow: inset 0 3px 30px rgba(0,0,0,.3);
+  text-shadow: 0 1px 3px rgba(0,0,0,.5);
+}
+
+.clear {
+  display: block;
+}
+
+.clear:after {
+  content: " ";
+  display: block;
+  height: 0;
+  clear: both;
+  visibility: hidden;
+}
+
+/* Sections */
+
+header, section, footer {
+  float: left;
+  width: 100%;
+  clear: both;
+}
+
+/* Header */
+
+header h1, header nav {
+  display: inline-block;
+}
+
+header h1 span {
+  display: none;
+}
+
+nav ul {
+  padding: 0;
+  margin: 0;
+}
+
+nav li {
+  display: inline-block;
+}
+
+.main-nav {
+  margin-top: 52px;
+}
+
+.main-nav li {
+  margin-right: 10px;
+}
+
+.main-nav li a {
+  -webkit-border-radius: 5px;
+  -moz-border-radius: 5px;
+  border-radius: 5px;
+  font-weight: 900;
+  font-size: 14px;
+  padding: 0.5em 1em;
+  text-shadow: none;
+  text-transform: uppercase;
+  -webkit-transition: all .25s;
+  -moz-transition: all .25s;
+  -o-transition: all .25s;
+  transition: all .25s;
+}
+
+.main-nav li a:hover {
+  background-color: #252525;
+  -webkit-box-shadow: inset 0 1px 3px rgba(0,0,0,.5), 0 1px 0 rgba(255,255,255,.1);
+  -moz-box-shadow: inset 0 1px 3px rgba(0,0,0,.5), 0 1px 0 rgba(255,255,255,.1);
+  box-shadow: inset 0 1px 3px rgba(0,0,0,.5), 0 1px 0 rgba(255,255,255,.1);
+  text-shadow: 0 1px 3px rgba(0,0,0,.5);
+}
+
+.main-nav li.current a {
+  background-color: #fc0;
+  color: #222;
+  -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.5), 0 1px 5px rgba(0,0,0,.5);
+  -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.5), 0 1px 5px rgba(0,0,0,.5);
+  box-shadow: inset 0 1px 0 rgba(255,255,255,.5), 0 1px 5px rgba(0,0,0,.5);
+  text-shadow: 0 1px 0 rgba(255,255,255,.3);
+}
+
+.mobile-nav ul {
+  overflow: hidden;
+  width: 100%;
+  display: table;
+}
+
+.mobile-nav a {
+  float: left;
+  width: 100%;
+  background-color: #333;
+  color: #fc0;
+  text-align: center;
+  text-transform: uppercase;
+  font-size: 14px;
+  font-weight: 900;
+  padding: 5px;
+  -webkit-border-radius: 5px;
+  -moz-border-radius: 5px;
+  border-radius: 5px;
+}
+
+.mobile-nav .current a {
+  background-color: #fc0;
+  color: #222;
+  -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.5), 0 1px 5px rgba(0,0,0,.5);
+  -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.5), 0 1px 5px rgba(0,0,0,.5);
+  box-shadow: inset 0 1px 0 rgba(255,255,255,.5), 0 1px 5px rgba(0,0,0,.5);
+  text-shadow: 0 1px 0 rgba(255,255,255,.3);
+}
+
+.mobile-nav li {
+  display: table-cell;
+  width: 20%;
+  padding: 8px 2px;
+}
+
+ at media (max-width: 768px) {
+  .main-nav ul {
+    text-align: right;
+  }
+}
+ at media (max-width: 830px) {
+  .main-nav .show-on-mobiles {
+    display: inline;
+  }
+  .main-nav .hide-on-mobiles {
+    display: none;
+  }
+}
+
+/* Footer */
+
+footer {
+  background-color: #222;
+  font-size: 16px;
+  padding-bottom: 5px;
+  color: #888;
+  margin-top: 40px;
+}
+
+footer a {
+  color: #fff;
+}
+
+footer .align-right p, footer img {
+  display: inline-block;
+}
+
+footer img {
+  position: relative;
+  top: 8px;
+  margin-left: 5px;
+  opacity: .8;
+  padding: 1px;
+  -webkit-transition: opacity .2s;
+  -moz-transition: opacity .2s;
+  -o-transition: opacity .2s;
+  transition: opacity .2s;
+}
+
+footer a:hover img {
+  opacity: 1;
+}
+
+ at media (max-width: 568px) {
+  footer .one-third p {
+    margin-bottom: 0;
+  }
+  footer .two-thirds p {
+    margin-top: -20px;
+  }
+}
+
+/* Intro */
+
+.intro .unit {
+  padding: 10px 0 40px;
+}
+
+.intro p {
+  font-size: 1.75em;
+  line-height: 1em;
+  margin: 0;
+}
+
+ at media (min-width: 569px) {
+  .intro p {
+    font-size: 3.2em;
+  }
+}
+
+/* Quickstart */
+
+.quickstart {
+  background-color: #3F1F1F;
+  color: #fff;
+  margin: 60px 0;
+  -webkit-box-shadow: inset 0 3px 10px rgba(0,0,0,.4);
+  -moz-box-shadow: inset 0 3px 10px rgba(0,0,0,.4);
+  box-shadow: inset 0 3px 10px rgba(0,0,0,.4);
+}
+
+.quickstart .content {
+  padding: 0;
+}
+
+.quickstart h4 {
+  font-size: 24px;
+  line-height: 24px;
+  margin-top: 20px;
+  text-shadow: 0 1px 3px rgba(0,0,0,.8);
+}
+
+.quickstart .code {
+  font-size: 12px;
+  display: block;
+  margin: 0 0 -30px;
+}
+
+ at media (min-width: 768px) {
+  .quickstart .code {
+    font-size: 18px;
+    margin: -30px 0;
+    float: right;
+  }
+  .quickstart h4 {
+    margin: 50px 0 0;
+    text-align: center;
+  }
+}
+
+/* Code */
+
+.quickstart .code {
+  display: block;
+  padding: 0;
+  font-family: Menlo, Consolas, "Courier New", Courier, "Liberation Mono", monospace;
+  line-height: 1.3em;
+}
+
+.quickstart .code .title {
+  display: block;
+  text-align: center;
+  margin: 0 20px;
+  padding: 5px 0;
+  -webkit-border-radius: 5px 5px 0 0;
+  -moz-border-radius: 5px 5px 0 0;
+  border-radius: 5px 5px 0 0;
+  -webkit-box-shadow: 0 3px 10px rgba(0,0,0,.5);
+  -moz-box-shadow: 0 3px 10px rgba(0,0,0,.5);
+  box-shadow: 0 3px 10px rgba(0,0,0,.5);
+  font: 400 16px/24px 'Helvetica Neue', Helvetica, Arial, sans-serif;
+  color: #444;
+  text-shadow: 0 1px 0 rgba(255,255,255,.5);
+  background-color: #f7f7f7;
+  background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Y3ZjdmNyIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjclIiBzdG [...]
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f7f7f7), color-stop(7%, #cfcfcf), to(#aaaaaa));
+  background-image: -webkit-linear-gradient(top, #f7f7f7 0%, #cfcfcf 7%, #aaaaaa 100%);
+  background-image: -moz-linear-gradient(top, #f7f7f7 0%, #cfcfcf 7%, #aaaaaa 100%);
+  background-image: -o-linear-gradient(top, #f7f7f7 0%, #cfcfcf 7%, #aaaaaa 100%);
+  background-image: linear-gradient(top, #f7f7f7 0%,#cfcfcf 7%,#aaaaaa 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f7f7f7', endColorstr='#aaaaaa',GradientType=0 );
+  border-bottom: 1px solid #111;
+}
+
+.quickstart .code .shell {
+  padding: 20px;
+  text-shadow: none;
+  margin: 0 20px;
+  background-color: #3d3d3d;
+  -webkit-border-radius: 0 0 5px 5px;
+  -moz-border-radius: 0 0 5px 5px;
+  border-radius: 0 0 5px 5px;
+  -webkit-box-shadow: 0 5px 30px rgba(0,0,0,.3);
+  -moz-box-shadow: 0 5px 30px rgba(0,0,0,.3);
+  box-shadow: 0 5px 30px rgba(0,0,0,.3);
+}
+
+.quickstart .code .line {
+  display: block;
+  margin: 0;
+  padding: 0;
+}
+
+.quickstart .code .line span {
+  display: inline-block;
+}
+
+.quickstart .code .path {
+  color: #87ceeb;
+  -webkit-user-select: none;  /* Chrome all / Safari all */
+  -moz-user-select: none;     /* Firefox all */
+  -ms-user-select: none;      /* IE 10+ */
+  -o-user-select: none;
+  user-select: none;
+}
+
+.quickstart .code .prompt {
+  color: #cd5c5c;
+  -webkit-user-select: none;  /* Chrome all / Safari all */
+  -moz-user-select: none;     /* Firefox all */
+  -ms-user-select: none;      /* IE 10+ */
+  -o-user-select: none;
+  user-select: none;
+}
+
+.quickstart .code .command {
+  color: #f0e68c;
+}
+
+.quickstart .code .output {
+  color: #888;
+}
+
+/* Free Hosting */
+
+.free-hosting .pane {
+  background-color: #444;
+  -webkit-border-radius: 10px;
+  -moz-border-radius: 10px;
+  border-radius: 10px;
+  text-shadow: none;
+  position: relative;
+  padding: 0 20px 30px;
+}
+
+.free-hosting img {
+  margin: -30px 0 0;
+  width: 180px;
+  height: 150px;
+}
+
+.free-hosting h2 {
+  font-size: 28px;
+}
+
+.free-hosting p,
+.free-hosting a {
+  font-size: 16px;
+}
+
+.free-hosting p {
+  margin: .75em 0;
+}
+
+ at media (min-width: 768px) {
+  .free-hosting img {
+    float: left;
+    margin: -20px -30px -30px -50px;
+    width: 300px;
+    height: 251px;
+  }
+  .free-hosting .pane-content {
+    margin-top: 35px;
+    padding-right: 30px;
+  }
+  .free-hosting p,
+  .free-hosting a {
+    font-size: 18px;
+  }
+  .free-hosting .pane:after {
+    content: " ";
+    float: right;
+    background: url(../img/footer-arrow.png) top left no-repeat;
+    width: 73px;
+    height: 186px;
+    position: absolute;
+    right: 0;
+    bottom: -30px;
+  }
+}
+
+/* Article - Used for both docs and news */
+
+
+article {
+  background-color: #444;
+  -webkit-border-radius: 10px;
+  -moz-border-radius: 10px;
+  border-radius: 10px;
+  padding: 20px;
+  margin: 0 10px;
+  -webkit-box-shadow: 0 3px 10px rgba(0,0,0,.1);
+  -moz-box-shadow: 0 3px 10px rgba(0,0,0,.1);
+  box-shadow: 0 3px 10px rgba(0,0,0,.1);
+  font-size: 16px;
+}
+
+ at media (max-width: 480px) {
+  article ul {
+    padding-left: 20px;
+  }
+}
+
+ at media (max-width: 568px) {
+  article {
+    margin: 0;
+  }
+}
+
+ at media (min-width: 768px) {
+  article {
+    padding: 40px 40px 30px;
+    font-size: 21px;
+  }
+}
+
+/* Right-side nav - used by both docs and news */
+
+aside {
+  padding-top: 30px;
+}
+
+aside h4 {
+  text-transform: uppercase;
+  font-size: 14px;
+  font-weight: 700;
+  padding: 0 0 10px 30px;
+  margin-left: -30px;
+  display: inline-block;
+  border-bottom: 1px solid #c00;
+}
+
+aside ul {
+  padding-left: 0;
+}
+
+aside ul:first-child {
+  margin-top: 0;
+}
+
+aside li {
+  list-style-type: none;
+}
+
+aside li a {
+  font-size: 16px;
+  position: relative
+}
+
+aside li.current a:before {
+  content: "";
+  border-color: transparent transparent transparent #444;
+  border-style: solid;
+  border-width: 10px;
+  width: 0;
+  height: 0;
+  position: absolute;
+  top: 0;
+  left: -30px;
+}
+
+/* Documentation */
+
+.docs article {
+  min-height: 800px;
+}
+
+.docs .content {
+  padding: 0;
+}
+
+.section-nav {
+  text-align: center;
+  padding-top: 40px;
+  position: relative;
+  background: url(../img/article-footer.png) top center no-repeat;
+  margin: 40px -20px 10px;
+}
+
+.section-nav > div {
+  width: 49.5%;
+}
+
+.section-nav a, .section-nav span {
+  color: #fff;
+  font-size: 16px;
+  text-transform: uppercase;
+  font-weight: 700;
+  padding: 8px 12px 10px;
+  -webkit-border-radius: 5px;
+  -moz-border-radius: 5px;
+  border-radius: 5px;
+  /*border: 1px solid #333;*/
+  -webkit-box-shadow: 0 1px 3px rgba(0,0,0,.3), inset 0 1px 1px rgba(255,255,255,.5);
+  -moz-box-shadow: 0 1px 3px rgba(0,0,0,.3), inset 0 1px 1px rgba(255,255,255,.5);
+  box-shadow: 0 1px 3px rgba(0,0,0,.3), inset 0 1px 1px rgba(255,255,255,.5);
+  background-color: #777;
+}
+
+.section-nav a:hover {
+  color: #fff;
+  background-color: #888;
+}
+
+.section-nav .next, .section-nav .prev {
+  position: relative;
+}
+
+.section-nav .next:after, .section-nav .prev:before {
+  font-size: 36px;
+  color: #222;
+  font-weight: 900;
+  text-shadow: 0 1px 0 rgba(255,255,255,.4);
+  position: absolute;
+  top: -7px;
+}
+
+.section-nav .next:after {
+  content: "›";
+  right: 10px;
+}
+
+.section-nav .prev:before {
+  content: "‹";
+  left: 10px;
+}
+
+.section-nav .prev, .section-nav .prev:hover {
+  /*float: left;*/
+  padding-left: 30px;
+}
+
+.section-nav .next, .section-nav .next:hover {
+  /*float: right;*/
+  padding-right: 30px;
+}
+
+.section-nav .disabled {
+  opacity: .5;
+  /*filter: alpha*/
+  cursor: default;
+}
+
+.docs-nav-mobile select {
+  color: #000;
+  width: 100%;
+}
+
+/* News */
+
+article h2:first-child {
+  margin-top: 0;
+}
+
+.post-category,
+.post-meta {
+  display: inline-block;
+  vertical-align: middle;
+  font-size: .8em;
+}
+
+.post-category {
+  display: inline-block;
+  margin-left: -30px;
+  padding: 6px 10px 8px;
+  padding-left: 50px;
+  -webkit-border-radius: 0 5px 5px 0;
+  -moz-border-radius: 0 5px 5px 0;
+  border-radius: 0 5px 5px 0;
+  position: relative;
+  -webkit-box-shadow: 0 1px 5px rgba(0, 0, 0, .3), inset 0 1px 0 rgba(255,255,255,.2), inset 0 -1px 0 rgba(0,0,0,.3);
+  -moz-box-shadow: 0 1px 5px rgba(0, 0, 0, .3), inset 0 1px 0 rgba(255,255,255,.2), inset 0 -1px 0 rgba(0,0,0,.3);
+  box-shadow: 0 1px 5px rgba(0, 0, 0, .3), inset 0 1px 0 rgba(255,255,255,.2), inset 0 -1px 0 rgba(0,0,0,.3);
+  background-color: #9e2812;
+  background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzllMjgxMiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIH [...]
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#9e2812), to(#6f0d0d));
+  background-image: -webkit-linear-gradient(top, #9e2812 0%, #6f0d0d 100%);
+  background-image: -moz-linear-gradient(top, #9e2812 0%, #6f0d0d 100%);
+  background-image: -o-linear-gradient(top, #9e2812 0%, #6f0d0d 100%);
+  background-image: linear-gradient(to bottom, #9e2812 0%,#6f0d0d 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#9e2812', endColorstr='#6f0d0d',GradientType=0 );
+}
+
+.label {
+  float: left;
+  text-transform: uppercase;
+  font-weight: 700;
+  text-shadow: 0 -1px 0 rgba(0,0,0,.5);
+}
+
+ at media (max-width: 568px) {
+  .post-category {
+    padding-left: 30px;
+  }
+}
+
+ at media (min-width: 768px) {
+  .post-category {
+    margin-left: -50px;
+  }
+}
+
+.post-category:before {
+  content: "";
+  position: absolute;
+  top: -10px;
+  left: 0;
+  border-color: transparent #6f0d0d #6f0d0d transparent;
+  border-style: solid;
+  border-width: 5px;
+  width: 0;
+  height: 0;
+}
+
+.avatar {
+  -webkit-border-radius: 3px;
+  -moz-border-radius: 3px;
+  border-radius: 3px;
+  display: inline-block;
+  vertical-align: middle;
+}
+
+.post-meta {
+  padding: 5px 0;
+  color: #aaa;
+  font-weight: 600;
+  text-shadow: 0 -1px 0 #000;
+}
+
+.post-date,
+.post-author {
+  margin-left: 10px;
+}
+
+.news article + article {
+  margin-top: -10px;
+  -webkit-border-radius: 0 0 10px 10px;
+  -moz-border-radius: 0 0 10px 10px;
+  border-radius: 0 0 10px 10px;
+  border-top: 1px solid #555;
+  -webkit-box-shadow: 0 -1px 0 #2f2f2f;
+  -moz-box-shadow: 0 -1px 0 #2f2f2f;
+  box-shadow: 0 -1px 0 #2f2f2f;
+}
+
+/* Code Highlighting */
+
+
+pre, code {
+  white-space: pre;
+  display: inline-block;
+  margin: 0;
+  font: 14px/1.8em Menlo, Consolas, "Courier New", Courier, "Liberation Mono", monospace;
+  padding: 0 0.5em;
+}
+
+ at media (min-width: 768px) {
+  pre, code {
+    font-size: 16px;
+  }
+}
+
+.highlight, p > pre, p > code, p > nobr > code, li > code, h5 > code, .note > code {
+  background-color: #333;
+  color: #fff;
+  -webkit-border-radius: 5px;
+  -moz-border-radius: 5px;
+  border-radius: 5px;
+  -webkit-box-shadow: inset 0 1px 10px rgba(0,0,0,.3),
+    0 1px 0 rgba(255,255,255,.1),
+    0 -1px 0 rgba(0,0,0,.5);
+  -moz-box-shadow: inset 0 1px 10px rgba(0,0,0,.3),
+    0 1px 0 rgba(255,255,255,.1),
+    0 -1px 0 rgba(0,0,0,.5);
+  box-shadow: inset 0 1px 10px rgba(0,0,0,.3),
+    0 1px 0 rgba(255,255,255,.1),
+    0 -1px 0 rgba(0,0,0,.5);
+}
+
+.note code {
+  background-color: #333;
+  background-color: rgba(0,0,0,0.2);
+  margin-left: 2.5px;
+  margin-right: 2.5px;
+  font-size: 0.8em;
+}
+
+.highlight {
+  padding: 10px 0;
+  width: 100%;
+  overflow: auto;
+}
+
+/* HTML Elements */
+
+h1, h2, h3, h4, h5, h6 {
+  margin: 0;
+}
+
+a {
+  color: #fc0;
+  text-decoration: none;
+  -webkit-transition: all .25s;
+  -moz-transition: all .25s;
+  -o-transition: all .25s;
+  transition: all .25s;
+}
+
+a:hover {
+  color: #f90;
+}
+
+strong {
+  font-weight: 700;
+}
+
+p {
+  line-height: 1.5em;
+}
+
+.left { float: left; }
+.right { float: right; }
+.align-right { text-align: right; }
+.align-left { text-align: left; }
+.align-center { text-align: center; }
+
+/* Article HTML */
+
+article h2,
+article h3,
+article h4,
+article h5,
+article h6 {
+  margin: 1em 0;
+}
+
+article h4 {
+  color: #fff;
+}
+
+h5, h6 {
+  font-size: 1em;
+  font-style: italic;
+}
+
+article ul li p {
+  margin: 0;
+}
+
+article ul li, article ol li {
+  line-height: 1.5em;
+  margin-bottom: 0.5em;
+}
+
+article ul li blockquote {
+  margin: 10px 0;
+}
+
+blockquote {
+  border-left: 2px solid #777;
+  padding-left: 20px;
+  font-style: italic;
+  font-size: 18px;
+  font-weight: 500;
+}
+
+
+/* Tables */
+
+table {
+  width: 100%;
+  background-color: #555;
+  margin: .5em 0;
+  -webkit-border-radius: 5px;
+  -moz-border-radius: 5px;
+  border-radius: 5px;
+  -webkit-box-shadow: 0 1px 3px rgba(0,0,0,.3);
+  -moz-box-shadow: 0 1px 3px rgba(0,0,0,.3);
+  box-shadow: 0 1px 3px rgba(0,0,0,.3);
+}
+
+thead {
+  -webkit-border-top-left-radius: 5px;
+  -moz-border-radius-topleft: 5px;
+  border-top-left-radius: 5px;
+  -webkit-border-top-right-radius: 5px;
+  -moz-border-radius-topright: 5px;
+  border-top-right-radius: 5px;
+  color: #fff;
+  background-color: #3a3a3a;
+  background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzNhM2EzYSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIH [...]
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#3a3a3a), to(#1e1e1e));
+  background-image: -webkit-linear-gradient(top, #3a3a3a 0%, #1e1e1e 100%);
+  background-image: -moz-linear-gradient(top, #3a3a3a 0%, #1e1e1e 100%);
+  background-image: -o-linear-gradient(top, #3a3a3a 0%, #1e1e1e 100%);
+  background-image: linear-gradient(to bottom, #3a3a3a 0%,#1e1e1e 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#3a3a3a', endColorstr='#1e1e1e',GradientType=0 );
+}
+
+thead th {
+  position: relative;
+  -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1);
+  -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.1);
+  box-shadow: inset 0 1px 0 rgba(255,255,255,.1);
+}
+
+thead th:first-child {
+  -webkit-border-top-left-radius: 5px;
+  -moz-border-radius-topleft: 5px;
+  border-top-left-radius: 5px;
+}
+
+thead th:last-child {
+  -webkit-border-top-right-radius: 5px;
+  -moz-border-radius-topright: 5px;
+  border-top-right-radius: 5px;
+}
+
+td {
+  padding: .5em .75em;
+}
+
+td p {
+  margin: 0;
+}
+
+th {
+  text-transform: uppercase;
+  font-size: 16px;
+  padding: .5em .75em;
+  text-shadow: 0 -1px 0 rgba(0,0,0,.9);
+  color: #888;
+}
+
+tbody td {
+  border-top: 1px solid #747474;
+  border-top: 1px solid rgba(0,0,0,.1);
+  -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1);
+  -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.1);
+  box-shadow: inset 0 1px 0 rgba(255,255,255,.1);
+  background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjEiLz4KICAgIDxzdG9wIG9mZnNldD0iMTAwJSIgc3Rv [...]
+  background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(255,255,255,0.1)), to(rgba(255,255,255,0)));
+  background-image: -webkit-linear-gradient(top, rgba(255,255,255,0.1) 0%, rgba(255,255,255,0) 100%);
+  background-image: -moz-linear-gradient(top, rgba(255,255,255,0.1) 0%, rgba(255,255,255,0) 100%);
+  background-image: -o-linear-gradient(top, rgba(255,255,255,0.1) 0%, rgba(255,255,255,0) 100%);
+  background-image: linear-gradient(to bottom, rgba(255,255,255,0.1) 0%,rgba(255,255,255,0) 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1affffff', endColorstr='#00ffffff',GradientType=0 );
+}
+
+td p {
+  font-size: 16px;
+}
+
+td p code {
+  font-size: 14px;
+}
+
+code.option, th .option, code.filter, th .filter {
+  color: #50B600;
+}
+
+code.flag, th .flag, code.output, th .output {
+  color: #049DCE;
+}
+
+code.option, code.flag, code.filter, code.output {
+  margin-bottom: 2px;
+}
+
+/* Note types */
+
+.note {
+  margin: 30px 0;
+  margin-left: -30px;
+  padding: 20px 20px 24px;
+  padding-left: 50px;
+  -webkit-border-radius: 0 5px 5px 0;
+  -moz-border-radius: 0 5px 5px 0;
+  border-radius: 0 5px 5px 0;
+  position: relative;
+  -webkit-box-shadow: 0 1px 5px rgba(0, 0, 0, .3), inset 0 1px 0 rgba(255,255,255,.2), inset 0 -1px 0 rgba(0,0,0,.3);
+  -moz-box-shadow: 0 1px 5px rgba(0, 0, 0, .3), inset 0 1px 0 rgba(255,255,255,.2), inset 0 -1px 0 rgba(0,0,0,.3);
+  box-shadow: 0 1px 5px rgba(0, 0, 0, .3), inset 0 1px 0 rgba(255,255,255,.2), inset 0 -1px 0 rgba(0,0,0,.3);
+  background-color: #7e6d42;
+  background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzdlNmQ0MiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIH [...]
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#7e6d42), to(#5c4e35));
+  background-image: -webkit-linear-gradient(top, #7e6d42 0%, #5c4e35 100%);
+  background-image: -moz-linear-gradient(top, #7e6d42 0%, #5c4e35 100%);
+  background-image: -o-linear-gradient(top, #7e6d42 0%, #5c4e35 100%);
+  background-image: linear-gradient(to bottom, #7e6d42 0%,#5c4e35 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#7e6d42', endColorstr='#5c4e35',GradientType=0 );
+}
+
+ at media (max-width: 568px) {
+  .note {
+    margin-right: -30px;
+  }
+}
+
+ at media (min-width: 768px) {
+  .note {
+    margin-left: -50px;
+  }
+}
+
+.note:before {
+  content: "";
+  position: absolute;
+  top: -10px;
+  left: 0;
+  border-color: transparent #222 #222 transparent;
+  border-style: solid;
+  border-width: 5px;
+  width: 0;
+  height: 0;
+}
+
+.note h5, .note p {
+  margin: 0;
+  color: #fff;
+}
+
+.note h5 {
+  line-height: 1.5em;
+  font-weight: 900;
+  font-style: normal;
+}
+
+.note p {
+  font-weight: 400;
+  font-size: .75em;
+}
+
+.info {
+  background-color: #0389aa;
+  background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAzODlhYSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIH [...]
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#0389aa), to(#00617f));
+  background-image: -webkit-linear-gradient(top, #0389aa 0%, #00617f 100%);
+  background-image: -moz-linear-gradient(top, #0389aa 0%, #00617f 100%);
+  background-image: -o-linear-gradient(top, #0389aa 0%, #00617f 100%);
+  background-image: linear-gradient(to bottom, #0389aa 0%,#00617f 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#0389aa', endColorstr='#00617f',GradientType=0 );
+}
+
+.warning {
+  background-color: #9e2812;
+  background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzllMjgxMiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIH [...]
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#9e2812), to(#6f0d0d));
+  background-image: -webkit-linear-gradient(top, #9e2812 0%, #6f0d0d 100%);
+  background-image: -moz-linear-gradient(top, #9e2812 0%, #6f0d0d 100%);
+  background-image: -o-linear-gradient(top, #9e2812 0%, #6f0d0d 100%);
+  background-image: linear-gradient(to bottom, #9e2812 0%,#6f0d0d 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#9e2812', endColorstr='#6f0d0d',GradientType=0 );
+}
+
+.unreleased {
+  background-color: #cd9239;
+  background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2NkOTIzOSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIH [...]
+  background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(205,146,57,1)), to(rgba(162,117,40,1)));
+  background-image: -webkit-linear-gradient(top, rgba(205,146,57,1) 0%, rgba(162,117,40,1) 100%);
+  background-image: -moz-linear-gradient(top, rgba(205,146,57,1) 0%, rgba(162,117,40,1) 100%);
+  background-image: -o-linear-gradient(top, rgba(205,146,57,1) 0%, rgba(162,117,40,1) 100%);
+  background-image: linear-gradient(to bottom, rgba(205,146,57,1) 0%,rgba(162,117,40,1) 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#cd9239', endColorstr='#a27528',GradientType=0 );
+}
+
+.info:before {
+  border-color: transparent #00617f #00617f transparent;
+}
+
+.warning:before {
+  border-color: transparent #6f0d0d #6f0d0d transparent;
+}
+
+.unreleased:before {
+  border-color: transparent #664719 #664719 transparent;
+}
+
+.note:after {
+  content: "★";
+  color: #fc0;
+  position: absolute;
+  top: 14px;
+  left: 14px;
+  font-size: 28px;
+  font-weight: 700;
+  text-shadow: 0 -1px 0 rgba(0,0,0,.5);
+}
+
+.info:after {
+  content: "ⓘ";
+  color: #fff;
+  position: absolute;
+  top: 15px;
+  left: 15px;
+  font-size: 28px;
+  font-weight: 700;
+  text-shadow: 0 -1px 0 rgba(0,0,0,.5);
+}
+
+.warning:after {
+  content: "‼";
+  color: #fc0;
+  position: absolute;
+  top: 15px;
+  left: 15px;
+  font-size: 32px;
+  font-weight: 700;
+  text-shadow: 0 -1px 0 rgba(0,0,0,.5);
+}
+
+.unreleased:after {
+  content: "⚒";
+  color: #2b2a12;
+  position: absolute;
+  top: 8px;
+  left: 15px;
+  font-size: 38px;
+  font-weight: 700;
+  text-shadow: 0 1px 0 rgba(255,255,255,.25);
+}
+
+/* Responsive tables */
+
+ at media (max-width: 768px) {
+  .mobile-side-scroller {
+    overflow-x: scroll;
+    margin: 0 -40px;
+    padding: 0 10px;
+  }
+}
diff --git a/site/_includes/docs_contents.html b/site/_includes/docs_contents.html
index 523b522..2ac64bb 100644
--- a/site/_includes/docs_contents.html
+++ b/site/_includes/docs_contents.html
@@ -1,16 +1,8 @@
 <div class="unit one-fifth hide-on-mobiles">
   <aside>
-    <h4>Getting Started</h4>
-    {% include docs_ul.html items='home quickstart installation usage structure configuration' %}
-    <h4>Your Content</h4>
-    {% include docs_ul.html items='frontmatter posts drafts pages variables datafiles migrations' %}
-    <h4>Customization</h4>
-    {% include docs_ul.html items='templates permalinks pagination plugins extras' %}
-    <h4>Deployment</h4>
-    {% include docs_ul.html items='github-pages deployment-methods' %}
-    <h4>Miscellaneous</h4>
-    {% include docs_ul.html items='troubleshooting sites resources upgrading' %}
-    <h4>Meta</h4>
-    {% include docs_ul.html items='contributing history' %}
+    {% for section in site.data.docs %}
+    <h4>{{ section.title }}</h4>
+    {% include docs_ul.html items=section.docs %}
+    {% endfor %}
   </aside>
 </div>
diff --git a/site/_includes/docs_contents_mobile.html b/site/_includes/docs_contents_mobile.html
index bbc367d..b3e0110 100644
--- a/site/_includes/docs_contents_mobile.html
+++ b/site/_includes/docs_contents_mobile.html
@@ -1,23 +1,10 @@
 <div class="docs-nav-mobile unit whole show-on-mobiles">
   <select onchange="if (this.value) window.location.href=this.value">
     <option value="">Navigate the docs…</option>
-    <optgroup label="Getting started">
-      {% include docs_option.html items='home quickstart installation usage structure configuration' %}
-    </optgroup>
-    <optgroup label="Your Content">
-      {% include docs_option.html items='frontmatter posts drafts pages variables datafiles migrations' %}
-    </optgroup>
-    <optgroup label="Customization">
-      {% include docs_option.html items='templates permalinks pagination plugins extras' %}
-    </optgroup>
-    <optgroup label="Deployment">
-      {% include docs_option.html items='github-pages deployment-methods' %}
-    </optgroup>
-    <optgroup label="Miscellaneous">
-      {% include docs_option.html items='troubleshooting sites resources upgrading' %}
-    </optgroup>
-    <optgroup label="Meta">
-      {% include docs_option.html items='contributing history' %}
+    {% for section in site.data.docs %}
+    <optgroup label="{{ section.title }}">
+      {% include docs_option.html items=section.docs %}
     </optgroup>
+    {% endfor %}
   </select>
 </div>
diff --git a/site/_includes/docs_option.html b/site/_includes/docs_option.html
index 8284ed9..57b76e2 100644
--- a/site/_includes/docs_option.html
+++ b/site/_includes/docs_option.html
@@ -1,7 +1,7 @@
-{% assign items = include.items | split: ' ' %}
+{% assign items = include.items %}
 
 {% for item in items %}
-  {% assign item_url = item | prepend:'/docs/' | append:'/' %}
+  {% assign item_url = item | prepend:"/docs/" | append:"/" %}
 
   {% for p in site.pages %}
     {% if p.url == item_url %}
diff --git a/site/_includes/docs_ul.html b/site/_includes/docs_ul.html
index 4ba8247..b778df1 100644
--- a/site/_includes/docs_ul.html
+++ b/site/_includes/docs_ul.html
@@ -1,13 +1,13 @@
-{% assign items = include.items | split: ' ' %}
+{% assign items = include.items %}
 
 <ul>
 {% for item in items %}
-  {% assign item_url = item | prepend:'/docs/' | append:'/' %}
+  {% assign item_url = item | prepend:"/docs/" | append:"/" %}
 
   {% if item_url == page.url %}
-    {% assign c = 'current' %}
+    {% assign c = "current" %}
   {% else %}
-    {% assign c = '' %}
+    {% assign c = "" %}
   {% endif %}
 
   {% for p in site.pages %}
@@ -16,5 +16,5 @@
     {% endif %}
   {% endfor %}
 
-{% endfor %}  
+{% endfor %}
 </ul>
diff --git a/site/_includes/footer.html b/site/_includes/footer.html
index d73b10e..c42b1a4 100644
--- a/site/_includes/footer.html
+++ b/site/_includes/footer.html
@@ -1,13 +1,13 @@
 <footer>
   <div class="grid">
     <div class="unit one-third center-on-mobiles">
-      <p>By <a href="http://tom.preston-werner.com">Tom Preston-Werner</a>, <a href="http://quaran.to/">Nick Quaranto</a>, and many more <a href="{{ site.repository }}/graphs/contributors">awesome contributors</a>.</p>
+      <p>The contents of this website are © {{ site.time | date: '%Y' }} <a href="http://tom.preston-werner.com/">Tom Preston-Werner</a> under the terms of the <a href="{{ site.repository }}/blob/master/LICENSE">MIT License</a>.</p>
     </div>
     <div class="unit two-thirds align-right center-on-mobiles">
       <p>
         Proudly hosted by
         <a href="https://github.com">
-          <img src="{{ site.url }}/img/footer-logo.png" alt="GitHub • Social coding">
+          <img src="/img/footer-logo.png" width="100" height="30" alt="GitHub • Social coding">
         </a>
       </p>
     </div>
diff --git a/site/_includes/header.html b/site/_includes/header.html
index 39de1bf..f55cff3 100644
--- a/site/_includes/header.html
+++ b/site/_includes/header.html
@@ -5,9 +5,9 @@
   <div class="grid">
     <div class="unit one-third center-on-mobiles">
       <h1>
-        <a href="{{ site.url }}/">
+        <a href="/">
           <span>Jekyll</span>
-          <img src="{{ site.url }}/img/logo-2x.png" width="249" height="115" alt="">
+          <img src="/img/logo-2x.png" width="249" height="115" alt="Logo">
         </a>
       </h1>
     </div>
diff --git a/site/_includes/news_item.html b/site/_includes/news_item.html
index ec3d742..60245d6 100644
--- a/site/_includes/news_item.html
+++ b/site/_includes/news_item.html
@@ -5,16 +5,16 @@
     </a>
   </h2>
   <span class="post-category">
-    {% for category in post.categories %}
-    <span class="label">{{ category }}</span>
-    {% endfor %}
+    <span class="label">
+      {{ post.categories | array_to_sentence_string }}
+    </span>
   </span>
   <div class="post-meta">
     <span class="post-date">
       {{ post.date | date_to_string }}
     </span>
     <a href="https://github.com/{{ post.author }}" class="post-author">
-      <img src="https://github.com/{{ post.author }}.png" class="avatar" alt="{{ post.author }}"/>
+      <img src="https://github.com/{{ post.author }}.png" class="avatar" alt="{{ post.author }}" width="24" height="24">
       {{ post.author }}
     </a>
   </div>
diff --git a/site/_includes/primary-nav-items.html b/site/_includes/primary-nav-items.html
index 54e6a59..f5628b7 100644
--- a/site/_includes/primary-nav-items.html
+++ b/site/_includes/primary-nav-items.html
@@ -1,14 +1,17 @@
 <ul>
   <li class="{% if page.overview %}current{% endif %}">
-    <a href="{{ site.url }}/">Overview</a>
+    <a href="/">Home</a>
   </li>
   <li class="{% if page.url contains '/docs/' %}current{% endif %}">
-    <a href="{{ site.url }}/docs/home/">Doc<span class="show-on-mobiles">s</span><span class="hide-on-mobiles">umentation</span></a>
+    <a href="/docs/home/">Doc<span class="show-on-mobiles">s</span><span class="hide-on-mobiles">umentation</span></a>
   </li>
   <li class="{% if page.author %}current{% endif %}">
-    <a href="{{ site.url }}/news/">News</a>
+    <a href="/news/">News</a>
   </li>
-  <li class="">
+  <li>
+    <a href="{{ site.help_url }}">Help</a>
+  </li>
+  <li>
     <a href="{{ site.repository }}"><span class="hide-on-mobiles">View on </span>GitHub</a>
   </li>
 </ul>
diff --git a/site/_includes/section_nav.html b/site/_includes/section_nav.html
index beb65e7..edba193 100644
--- a/site/_includes/section_nav.html
+++ b/site/_includes/section_nav.html
@@ -1,7 +1,7 @@
 <div class="section-nav">
   <div class="left align-right">
     {% if page.prev_section != null %}
-      <a href="{{ site.url }}/docs/{{ page.prev_section }}/" class="prev">
+      <a href="/docs/{{ page.prev_section }}/" class="prev">
         Back
       </a>
     {% else %}
@@ -10,7 +10,7 @@
   </div>
   <div class="right align-left">
     {% if page.next_section != null %}
-      <a href="{{ site.url }}/docs/{{ page.next_section }}/" class="next">
+      <a href="/docs/{{ page.next_section }}/" class="next">
         Next
       </a>
     {% else %}
diff --git a/site/_includes/top.html b/site/_includes/top.html
index e17496c..ffeddd9 100644
--- a/site/_includes/top.html
+++ b/site/_includes/top.html
@@ -4,14 +4,15 @@
   <meta charset="UTF-8">
   <title>{{ page.title }}</title>
   <meta name="viewport" content="width=device-width,initial-scale=1">
-  <link rel="alternate" type="application/rss+xml" title="Jekyll • Simple, blog-aware, static sites - Feed" href="/feed.xml" />
-  <link rel="alternate" type="application/atom+xml" title="Recent commits to Jekyll’s master branch" href="{{ site.repository }}/commits/master.atom" />
-  <link href='http://fonts.googleapis.com/css?family=Lato:100,300,400,700,900,100italic,300italic,400italic,700italic,900italic' rel='stylesheet' type='text/css'>
-  <link href='http://fonts.googleapis.com/css?family=Arizonia' rel='stylesheet' type='text/css'>
-  <link rel="stylesheet" href="{{ site.url }}/css/normalize.css" />
-  <link rel="stylesheet" href="{{ site.url }}/css/gridism.css" />
-  <link rel="stylesheet" href="{{ site.url }}/css/style.css" />
-  <link rel="stylesheet" href="{{ site.url }}/css/pygments.css" />
-  <link rel="icon" type="image/png" href="{{ site.url }}/favicon.png" />
-  <script src="{{ site.url }}/js/modernizr-2.5.3.min.js"></script>
+  <meta name="generator" content="Jekyll v{{ jekyll.version }}">
+  <link rel="alternate" type="application/rss+xml" title="Jekyll • Simple, blog-aware, static sites - Feed" href="/feed.xml">
+  <link rel="alternate" type="application/atom+xml" title="Recent commits to Jekyll’s master branch" href="{{ site.repository }}/commits/master.atom">
+  <link rel="stylesheet" href="//fonts.googleapis.com/css?family=Lato:300,300italic,400,400italic,700,700italic,900">
+  <link rel="stylesheet" href="/css/screen.css">
+  <link rel="icon" type="image/x-icon" href="/favicon.ico">
+  {% include anchor_links.html %}
+  <!--[if lt IE 9]>
+  <script src="/js/html5shiv.min.js"></script>
+  <script src="/js/respond.min.js"></script>
+  <![endif]-->
 </head>
diff --git a/site/_layouts/news_item.html b/site/_layouts/news_item.html
index d395502..6d27976 100644
--- a/site/_layouts/news_item.html
+++ b/site/_layouts/news_item.html
@@ -8,20 +8,20 @@ layout: news
     <a href="{{ page.url }}" class="permalink" title="Permalink">∞</a>
   </h2>
   <span class="post-category">
-    {% for category in page.categories %}
-    <span class="label">{{ category }}</span>
-    {% endfor %}
+    <span class="label">
+      {{ page.categories | array_to_sentence_string }}
+    </span>
   </span>
   <div class="post-meta">
     <span class="post-date">
       {{ page.date | date_to_string }}
     </span>
     <a href="https://github.com/{{ page.author }}" class="post-author">
-      <img src="https://github.com/{{ page.author }}.png" class="avatar" />
+      <img src="https://github.com/{{ page.author }}.png" class="avatar" alt="{{ page.author }}" width="24" height="24">
       {{ page.author }}
     </a>
   </div>
-  <p class="post-content">
+  <div class="post-content">
     {{ content }}
-  </p>
+  </div>
 </article>
diff --git a/site/_posts/2013-07-24-jekyll-1-1-1-released.markdown b/site/_posts/2013-07-24-jekyll-1-1-1-released.markdown
index f869106..2d0096b 100644
--- a/site/_posts/2013-07-24-jekyll-1-1-1-released.markdown
+++ b/site/_posts/2013-07-24-jekyll-1-1-1-released.markdown
@@ -9,10 +9,10 @@ categories: [release]
 
 
 Coming just 10 days after the release of v1.1.0, v1.1.1 is out with a patch for the nasty
-excerpt inception bug ([1339][]) and non-zero exit codes for invalid commands
-([1338][]).
+excerpt inception bug ([#1339][]) and non-zero exit codes for invalid commands
+([#1338][]).
 
-To all those affected by the [strange excerpt bug in v1.1.0][1321], I'm sorry. I think we
+To all those affected by the [strange excerpt bug in v1.1.0][#1321], I'm sorry. I think we
 have it all patched up and it should be deployed to [GitHub Pages][gh_pages] in the next
 couple weeks. Thank you for your patience!
 
@@ -23,7 +23,7 @@ See the [GitHub Release][] page for more a more detailed changelog for this rele
 
 {% assign issue_numbers = "1339|1338|1321" | split: "|" %}
 {% for issue in issue_numbers %}
-[{{ issue }}]: {{ site.repository }}/issues/{{ issue }}
+[#{{ issue }}]: {{ site.repository }}/issues/{{ issue }}
 {% endfor %}
 
 [GitHub Release]: {{ site.repository }}/releases/tag/v1.1.1
diff --git a/site/_posts/2013-07-25-jekyll-1-0-4-released.markdown b/site/_posts/2013-07-25-jekyll-1-0-4-released.markdown
index faf81dd..b61d9fc 100644
--- a/site/_posts/2013-07-25-jekyll-1-0-4-released.markdown
+++ b/site/_posts/2013-07-25-jekyll-1-0-4-released.markdown
@@ -9,7 +9,7 @@ categories: [release]
 
 Version 1.0.4 fixes a minor, but nonetheless important security vulnerability affecting several third-party Jekyll plugins. If your Jekyll site does not use plugins, you may, but are not required to upgrade at this time.
 
-Community and custom plugins extending the `Liquid::Drop` class may inadvertently disclose some system information such as directory structure or software configuration to users with access to the Liquid templating system. 
+Community and custom plugins extending the `Liquid::Drop` class may inadvertently disclose some system information such as directory structure or software configuration to users with access to the Liquid templating system.
 
 We recommend you upgrade to Jekyll v1.0.4 immediately if you use `Liquid::Drop` plugins on your Jekyll site.
 
diff --git a/site/_posts/2013-07-25-jekyll-1-1-2-released.markdown b/site/_posts/2013-07-25-jekyll-1-1-2-released.markdown
index 54a8c87..63e78d9 100644
--- a/site/_posts/2013-07-25-jekyll-1-1-2-released.markdown
+++ b/site/_posts/2013-07-25-jekyll-1-1-2-released.markdown
@@ -9,7 +9,7 @@ categories: [release]
 
 Version 1.1.2 fixes a minor, but nonetheless important security vulnerability affecting several third-party Jekyll plugins. If your Jekyll site does not use plugins, you may, but are not required to upgrade at this time.
 
-Community and custom plugins extending the `Liquid::Drop` class may inadvertently disclose some system information such as directory structure or software configuration to users with access to the Liquid templating system. 
+Community and custom plugins extending the `Liquid::Drop` class may inadvertently disclose some system information such as directory structure or software configuration to users with access to the Liquid templating system.
 
 We recommend you upgrade to Jekyll v1.1.2 immediately if you use `Liquid::Drop` plugins on your Jekyll site.
 
diff --git a/site/_posts/2013-09-14-jekyll-1-2-1-released.markdown b/site/_posts/2013-09-14-jekyll-1-2-1-released.markdown
index 26a6ca1..832dbd0 100644
--- a/site/_posts/2013-09-14-jekyll-1-2-1-released.markdown
+++ b/site/_posts/2013-09-14-jekyll-1-2-1-released.markdown
@@ -8,8 +8,8 @@ categories: [release]
 ---
 
 Quick turnover, anyone? A [recent incompatibility with Liquid
-v2.5.2](https://github.com/mojombo/jekyll/pull/1525) produced a nasty bug in
-which `include` tags were not rendered properly within `if` blocks. 
+v2.5.2](https://github.com/jekyll/jekyll/pull/1525) produced a nasty bug in
+which `include` tags were not rendered properly within `if` blocks.
 
 This release also includes a better handling of detached servers (prints pid and
 the command for killing the process). **Note**: the `--detach` flag and
diff --git a/site/_posts/2013-10-28-jekyll-1-3-0-rc1-released.markdown b/site/_posts/2013-10-28-jekyll-1-3-0-rc1-released.markdown
index f4f4852..5a64cfc 100644
--- a/site/_posts/2013-10-28-jekyll-1-3-0-rc1-released.markdown
+++ b/site/_posts/2013-10-28-jekyll-1-3-0-rc1-released.markdown
@@ -13,7 +13,7 @@ available for any early adopters who want to give the latest and
 greatest code a spin without having to clone a repository from git.
 
 Please take this prerelease for a spin and [let us
-know](https://github.com/mojombo/jekyll/issues/new) if you run into any
+know](https://github.com/jekyll/jekyll/issues/new) if you run into any
 issues!
 
 
diff --git a/site/_posts/2013-12-09-jekyll-1-4-1-released.markdown b/site/_posts/2013-12-09-jekyll-1-4-1-released.markdown
new file mode 100644
index 0000000..509571b
--- /dev/null
+++ b/site/_posts/2013-12-09-jekyll-1-4-1-released.markdown
@@ -0,0 +1,20 @@
+---
+layout: news_item
+title: 'Jekyll 1.4.1 Released'
+date: 2013-12-09 20:44:13 -0600
+author: mattr-
+version: 1.4.1
+categories: [release]
+---
+
+Another quick turnover, anyone? A [critical
+bug]({{ site.repository }}/issues/1794) in the reading of
+posts snuck itself into the 1.4.0 release.
+
+To address this issue, we're releasing v1.4.1 of Jekyll so that you can
+keep on writing without any problems.
+
+As always, you can find the full list of fixes in this release in the
+[change log](/docs/history/)!
+
+
diff --git a/site/_posts/2014-01-13-jekyll-1-4-3-released.markdown b/site/_posts/2014-01-13-jekyll-1-4-3-released.markdown
index 82a9134..a97bcec 100644
--- a/site/_posts/2014-01-13-jekyll-1-4-3-released.markdown
+++ b/site/_posts/2014-01-13-jekyll-1-4-3-released.markdown
@@ -23,5 +23,4 @@ traversal, potentially overwriting otherwise-trusted content with arbitrary HTML
 or Javascript depending on your server's configuration.
 
 *Maintainer's note: Many thanks to @gregose and @charliesome for discovering
-these vulnerabilities, and to @BenBalter and @alindeman for writing the patch.
-- at parkr*
+these vulnerabilities, and to @BenBalter and @alindeman for writing the patch.*
diff --git a/site/_posts/2014-03-27-jekyll-1-5-1-released.markdown b/site/_posts/2014-03-27-jekyll-1-5-1-released.markdown
index 1eae60f..e8a4096 100644
--- a/site/_posts/2014-03-27-jekyll-1-5-1-released.markdown
+++ b/site/_posts/2014-03-27-jekyll-1-5-1-released.markdown
@@ -19,7 +19,7 @@ Well, we can't have that! In 1.5.1, you'll instead see:
 
 {% highlight ruby %}
 > sanitized_path("/tmp/foobar/jail", "..c:/..c:/..c:/etc/passwd")
-=> "/tmp/foobar/jail/etc/passwd"
+=> "/tmp/foobar/jail/..c:/..c:/..c:/etc/passwd"
 {% endhighlight %}
 
 Luckily not affecting 1.4.x, this fix will make 1.5.0 that much safer for
diff --git a/site/_posts/2014-05-06-jekyll-turns-2-0-0.markdown b/site/_posts/2014-05-06-jekyll-turns-2-0-0.markdown
new file mode 100644
index 0000000..c288931
--- /dev/null
+++ b/site/_posts/2014-05-06-jekyll-turns-2-0-0.markdown
@@ -0,0 +1,31 @@
+---
+layout: news_item
+title: 'Jekyll turns 2.0.0'
+author: parkr
+version: 2.0.0
+categories: [release]
+---
+
+A year ago to the day, [we released Jekyll 1.0.0][jekyll-1]. One year later, we present to you the next major version: Jekyll 2.0.0.
+
+Jam-packed with some [highly-requested features and bugfixes galore][changelog], this is the best Jekyll yet. Some notable changes:
+
+1. [Collections](/docs/collections/) - Collections allow you to define an unlimited number of custom document types (beyond just posts and pages) for different types of content you may want to author in Jekyll such as API documentation or a cookbook!
+2. [Brand new site template](https://github.com/jekyll/jekyll/pull/2050#issuecomment-35938016) (thanks [@jglovier][]!) - Getting started with Jekyll just got a lot easier and a lot more beautiful. Just run `jekyll new <path>` and you're good to go.
+3. [Native Sass & CoffeeScript support](/docs/assets/) - We love CSS and JavaScript as much as the next guy, but there will always be a special place in our hearts for Sass and CoffeeScript. We now offer native support for these file types — no more messing around with Rake or Grunt!
+4. [YAML Front-Matter defaults](/docs/configuration/#frontmatter-defaults) - If you've set `layout: post` more than once in your life, you'll love this new feature: set front-matter defaults for a given directory or type.
+5. [Custom markdown processors](/docs/configuration/#custom-markdown-processors) - Always wanted to use your favourite home-grown Markdown converter, but couldn't with Jekyll? Now you can. Simply specify `markdown: MyConverterClass` and you're on your way.
+6. [Addition of `where` and `group_by` Liquid filters](/docs/templates/#filters) - Simplifying your Liquid templates one filter at a time. The `where` filter selects from an array all items within which have a given value for a property. The `group_by` filter groups all items in an array which have the same value for a given property.
+7. [Switch from Maruku to Kramdown as default markdown converter](https://github.com/jekyll/jekyll/pull/1988) - Maruku is dead. We've replaced it with the converter which has the closest feature parity: Kramdown!
+
+Check out our [changelog][] for a complete list of all (200+) changes.
+
+Many thanks to these 183 contributors for making Jekyll 2.0.0 happen:
+
+Parker Moore, Matt Rogers, maul.esel, Anatol Broder, Zach Gersh, Joel Glovier, Ben Balter, XhmikosR, Coby Chapple, John Piasetzki, Aidan Feldman, Robin Dupret, Pascal Borreli, Troy Swanson, Erik Michaels-Ober, albertogg, Lucas Jenss, Matt Rogers & Persa Zula, Eric Mill, Shigeya Suzuki, Jens Nazarenus, ddavison, Pat Hawks, Rob Wierzbowski, MURAOKA Taro, Casey Lang, Fabian Rodriguez, Greg Karékinian, Zlatan Vasović, Christopher Nicotera, Dmitry Chestnykh, Ryan Morrissey, Jordon, John Hughe [...]
+
+Happy developing!
+
+[changelog]: /docs/history/
+[@jglovier]: https://github.com/jglovier
+[jekyll-1]: {% post_url 2013-05-05-jekyll-1-0-0-released %}
diff --git a/site/_posts/2014-05-08-jekyll-2-0-3-released.markdown b/site/_posts/2014-05-08-jekyll-2-0-3-released.markdown
new file mode 100644
index 0000000..ac5e9d7
--- /dev/null
+++ b/site/_posts/2014-05-08-jekyll-2-0-3-released.markdown
@@ -0,0 +1,18 @@
+---
+layout: news_item
+title: 'Jekyll 2.0.3 Released'
+date: 2014-05-08 22:43:17 -0400
+author: parkr
+version: 2.0.3
+categories: [release]
+---
+
+Hey again! Just wanted to let you know we've released another version of Jekyll, jam-packed with bug fixes.
+
+A huge "thank you" is in order for all the folks who have submitted bug reports over the last 2 days — your input is what allows this project to continue. It's always a pain to deal with a MAJOR version bump release, but it's been pretty smooth so far and you have all been nice about the flaws you've found in the tool. Keep filing those reports so we can continue to make Jekyll even better!
+
+Thank you to the contributors that contributed code to 2.0.1, 2.0.2, and/or 2.0.3:
+
+Parker Moore, Yi Zeng, Gabe Ortiz, Aaron Broder, Alberto Grespan, gpxl, David Briggs, Kevin Ingersoll, and Troy Swanson.
+
+As always, check out the [changelog](/docs/history/) for more info. Happy Jekylling!
diff --git a/site/css/normalize.css b/site/css/normalize.css
deleted file mode 100644
index f0629e6..0000000
--- a/site/css/normalize.css
+++ /dev/null
@@ -1 +0,0 @@
-/* normalize.css v2.1.2 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{font-size:2em;margin:0.67em 0}abbr[title]{border-bottom:1px dotted}b,st [...]
diff --git a/site/css/screen.css b/site/css/screen.css
new file mode 100644
index 0000000..c49c94a
--- /dev/null
+++ b/site/css/screen.css
@@ -0,0 +1,31 @@
+---
+---
+
+{% capture screen %}
+/*                *\
+ * $normalize.css *
+\*                */
+{% include css/normalize.css %}
+/*                *\
+ * $gridism.css   *
+\*                */
+{% include css/gridism.css %}
+/*                *\
+ * $style.css     *
+\*                */
+{% include css/style.css %}
+/*                *\
+ * $pygments.css  *
+\*                */
+{% include css/pygments.css %}
+/*                *\
+ * $font-awesome.css  *
+\*                */
+{% include css/font-awesome.css %}
+{% endcapture %}
+
+{% if site.GH_ENV %}
+  {{ screen | strip_newlines | remove: '  ' }}
+{% else %}
+  {{ screen }}
+{% endif %}
diff --git a/site/css/style.css b/site/css/style.css
deleted file mode 100644
index 049ee11..0000000
--- a/site/css/style.css
+++ /dev/null
@@ -1,946 +0,0 @@
-/* Base */
-
-* {
-  box-sizing: border-box;
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-}
-
-body {
-  font-family: Lato, 'Helvetica Neue', Helvetica, Arial, sans-serif;
-  font-size: 21px;
-  font-weight: 300;
-  color: #ddd;
-  background: #333;
-  border-top: 5px solid #fc0;
-  box-shadow: inset 0 3px 30px rgba(0,0,0,.3);
-  text-shadow: 0 1px 3px rgba(0,0,0,.5);
-}
-
-.clear {
-  display: block;
-}
-
-.clear:after {
-  content: " ";
-  display: block;
-  height: 0;
-  clear: both;
-  visibility: hidden;
-}
-
-/* Sections */
-
-body > header, body > section, body > footer {
-  float: left;
-  width: 100%;
-  clear: both;
-}
-
-/* Header */
-
-body > header h1, body > header nav {
-  display: inline-block;
-}
-
-body > header h1 span {
-  display: none;
-}
-
-nav ul {
-  padding: 0;
-  margin: 0;
-}
-
-nav li {
-  display: inline-block;
-}
-
-.main-nav {
-  margin-top: 52px;
-}
-
-.main-nav li {
-  margin-right: 10px;
-}
-
-.main-nav li a {
-  border-radius: 5px;
-  font-weight: 800;
-  font-size: 14px;
-  padding: 0.5em 1em;
-  text-shadow: none;
-  text-transform: uppercase;
-  transition: all .25s;
-   -moz-transition: all .25s;
-   -webkit-transition: all .25s;
-}
-
-.main-nav li a:hover {
-  background: #252525;
-  box-shadow: inset 0 1px 3px rgba(0,0,0,.5), 0 1px 0 rgba(255,255,255,.1);
-  text-shadow: 0 1px 3px rgba(0,0,0,.5);
-}
-
-.main-nav li.current a {
-  background: #fc0;
-  color: #222;
-  box-shadow: inset 0 1px 0 rgba(255,255,255,.5), 0 1px 5px rgba(0,0,0,.5);
-  text-shadow: 0 1px 0 rgba(255,255,255,.3);
-}
-
-.mobile-nav ul {
-  overflow: hidden;
-  width: 100%;
-  display: table;
-}
-
-.mobile-nav a {
-  float: left;
-  width: 100%;
-  background: #333;
-  color: #fc0;
-  text-align: center;
-  text-transform: uppercase;
-  font-size: 14px;
-  font-weight: 800;
-  padding: 5px;
-  border-radius: 5px;
-}
-
-.mobile-nav .current a {
-  background: #fc0;
-  color: #222;
-  box-shadow: inset 0 1px 0 rgba(255,255,255,.5), 0 1px 5px rgba(0,0,0,.5);
-  text-shadow: 0 1px 0 rgba(255,255,255,.3);
-}
-
-.mobile-nav li {
-  display: table-cell;
-  width: 25%;
-  padding: 8px;
-}
-
- at media (max-width: 768px){
-  .main-nav ul {
-    text-align: right;
-  }
-}
- at media (max-width: 830px){
-  .main-nav .show-on-mobiles {
-    display: inline;
-  }
-  .main-nav .hide-on-mobiles {
-    display: none;
-  }
-}
-
-/* Footer */
-
-body > footer {
-  background: #222;
-  font-size: 16px;
-  padding-bottom: 5px;
-  color: #888;
-  margin-top: 40px;
-}
-
-body > footer a {
-  color: #fff;
-}
-
-body > footer .align-right p, body > footer img {
-  display: inline-block;
-}
-
-body > footer img {
-  position: relative;
-  top: 8px;
-  margin-left: 5px;
-  width: 100px;
-  height: 30px;
-  opacity: .8;
-  padding: 1px;
-  -webkit-transition: opacity .2s;
-  -moz-transition: opacity .2s;
-  transition: opacity .2s;
-}
-
-body > footer a:hover img {
-  opacity: 1;
-}
-
- at media (max-width: 568px){
-  footer .one-third p {
-    margin-bottom: 0;
-  }
-  footer .two-thirds p {
-    margin-top: -20px;
-  }
-}
-
-/* Intro */
-
-.intro .unit {
-  padding: 10px 0 40px;
-}
-
-.intro p {
-  font-size: 1.75em;
-  line-height: 1em;
-  margin: 0;
-}
-
- at media (min-width: 569px){
-  .intro p {
-    font-size: 3.2em;
-  }
-}
-
-/* Quickstart */
-
-.quickstart {
-  background: #3F1F1F;
-  color: #fff;
-  margin: 60px 0;
-  box-shadow: inset 0 3px 10px rgba(0,0,0,.4);
-}
-
-.quickstart .content {
-  padding: 0px 0;
-}
-
-.quickstart h4 {
-  font-size: 24px;
-  line-height: 24px;
-  margin-top: 20px;
-  text-shadow: 0 1px 3px rgba(0,0,0,.8);
-}
-
-.quickstart .code {
-  font-size: 12px;
-  display: block;
-  margin: 0 0 -30px;
-}
-
- at media (min-width: 768px){
-  .quickstart .code {
-    font-size: 18px;
-    margin: -30px 0;
-    float: right;
-  }
-  .quickstart h4 {
-    margin: 50px 0 0;
-    text-align: center;
-  }
-}
-
-/* Code */
-
-.quickstart .code {
-  display: block;
-  padding: 0;
-  font-family: Menlo, Consolas, "Courier New", Courier, "Liberation Mono", monospace;
-  line-height: 1.3em;
-}
-
-.quickstart .code .title {
-  display: block;
-  text-align: center;
-  margin: 0 20px;
-  padding: 5px 0;
-  border-radius: 5px 5px 0 0;
-  box-shadow: 0 3px 10px rgba(0,0,0,.5);
-  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
-  font-size: 16px;
-  font-weight: normal;
-  color: #444;
-  text-shadow: 0 1px 0 rgba(255,255,255,.5);
-  background: #f7f7f7;
-  background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Y3ZjdmNyIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjclIiBzdG9wLWNv [...]
-  background: -moz-linear-gradient(top,  #f7f7f7 0%, #cfcfcf 7%, #aaaaaa 100%);
-  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f7f7f7), color-stop(7%,#cfcfcf), color-stop(100%,#aaaaaa));
-  background: -webkit-linear-gradient(top,  #f7f7f7 0%,#cfcfcf 7%,#aaaaaa 100%);
-  background: -o-linear-gradient(top,  #f7f7f7 0%,#cfcfcf 7%,#aaaaaa 100%);
-  background: -ms-linear-gradient(top,  #f7f7f7 0%,#cfcfcf 7%,#aaaaaa 100%);
-  background: linear-gradient(top,  #f7f7f7 0%,#cfcfcf 7%,#aaaaaa 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f7f7f7', endColorstr='#aaaaaa',GradientType=0 );
-  border-bottom: 1px solid #111;
-}
-
-.quickstart .code .shell {
-  padding: 20px;
-  text-shadow: none;
-  margin: 0 20px;
-  background: #3d3d3d;
-  border-radius: 0 0 5px 5px;
-  box-shadow: 0 5px 30px rgba(0,0,0,.3);
-}
-
-.quickstart .code .line {
-  display: block;
-  margin: 0;
-  padding: 0;
-}
-
-.quickstart .code .line span {
-  display: inline-block;
-}
-
-.quickstart .code .path {
-  color: #87ceeb;
-}
-
-.quickstart .code .prompt {
-  color: #cd5c5c;
-}
-
-.quickstart .code .command {
-  color: #f0e68c;
-}
-
-.quickstart .code .output {
-  color: #888;
-}
-
-/* Free Hosting */
-
-.free-hosting .pane {
-  background: #444;
-  border-radius: 10px;
-  text-shadow: none;
-  position: relative;
-  padding: 0 20px 30px;
-}
-
-.free-hosting img {
-  margin: -30px 0 0;
-  width: 180px;
-  height: 150px;
-}
-
-.free-hosting h2 {
-  font-size: 28px;
-}
-
-.free-hosting p,
-.free-hosting a {
-  font-size: 16px;
-}
-
-.free-hosting p {
-  margin: .75em 0;
-}
-
- at media (min-width: 768px){
-  .free-hosting img {
-    float: left;
-    margin: -20px -30px -30px -50px;
-    width: 300px;
-    height: 251px;
-  }
-  .free-hosting .pane-content {
-    margin-top: 35px;
-    padding-right: 30px;
-  }
-  .free-hosting p,
-  .free-hosting a {
-    font-size: 18px;
-  }
-  .free-hosting .pane:after {
-    content: " ";
-    float: right;
-    background: url(../img/footer-arrow.png) top left no-repeat;
-    width: 73px;
-    height: 186px;
-    position: absolute;
-    right: 0;
-    bottom: -30px;
-  }
-}
-
-/* Article - Used for both docs and news */
-
-
-article {
-  background: #444;
-  border-radius: 10px;
-  padding: 20px;
-  margin: 0 10px;
-  box-shadow: 0 3px 10px rgba(0,0,0,.1);
-  font-size: 16px;
-}
-
- at media (max-width: 480px){
-  article ul {
-    padding-left: 20px;
-  }
-}
-
- at media (max-width: 568px){
-  article {
-    margin: 0;
-  }
-}
-
- at media (min-width: 768px){
-  article {
-    padding: 40px 40px 30px;
-    font-size: 21px;
-  }
-}
-
-/* Right-side nav - used by both docs and news */
-
-aside {
-  padding-top: 30px;
-}
-
-aside h4 {
-  text-transform: uppercase;
-  font-size: 14px;
-  font-weight: 700;
-  padding: 0 0 10px 30px;
-  margin-left: -30px;
-  display: inline-block;
-  border-bottom: 1px solid #c00;
-}
-
-aside ul {
-  padding-left: 0;
-}
-
-aside ul:first-child {
-  margin-top: 0;
-}
-
-aside li {
-  list-style-type: none;
-}
-
-aside li a {
-  font-size: 16px;
-  position: relative
-}
-
-aside li.current a:before {
-  content: "";
-  border-color: transparent transparent transparent #444;
-  border-style: solid;
-  border-width: 10px;
-  width: 0;
-  height: 0;
-  position: absolute;
-  top: 0;
-  left: -30px;
-}
-
-/* Documentation */
-
-.docs article {
-  min-height: 800px;
-}
-
-.docs .content {
-  padding: 0;
-}
-
-.section-nav {
-  text-align: center;
-  padding-top: 40px;
-  position: relative;
-  background: url(../img/article-footer.png) top center no-repeat;
-  margin: 40px -20px 10px;
-}
-
-.section-nav > div {
-  width: 49.5%;
-}
-
-.section-nav a, .section-nav span {
-  color: #fff;
-  font-size: 16px;
-  text-transform: uppercase;
-  font-weight: 700;
-  padding: 8px 12px 10px;
-  border-radius: 5px;
-  /*border: 1px solid #333;*/
-  box-shadow: 0 1px 3px rgba(0,0,0,.3), inset 0 1px 1px rgba(255,255,255,.5);
-  background: #777;
-}
-
-.section-nav a:hover {
-  color: #fff;
-  background: #888;
-}
-
-.section-nav .next, .section-nav .prev {
-  position: relative;
-}
-
-.section-nav .next:after, .section-nav .prev:before {
-  font-size: 36px;
-  color: #222;
-  font-weight: 800;
-  text-shadow: 0 1px 0 rgba(255,255,255,.4);
-  position: absolute;
-  top: -7px;
-}
-
-.section-nav .next:after {
-  content: "›";
-  right: 10px;
-}
-
-.section-nav .prev:before {
-  content: "‹";
-  left: 10px;
-}
-
-.section-nav .prev, .section-nav .prev:hover {
-  /*float: left;*/
-  padding-left: 30px;
-}
-
-.section-nav .next, .section-nav .next:hover {
-  /*float: right;*/
-  padding-right: 30px;
-}
-
-.section-nav .disabled {
-  opacity: .5;
-  /*filter: alpha*/
-  cursor: default;
-}
-
-.docs-nav-mobile select {
-  width: 100%;
-}
-
-/* News */
-
-article h2:first-child {
-  margin-top: 0;
-}
-
-.post-category,
-.post-meta {
-  display: inline-block;
-  vertical-align: middle;
-  font-size: .8em;
-}
-
-.post-category {
-  display: inline-block;
-  margin-left: -30px;
-  padding: 6px 10px 8px;
-  padding-left: 50px;
-  border-radius: 0 5px 5px 0;
-  position: relative;
-  box-shadow: 0 1px 5px rgba(0, 0, 0, .3), inset 0 1px 0 rgba(255,255,255,.2), inset 0 -1px 0 rgba(0,0,0,.3);
-  background: #9e2812;
-  background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzllMjgxMiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3At [...]
-  background: -moz-linear-gradient(top,  #9e2812 0%, #6f0d0d 100%);
-  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#9e2812), color-stop(100%,#6f0d0d));
-  background: -webkit-linear-gradient(top,  #9e2812 0%,#6f0d0d 100%);
-  background: -o-linear-gradient(top,  #9e2812 0%,#6f0d0d 100%);
-  background: -ms-linear-gradient(top,  #9e2812 0%,#6f0d0d 100%);
-  background: linear-gradient(to bottom,  #9e2812 0%,#6f0d0d 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#9e2812', endColorstr='#6f0d0d',GradientType=0 );
-}
-
-.label {
-  float: left;
-  text-transform: uppercase;
-  font-weight: bold;
-  text-shadow: 0 -1px 0 rgba(0,0,0,.5);
-}
-
- at media (max-width: 568px){
-  .post-category {
-    padding-left: 30px;
-  }
-}
-
- at media (min-width: 768px){
-  .post-category {
-    margin-left: -50px;
-  }
-}
-
-.post-category:before {
-  content: "";
-  position: absolute;
-  top: -10px;
-  left: 0px;
-  border-color: transparent #6f0d0d #6f0d0d transparent;
-  border-style: solid;
-  border-width: 5px;
-  width: 0;
-  height: 0;
-}
-
-.avatar {
-  width: 24px;
-  height: 24px;
-  border-radius: 3px;
-  display: inline-block;
-  vertical-align: middle;
-}
-
-.post-meta {
-  padding: 5px 0;
-  color: #aaa;
-  font-weight: 600;
-  text-shadow: 0 -1px 0 #000;
-}
-
-.post-date,
-.post-author {
-  margin-left: 10px;
-}
-
-.news article + article {
-  margin-top: -10px;
-  border-radius: 0 0 10px 10px;
-  border-top: 1px solid #555;
-  box-shadow: 0 -1px 0 #2f2f2f;
-}
-
-/* Code Highlighting */
-
-
-pre, code {
-  white-space: pre;
-  display: inline-block;
-  margin: 0;
-  padding: 0;
-  font-family: Menlo, Consolas, "Courier New", Courier, "Liberation Mono", monospace;
-  font-size: 14px;
-  padding: 0 .5em;
-  line-height: 1.8em;
-}
-
- at media (min-width: 768px){
-  pre, code {
-    font-size: 16px;
-  }
-}
-
-.highlight, p > pre, p > code, p > nobr > code, li > code, h5 > code, .note > code {
-  background: #333;
-  color: #fff;
-  border-radius: 5px;
-  box-shadow: inset 0 1px 10px rgba(0,0,0,.3),
-    0 1px 0 rgba(255,255,255,.1),
-    0 -1px 0 rgba(0,0,0,.5);
-}
-
-.note code {
-  background-color: rgba(0,0,0,0.2);
-  margin-left: 2.5px;
-  margin-right: 2.5px;
-  font-size: 0.8em;
-}
-
-.highlight {
-  padding: 10px 0;
-  width: 100%;
-  overflow: auto;
-}
-
-/* HTML Elements */
-
-h1, h2, h3, h4, h5, h6 {
-  margin: 0;
-}
-
-a {
-  color: #fc0;
-  text-decoration: none;
-  transition: all .25s;
-   -moz-transition: all .25s;
-   -webkit-transition: all .25s;
-}
-
-a:hover {
-  color: #f90;
-}
-
-strong {
-  font-weight: 700;
-}
-
-p {
-  line-height: 1.5em;
-}
-
-.left { float: left; }
-.right { float: right; }
-.align-right { text-align: right; }
-.align-left { text-align: left; }
-.align-center { text-align: center; }
-
-/* Article HTML */
-
-article h2,
-article h3,
-article h4,
-article h5,
-article h6 {
-  margin: 1em 0;
-}
-
-article h4 {
-  color: #fff;
-}
-
-h5, h6 {
-  font-size: 1em;
-  font-style: italic;
-}
-
-article ul li p {
-  margin: 0;
-}
-
-article ul li, article ol li {
-  line-height: 1.5em;
-  margin-bottom: 0.5em;
-}
-
-article ul li blockquote {
-  margin: 10px 0;
-}
-
-blockquote {
-  border-left: 2px solid #777;
-  padding-left: 20px;
-  font-style: italic;
-  font-size: 18px;
-  font-weight: 500;
-}
-
-
-/* Tables */
-
-table {
-  width: 100%;
-  background: #555;
-  margin: .5em 0;
-  border-radius: 5px;
-  box-shadow: 0 1px 3px rgba(0,0,0,.3);
-}
-
-thead {
-  border-top-left-radius: 5px;
-  border-top-right-radius: 5px;
-  color: #fff;
-  background: #3a3a3a;
-  background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzNhM2EzYSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3At [...]
-  background: -moz-linear-gradient(top,  #3a3a3a 0%, #1e1e1e 100%);
-  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#3a3a3a), color-stop(100%,#1e1e1e));
-  background: -webkit-linear-gradient(top,  #3a3a3a 0%,#1e1e1e 100%);
-  background: -o-linear-gradient(top,  #3a3a3a 0%,#1e1e1e 100%);
-  background: -ms-linear-gradient(top,  #3a3a3a 0%,#1e1e1e 100%);
-  background: linear-gradient(to bottom,  #3a3a3a 0%,#1e1e1e 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#3a3a3a', endColorstr='#1e1e1e',GradientType=0 );
-}
-
-thead th {
-  position: relative;
-  box-shadow: inset 0 1px 0 rgba(255,255,255,.1);
-}
-
-thead th:first-child {
-  border-top-left-radius: 5px;
-}
-
-thead th:last-child {
-  border-top-right-radius: 5px;
-}
-
-td {
-  padding: .5em .75em;
-}
-
-td p {
-  margin: 0;
-}
-
-th {
-  text-transform: uppercase;
-  font-size: 16px;
-  padding: .5em .75em;
-  text-shadow: 0 -1px 0 rgba(0,0,0,.9);
-  color: #888;
-}
-
-tbody td {
-  border-top: 1px solid rgba(0,0,0,.1);
-  box-shadow: inset 0 1px 0 rgba(255,255,255,.1);
-  background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjEiLz4KICAgIDxzdG9wIG9mZnNldD0iMTAwJSIgc3Rv [...]
-  background: -moz-linear-gradient(top,  rgba(255,255,255,0.1) 0%, rgba(255,255,255,0) 100%);
-  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,0.1)), color-stop(100%,rgba(255,255,255,0)));
-  background: -webkit-linear-gradient(top,  rgba(255,255,255,0.1) 0%,rgba(255,255,255,0) 100%);
-  background: -o-linear-gradient(top,  rgba(255,255,255,0.1) 0%,rgba(255,255,255,0) 100%);
-  background: -ms-linear-gradient(top,  rgba(255,255,255,0.1) 0%,rgba(255,255,255,0) 100%);
-  background: linear-gradient(to bottom,  rgba(255,255,255,0.1) 0%,rgba(255,255,255,0) 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1affffff', endColorstr='#00ffffff',GradientType=0 );
-}
-
-td p {
-  font-size: 16px;
-}
-
-td p code {
-  font-size: 14px;
-}
-
-code.option, th .option, code.filter, th .filter {
-  color: #50B600;
-}
-
-code.flag, th .flag, code.output, th .output {
-  color: #049DCE;
-}
-
-code.option, code.flag, code.filter, code.output {
-  margin-bottom: 2px;
-}
-
-/* Note types */
-
-.note {
-  margin: 30px 0;
-  margin-left: -30px;
-  padding: 20px 20px 24px;
-  padding-left: 50px;
-  border-radius: 0 5px 5px 0;
-  position: relative;
-  box-shadow: 0 1px 5px rgba(0, 0, 0, .3), inset 0 1px 0 rgba(255,255,255,.2), inset 0 -1px 0 rgba(0,0,0,.3);
-  background: #7e6d42;
-  background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzdlNmQ0MiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3At [...]
-  background: -moz-linear-gradient(top,  #7e6d42 0%, #5c4e35 100%);
-  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#7e6d42), color-stop(100%,#5c4e35));
-  background: -webkit-linear-gradient(top,  #7e6d42 0%,#5c4e35 100%);
-  background: -o-linear-gradient(top,  #7e6d42 0%,#5c4e35 100%);
-  background: -ms-linear-gradient(top,  #7e6d42 0%,#5c4e35 100%);
-  background: linear-gradient(to bottom,  #7e6d42 0%,#5c4e35 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#7e6d42', endColorstr='#5c4e35',GradientType=0 );
-}
-
- at media (max-width: 568px){
-  .note {
-    margin-right: -30px;
-  }
-}
-
- at media (min-width: 768px){
-  .note {
-    margin-left: -50px;
-  }
-}
-
-.note:before {
-  content: "";
-  position: absolute;
-  top: -10px;
-  left: 0px;
-  border-color: transparent #222 #222 transparent;
-  border-style: solid;
-  border-width: 5px;
-  width: 0;
-  height: 0;
-}
-
-.note h5, .note p {
-  margin: 0;
-  color: #fff;
-}
-
-.note h5 {
-  line-height: 1.5em;
-  font-weight: 800;
-  font-style: normal;
-}
-
-.note p {
-  font-weight: 400;
-  font-size: .75em;
-}
-
-.info {
-  background: #0389aa;
-  background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAzODlhYSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3At [...]
-  background: -moz-linear-gradient(top,  #0389aa 0%, #00617f 100%);
-  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#0389aa), color-stop(100%,#00617f));
-  background: -webkit-linear-gradient(top,  #0389aa 0%,#00617f 100%);
-  background: -o-linear-gradient(top,  #0389aa 0%,#00617f 100%);
-  background: -ms-linear-gradient(top,  #0389aa 0%,#00617f 100%);
-  background: linear-gradient(to bottom,  #0389aa 0%,#00617f 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#0389aa', endColorstr='#00617f',GradientType=0 );
-}
-
-.warning {
-  background: #9e2812;
-  background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzllMjgxMiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3At [...]
-  background: -moz-linear-gradient(top,  #9e2812 0%, #6f0d0d 100%);
-  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#9e2812), color-stop(100%,#6f0d0d));
-  background: -webkit-linear-gradient(top,  #9e2812 0%,#6f0d0d 100%);
-  background: -o-linear-gradient(top,  #9e2812 0%,#6f0d0d 100%);
-  background: -ms-linear-gradient(top,  #9e2812 0%,#6f0d0d 100%);
-  background: linear-gradient(to bottom,  #9e2812 0%,#6f0d0d 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#9e2812', endColorstr='#6f0d0d',GradientType=0 );
-}
-
-.info:before {
-  border-color: transparent #00617f #00617f transparent;
-}
-
-.warning:before {
-  border-color: transparent #6f0d0d #6f0d0d transparent;
-}
-
-.note:after {
-  content: "★";
-  color: #fc0;
-  position: absolute;
-  top: 14px;
-  left: 14px;
-  font-size: 28px;
-  font-weight: bold;
-  text-shadow: 0 -1px 0 rgba(0,0,0,.5);
-}
-
-.info:after {
-  content: "ⓘ";
-  color: #fff;
-  position: absolute;
-  top: 15px;
-  left: 15px;
-  font-size: 28px;
-  font-weight: bold;
-  text-shadow: 0 -1px 0 rgba(0,0,0,.5);
-}
-
-.warning:after {
-  content: "‼";
-  color: #fc0;
-  position: absolute;
-  top: 15px;
-  left: 15px;
-  font-size: 32px;
-  font-weight: bold;
-  text-shadow: 0 -1px 0 rgba(0,0,0,.5);
-}
-
-/* Responsive tables */
-
- at media (max-width: 768px){
-  .mobile-side-scroller {
-    overflow-x: scroll;
-    margin: 0 -40px;
-    padding: 0 10px;
-  }
-}
diff --git a/site/docs/assets.md b/site/docs/assets.md
new file mode 100644
index 0000000..b733e0e
--- /dev/null
+++ b/site/docs/assets.md
@@ -0,0 +1,52 @@
+---
+layout: docs
+title: Assets
+prev_section: datafiles
+next_section: migrations
+permalink: /docs/assets/
+---
+
+Jekyll provides built-in support for Sass and CoffeeScript. In order to use
+them, create a file with the proper extension name (one of `.sass`, `.scss`,
+or `.coffee`) and start the file with two lines of triple dashes, like this:
+
+{% highlight sass %}
+---
+---
+
+// start content
+.my-definition
+  font-size: 1.2em
+{% endhighlight %}
+
+Jekyll treats these files the same as a regular page, in that the output file
+will be placed in the same directory that it came from. For instance, if you
+have a file named `/css/styles.scss` in your site's source folder, Jekyll
+will process it and put it in your site's destination folder under
+`/css/styles.css`.
+
+## Sass/SCSS
+
+Jekyll allows you to customize your Sass conversion in certain ways.
+
+If you are using Sass `@import` statements, you'll need to ensure that your
+`sass_dir` is set to the base directory that contains your Sass files. You
+can do that thusly:
+
+{% highlight yaml %}
+sass:
+    sass_dir: _sass
+{% endhighlight %}
+
+The Sass converter will default to `_sass`.
+
+You may also specify the output style with the `style` option in your
+`_config.yml` file:
+
+{% highlight yaml %}
+sass:
+    style: :compressed
+{% endhighlight %}
+
+These are passed to Sass, so any output style options Sass supports are valid
+here, too.
diff --git a/site/docs/collections.md b/site/docs/collections.md
new file mode 100644
index 0000000..1cbd5d0
--- /dev/null
+++ b/site/docs/collections.md
@@ -0,0 +1,201 @@
+---
+layout: docs
+title: Collections
+prev_section: variables
+next_section: datafiles
+permalink: /docs/collections/
+---
+
+<div class="note warning">
+  <h5>Collections support is unstable and may change</h5>
+  <p>
+    This is an experimental feature and that the API may likely change until the feature stabilizes.
+  </p>
+</div>
+
+Not everything is a post or a page. Maybe you want to document the various methods in your open source project, members of a team, or talks at a conference. Collections allow you to define a new type of document that behave like Pages or Posts do normally, but also have their own unique properties and namespace.
+
+## Using Collections
+
+### Step 1: Tell Jekyll to read in your collection
+
+Add the following to your site's `_config.yml` file, replacing `my_collection` with the name of your collection:
+
+{% highlight yaml %}
+collections:
+- my_collection
+{% endhighlight %}
+
+You can optionally specify metadata for your collection in the configuration:
+
+{% highlight yaml %}
+collections:
+  my_collection:
+    foo: bar
+{% endhighlight %}
+
+### Step 2: Add your content
+
+Create a corresponding folder (e.g. `<source>/_my_collection`) and add documents.
+YAML front-matter is read in as data if it exists, if not, then everything is just stuck in the Document's `content` attribute.
+
+Note: the folder must be named identical to the collection you defined in you config.yml file, with the addition of the preceding `_` character.
+
+### Step 3: Optionally render your collection's documents into independent files
+
+If you'd like Jekyll to create a public-facing, rendered version of each document in your collection, set the `output` key to `true` in your collection metadata in your `_config.yml`:
+
+{% highlight yaml %}
+collections:
+  my_collection:
+    output: true
+{% endhighlight %}
+
+This will produce a file for each document in the collection.
+For example, if you have `_my_collection/some_subdir/some_doc.md`,
+it will be rendered using Liquid and the Markdown converter of your
+choice and written out to `<dest>/my_collection/some_subdir/some_doc.html`.
+
+## Liquid Attributes
+
+### Collections
+
+Each collection is accessible via the `site` Liquid variable. For example, if you want to access the `albums` collection found in `_albums`, you'd use `site.albums`. Each collection is itself an array of documents (e.g. `site.albums` is an array of documents, much like `site.pages` and `site.posts`). See below for how to access attributes of those documents.
+
+The collections are also available under `site.collections`, with the metadata you specified in your `_config.yml` (if present) and the following information:
+
+<div class="mobile-side-scroller">
+<table>
+  <thead>
+    <tr>
+      <th>Variable</th>
+      <th>Description</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td>
+        <p><code>label</code></p>
+      </td>
+      <td>
+        <p>
+          The name of your collection, e.g. <code>my_collection</code>.
+        </p>
+      </td>
+    </tr>
+    <tr>
+      <td>
+        <p><code>docs</code></p>
+      </td>
+      <td>
+        <p>
+          An array of <a href="#documents">documents</a>.
+        </p>
+      </td>
+    </tr>
+    <tr>
+      <td>
+        <p><code>relative_directory</code></p>
+      </td>
+      <td>
+        <p>
+          The path to the collections's source directory, relative to the site source.
+        </p>
+      </td>
+    </tr>
+    <tr>
+      <td>
+        <p><code>directory</code></p>
+      </td>
+      <td>
+        <p>
+          The full path to the collections's source directory..
+        </p>
+      </td>
+    </tr>
+    <tr>
+      <td>
+        <p><code>output</code></p>
+      </td>
+      <td>
+        <p>
+          Whether the collection's documents will be output as individual files.
+        </p>
+      </td>
+    </tr>
+  </tbody>
+</table>
+</div>
+
+
+### Documents
+
+In addition to any YAML front-matter provided in the document's corresponding file, each document has the following attributes:
+
+<div class="mobile-side-scroller">
+<table>
+  <thead>
+    <tr>
+      <th>Variable</th>
+      <th>Description</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td>
+        <p><code>content</code></p>
+      </td>
+      <td>
+        <p>
+          The (unrendered) content of the document. If no YAML front-matter is provided,
+          this is the entirety of the file contents. If YAML front-matter
+          is used, then this is all the contents of the file after the terminating
+          `---` of the front-matter.
+        </p>
+      </td>
+    </tr>
+    <tr>
+      <td>
+        <p><code>output</code></p>
+      </td>
+      <td>
+        <p>
+          The rendered output of the document, based on the <code>content</code>.
+        </p>
+      </td>
+    </tr>
+    <tr>
+      <td>
+        <p><code>path</code></p>
+      </td>
+      <td>
+        <p>
+          The full path to the document's source file.
+        </p>
+      </td>
+    </tr>
+    <tr>
+      <td>
+        <p><code>relative_path</code></p>
+      </td>
+      <td>
+        <p>
+          The path to the document's source file relative to the site source.
+        </p>
+      </td>
+    </tr>
+    <tr>
+      <td>
+        <p><code>url</code></p>
+      </td>
+      <td>
+        <p>
+          The URL of the rendered collection. The file is only written to the
+          destination when the name of the collection to which it belongs is
+          included in the <code>render</code> key in the site's configuration file.
+        </p>
+      </td>
+    </tr>
+  </tbody>
+</table>
+</div>
diff --git a/site/docs/configuration.md b/site/docs/configuration.md
index 1594d75..bae427e 100644
--- a/site/docs/configuration.md
+++ b/site/docs/configuration.md
@@ -31,90 +31,108 @@ class="flag">flags</code> (specified on the command-line) that control them.
     </tr>
   </thead>
   <tbody>
-    <tr class='setting'>
+    <tr class="setting">
       <td>
-        <p class='name'><strong>Site Source</strong></p>
-        <p class='description'>Change the directory where Jekyll will read files</p>
+        <p class="name"><strong>Site Source</strong></p>
+        <p class="description">Change the directory where Jekyll will read files</p>
       </td>
       <td class="align-center">
         <p><code class="option">source: DIR</code></p>
         <p><code class="flag">-s, --source DIR</code></p>
       </td>
     </tr>
-    <tr class='setting'>
+    <tr class="setting">
       <td>
-        <p class='name'><strong>Site Destination</strong></p>
-        <p class='description'>Change the directory where Jekyll will write files</p>
+        <p class="name"><strong>Site Destination</strong></p>
+        <p class="description">Change the directory where Jekyll will write files</p>
       </td>
       <td class="align-center">
         <p><code class="option">destination: DIR</code></p>
         <p><code class="flag">-d, --destination DIR</code></p>
       </td>
     </tr>
-    <tr class='setting'>
+    <tr class="setting">
       <td>
-        <p class='name'><strong>Safe</strong></p>
-        <p class='description'>Disable <a href="../plugins/">custom plugins</a>.</p>
+        <p class="name"><strong>Safe</strong></p>
+        <p class="description">Disable <a href="../plugins/">custom plugins, and ignore symbolic links</a>.</p>
       </td>
       <td class="align-center">
         <p><code class="option">safe: BOOL</code></p>
         <p><code class="flag">--safe</code></p>
       </td>
     </tr>
-    <tr class='setting'>
+    <tr class="setting">
       <td>
-        <p class='name'><strong>Exclude</strong></p>
-        <p class="description">Exclude directories and/or files from the conversion</p>
+        <p class="name"><strong>Exclude</strong></p>
+        <p class="description">
+          Exclude directories and/or files from the
+          conversion. These exclusions are relative to the site's
+          source directory and cannot be outside the source directory.
+        </p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p><code class="option">exclude: [DIR, FILE, ...]</code></p>
       </td>
     </tr>
-    <tr class='setting'>
+    <tr class="setting">
       <td>
-        <p class='name'><strong>Include</strong></p>
+        <p class="name"><strong>Include</strong></p>
         <p class="description">
           Force inclusion of directories and/or files in the conversion.
           <code>.htaccess</code> is a good example since dotfiles are excluded
           by default.
         </p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p><code class="option">include: [DIR, FILE, ...]</code></p>
       </td>
     </tr>
-    <tr class='setting'>
+    <tr class="setting">
       <td>
-        <p class='name'><strong>Time Zone</strong></p>
+        <p class="name"><strong>Time Zone</strong></p>
         <p class="description">
             Set the time zone for site generation. This sets the <code>TZ</code>
             environment variable, which Ruby uses to handle time and date
             creation and manipulation. Any entry from the
             <a href="http://en.wikipedia.org/wiki/Tz_database">IANA Time Zone
-            Database</a> is valid, e.g. <code>America/New_York</code>. The default
-            is the local time zone, as set by your operating system.
+            Database</a> is valid, e.g. <code>America/New_York</code>. A list of all
+            available values can be found <a href="http://en.wikipedia.org/wiki/List_of_tz_database_time_zones">
+            here</a>. The default is the local time zone, as set by your operating system.
         </p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p><code class="option">timezone: TIMEZONE</code></p>
       </td>
     </tr>
-    <tr class='setting'>
+    <tr class="setting">
       <td>
-        <p class='name'><strong>Encoding</strong></p>
+        <p class="name"><strong>Encoding</strong></p>
         <p class="description">
             Set the encoding of files by name. Only available for Ruby
             1.9 or later).
-            The default value is nil, which use Ruby default,
-            <code>ASCII-8BIT</code>.
-            Available encoding for the ruby in use, can be shown by
-            command <code>ruby -e 'puts Encoding::list.join("\n")'</code>
+            The default value is <code>utf-8</code> starting in 2.0.0,
+            and <code>nil</code> before 2.0.0, which will yield the Ruby
+            default of <code>ASCII-8BIT</code>.
+            Available encodings can be shown by the
+            command <code>ruby -e 'puts Encoding::list.join("\n")'</code>.
         </p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p><code class="option">encoding: ENCODING</code></p>
       </td>
     </tr>
+    <tr>
+      <td>
+        <p class='name'><strong>Defaults</strong></p>
+        <p class='description'>
+            Set defaults for <a href="../frontmatter/" title="YAML frontmatter">YAML frontmatter</a>
+            variables.
+        </p>
+      </td>
+      <td class='align-center'>
+        <p>see <a href="#frontmatter-defaults" title="details">below</a></p>
+      </td>
+    </tr>
   </tbody>
 </table>
 </div>
@@ -130,59 +148,59 @@ class="flag">flags</code> (specified on the command-line) that control them.
     </tr>
   </thead>
   <tbody>
-    <tr class='setting'>
+    <tr class="setting">
       <td>
-        <p class='name'><strong>Regeneration</strong></p>
-        <p class='description'>Enable auto-regeneration of the site when files are modified.</p>
+        <p class="name"><strong>Regeneration</strong></p>
+        <p class="description">Enable auto-regeneration of the site when files are modified.</p>
       </td>
       <td class="align-center">
         <p><code class="flag">-w, --watch</code></p>
       </td>
     </tr>
-    <tr class='setting'>
+    <tr class="setting">
       <td>
-        <p class='name'><strong>Configuration</strong></p>
+        <p class="name"><strong>Configuration</strong></p>
         <p class="description">Specify config files instead of using <code>_config.yml</code> automatically. Settings in later files override settings in earlier files.</p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p><code class="flag">--config FILE1[,FILE2,...]</code></p>
       </td>
     </tr>
-    <tr class='setting'>
+    <tr class="setting">
       <td>
-        <p class='name'><strong>Drafts</strong></p>
+        <p class="name"><strong>Drafts</strong></p>
         <p class="description">Process and render draft posts.</p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p><code class="flag">--drafts</code></p>
       </td>
     </tr>
-    <tr class='setting'>
+    <tr class="setting">
       <td>
-        <p class='name'><strong>Future</strong></p>
+        <p class="name"><strong>Future</strong></p>
         <p class="description">Publish posts with a future date.</p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p><code class="option">future: BOOL</code></p>
         <p><code class="flag">--future</code></p>
       </td>
     </tr>
-    <tr class='setting'>
+    <tr class="setting">
       <td>
-        <p class='name'><strong>LSI</strong></p>
+        <p class="name"><strong>LSI</strong></p>
         <p class="description">Produce an index for related posts.</p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p><code class="option">lsi: BOOL</code></p>
         <p><code class="flag">--lsi</code></p>
       </td>
     </tr>
-    <tr class='setting'>
+    <tr class="setting">
       <td>
-        <p class='name'><strong>Limit Posts</strong></p>
+        <p class="name"><strong>Limit Posts</strong></p>
         <p class="description">Limit the number of posts to parse and publish.</p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p><code class="option">limit_posts: NUM</code></p>
         <p><code class="flag">--limit_posts NUM</code></p>
       </td>
@@ -206,40 +224,40 @@ before your site is served.
     </tr>
   </thead>
   <tbody>
-    <tr class='setting'>
+    <tr class="setting">
       <td>
-        <p class='name'><strong>Local Server Port</strong></p>
-        <p class='description'>Listen on the given port.</p>
+        <p class="name"><strong>Local Server Port</strong></p>
+        <p class="description">Listen on the given port.</p>
       </td>
       <td class="align-center">
         <p><code class="option">port: PORT</code></p>
         <p><code class="flag">--port PORT</code></p>
       </td>
     </tr>
-    <tr class='setting'>
+    <tr class="setting">
       <td>
-        <p class='name'><strong>Local Server Hostname</strong></p>
-        <p class='description'>Listen at the given hostname.</p>
+        <p class="name"><strong>Local Server Hostname</strong></p>
+        <p class="description">Listen at the given hostname.</p>
       </td>
       <td class="align-center">
         <p><code class="option">host: HOSTNAME</code></p>
         <p><code class="flag">--host HOSTNAME</code></p>
       </td>
     </tr>
-    <tr class='setting'>
+    <tr class="setting">
       <td>
-        <p class='name'><strong>Base URL</strong></p>
-        <p class='description'>Serve the website from the given base URL</p>
+        <p class="name"><strong>Base URL</strong></p>
+        <p class="description">Serve the website from the given base URL</p>
       </td>
       <td class="align-center">
         <p><code class="option">baseurl: URL</code></p>
         <p><code class="flag">--baseurl URL</code></p>
       </td>
     </tr>
-    <tr class='setting'>
+    <tr class="setting">
       <td>
-        <p class='name'><strong>Detach</strong></p>
-        <p class='description'>Detach the server from the terminal</p>
+        <p class="name"><strong>Detach</strong></p>
+        <p class="description">Detach the server from the terminal</p>
       </td>
       <td class="align-center">
         <p><code class="option">detach: BOOL</code></p>
@@ -258,6 +276,43 @@ before your site is served.
   </p>
 </div>
 
+## Frontmatter defaults
+
+You can set default values for your [YAML frontmatter](../frontmatter/) variables
+in your configuration. This way, you can for example set default layouts or define
+defaults for your custom variables. Of course, any variable actually specified in
+the front matter overrides the defaults.
+
+All defaults go under the `defaults` key, which holds a list of scope-values combinations ("default sets").
+The `scope` key defines for which files the defaults apply, limiting them by their source file `path` and
+optionally by their `type` (`page`, `post` or `draft`). The `values` key holds the actual list of defaults.
+
+For example:
+{% highlight yaml %}
+defaults:
+  -
+    scope:
+      path: "" # empty string for all files
+    values:
+      layout: "my-site"
+  -
+    scope:
+      path: "about/blog"
+      type: "post"
+    values:
+      layout: "meta-blog" # overrides previous default layout
+      author: "Dr. Hyde"
+{% endhighlight %}
+
+With these defaults, all pages and posts would default to the `my-site` layout except for the posts under `about/blog`,
+who would default to the `meta-blog` layout and also have the `page.author` [liquid variable](../variables/) set to `Dr. Hyde` by default.
+
+### Precedence
+You can have multiple sets of frontmatter defaults that specify defaults for the same setting. In this case, for each page or post,
+the default set with the more specific scope takes precedence. This way, you can specify defaults for a path like `/site/blog` that would
+override any defaults for `/site`. Also, if the paths are equal, a scope with a specified type is more specific. If two sets are equally
+specific, the bottom-most takes precedence.
+
 ## Default Configuration
 
 Jekyll runs with the following configuration options by default. Unless
@@ -288,15 +343,16 @@ encoding:    nil
 future:      true
 show_drafts: nil
 limit_posts: 0
-pygments:    true
+highlighter: pygments
 
 relative_permalinks: true
 
 permalink:     date
 paginate_path: 'page:num'
+paginate:      nil
 
-markdown:      maruku
-markdown_ext:  markdown,mkd,mkdn,md
+markdown:      kramdown
+markdown_ext:  markdown,mkdown,mkdn,mkd,md
 textile_ext:   textile
 
 excerpt_separator: "\n\n"
@@ -306,7 +362,7 @@ watch:       false    # deprecated
 server:      false    # deprecated
 host:        0.0.0.0
 port:        4000
-baseurl:     /
+baseurl:     ""
 url:         http://localhost:4000
 lsi:         false
 
@@ -344,7 +400,6 @@ redcloth:
   hard_breaks: true
 {% endhighlight %}
 
-
 ## Markdown Options
 
 The various Markdown renderers supported by Jekyll sometimes have extra options available.
@@ -363,7 +418,7 @@ Jekyll handles two special Redcarpet extensions:
         # ...ruby code
         ```
 
-    With both fenced code blocks and pygments enabled, this will statically highlight the code; without pygments, it will add a `class="LANGUAGE"` attribute to the `<code>` element, which can be used as a hint by various JavaScript code highlighting libraries.
+    With both fenced code blocks and highlighter enabled, this will statically highlight the code; without any syntax highlighter, it will add a `class="LANGUAGE"` attribute to the `<code>` element, which can be used as a hint by various JavaScript code highlighting libraries.
 - `smart` --- This pseudo-extension turns on SmartyPants, which converts straight quotes to curly quotes and runs of hyphens to em (`---`) and en (`--`) dashes.
 
 All other extensions retain their usual names from Redcarpet, and no renderer options aside from `smart` can be specified in Jekyll. [A list of available extensions can be found in the Redcarpet README file.][redcarpet_extensions] Make sure you're looking at the README for the right version of Redcarpet: Jekyll currently uses v2.2.x, and extensions like `footnotes` and `highlight` weren't added until after version 3.0.0. The most commonly used extensions are:
@@ -373,3 +428,39 @@ All other extensions retain their usual names from Redcarpet, and no renderer op
 - `autolink`
 
 [redcarpet_extensions]: https://github.com/vmg/redcarpet/blob/v2.2.2/README.markdown#and-its-like-really-simple-to-use
+
+### Kramdown
+
+In addition to the defaults mentioned above, you can also turn on recognition of Github Flavored Markdown by passing an `input` option with a value of "GFM".
+
+For example, in your `_config.yml`:
+
+    kramdown:
+      input: GFM
+
+### Custom Markdown Processors
+
+If you're interested in creating a custom markdown processor, you're in luck! Create a new class in the `Jekyll::Converters::Markdown` namespace:
+
+{% highlight ruby %}
+class Jekyll::Converters::Markdown::MyCustomProcessor
+  def initialize(config)
+    require 'funky_markdown'
+    @config = config
+  rescue LoadError
+    STDERR.puts 'You are missing a library required for Markdown. Please run:'
+    STDERR.puts '  $ [sudo] gem install funky_markdown'
+    raise FatalException.new("Missing dependency: funky_markdown")
+  end
+
+  def convert(content)
+    ::FunkyMarkdown.new(content).convert
+  end
+end
+{% endhighlight %}
+
+Once you've created your class and have it properly setup either as a plugin in the `_plugins` folder or as a gem, specify it in your `_config.yml`:
+
+{% highlight yaml %}
+markdown: MyCustomProcessor
+{% endhighlight %}
diff --git a/site/docs/contributing.md b/site/docs/contributing.md
index 0740e32..909ab92 100644
--- a/site/docs/contributing.md
+++ b/site/docs/contributing.md
@@ -85,7 +85,7 @@ git checkout -b my_awesome_feature
 git push origin my_awesome_feature
 {% endhighlight %}
 
-* Create a pull request against mojombo/jekyll:master and describe what your
+* Create a pull request against jekyll/jekyll:master and describe what your
   change does and the why you think it should be merged.
 
 Updating Documentation
@@ -102,16 +102,21 @@ Jekyll's repo on GitHub.com.
 All documentation pull requests should be directed at `master`.  Pull
 requests directed at another branch will not be accepted.
 
-The [Jekyll wiki]({{ site.repository }}/wiki) on GitHub 
-can be freely updated without a pull request as all 
+The [Jekyll wiki]({{ site.repository }}/wiki) on GitHub
+can be freely updated without a pull request as all
 GitHub users have access.
 
+If you want to add your plugin to the [list of plugins](/docs/plugins/#available_plugins),
+please submit a pull request modifying the [plugins page source
+file]({{ site.repository }}/blob/master/site/docs/plugins.md) by adding a
+link to your plugin under the proper subheading depending upon its type.
+
 Gotchas
 -------
 
 * If you want to bump the gem version, please put that in a separate commit.
   This way, the maintainers can control when the gem gets released.
-* Try to keep your patch(es) based from the latest commit on mojombo/jekyll.
+* Try to keep your patch(es) based from the latest commit on jekyll/jekyll.
   The easier it is to apply your work, the less work the maintainers have to do,
   which is always a good thing.
 * Please don't tag your GitHub issue with \[fix\], \[feature\], etc. The maintainers
diff --git a/site/docs/datafiles.md b/site/docs/datafiles.md
index 93b50aa..1dbe409 100644
--- a/site/docs/datafiles.md
+++ b/site/docs/datafiles.md
@@ -1,26 +1,26 @@
 ---
 layout: docs
 title: Data Files
-prev_section: variables
-next_section: migrations
+prev_section: collections
+next_section: assets
 permalink: /docs/datafiles/
 ---
 
 In addition to the [built-in variables](../variables/) available from Jekyll,
-you can specify your own custom data that can be accessed via the [Liquid 
+you can specify your own custom data that can be accessed via the [Liquid
 templating system](http://wiki.github.com/shopify/liquid/liquid-for-designers).
 
-Jekyll supports loading data from [YAML](http://yaml.org/) files located in the 
+Jekyll supports loading data from [YAML](http://yaml.org/) files located in the
 `_data` directory.
 
-This powerful features allows you to avoid repetition in your templates and to
-set site specific options without changing `_config.yml`. 
+This powerful feature allows you to avoid repetition in your templates and to
+set site specific options without changing `_config.yml`.
 
 Plugins/themes can also leverage Data Files to set configuration variables.
 
 ## The Data Folder
 
-As explained on the [directory structure](../structure/) page, the `_data` 
+As explained on the [directory structure](../structure/) page, the `_data`
 folder is where you can store additional data for Jekyll to use when generating
 your site. These files must be YAML files (using either the `.yml` or `.yaml`
 extension) and they will be accessible via `site.data`.
diff --git a/site/docs/deployment-methods.md b/site/docs/deployment-methods.md
index 6922a9d..97bbdef 100644
--- a/site/docs/deployment-methods.md
+++ b/site/docs/deployment-methods.md
@@ -27,7 +27,7 @@ There are also a number of ways to easily automate the deployment of a Jekyll si
 
 ### Git post-update hook
 
-If you store your jekyll site in [Git](http://git-scm.com/) (you are using version control, right?), it’s pretty easy to automate the
+If you store your Jekyll site in [Git](http://git-scm.com/) (you are using version control, right?), it’s pretty easy to automate the
 deployment process by setting up a post-update hook in your Git
 repository, [like
 this](http://web.archive.org/web/20091223025644/http://www.taknado.com/en/2009/03/26/deploying-a-jekyll-generated-site/).
@@ -86,7 +86,7 @@ this script from within Textmate.
 
 ## Rack-Jekyll
 
-[Rack-Jekyll](http://github.com/bry4n/rack-jekyll/) is an easy way to deploy your site on any Rack server such as Amazon EC2, Slicehost, Heroku, and so forth. It also can run with [shotgun](http://github.com/rtomakyo/shotgun/), [rackup](http://github.com/rack/rack), [mongrel](http://github.com/mongrel/mongrel), [unicorn](http://github.com/defunkt/unicorn/), and [others](https://github.com/adaoraul/rack-jekyll#readme).
+[Rack-Jekyll](http://github.com/adaoraul/rack-jekyll/) is an easy way to deploy your site on any Rack server such as Amazon EC2, Slicehost, Heroku, and so forth. It also can run with [shotgun](http://github.com/rtomakyo/shotgun/), [rackup](http://github.com/rack/rack), [mongrel](http://github.com/mongrel/mongrel), [unicorn](http://github.com/defunkt/unicorn/), and [others](https://github.com/adaoraul/rack-jekyll#readme).
 
 Read [this post](http://blog.crowdint.com/2010/08/02/instant-blog-using-jekyll-and-heroku.html) on how to deploy to Heroku using Rack-Jekyll.
 
@@ -103,6 +103,11 @@ dynamically scaling to almost unlimited traffic. This approach has the
 benefit of being about the cheapest hosting option available for
 low-volume blogs as you only pay for what you use.
 
+## OpenShift
+
+If you'd like to deploy your site to an OpenShift gear, there's [a cartridge
+for that](https://github.com/openshift-cartridges/openshift-jekyll-cartridge).
+
 <div class="note">
   <h5>ProTip™: Use GitHub Pages for zero-hassle Jekyll hosting</h5>
   <p>GitHub Pages are powered by Jekyll behind the scenes, so if you’re looking for a zero-hassle, zero-cost solution, GitHub Pages are a great way to <a href="../github-pages/">host your Jekyll-powered website for free</a>.</p>
diff --git a/site/docs/extras.md b/site/docs/extras.md
index 0c190ec..14261e3 100644
--- a/site/docs/extras.md
+++ b/site/docs/extras.md
@@ -16,7 +16,12 @@ Maruku comes with optional support for LaTeX to PNG rendering via blahtex
 Maruku to not assume a fixed location for `dvips`, check out [Remi’s Maruku
 fork](http://github.com/remi/maruku).
 
-## RDiscount
+## Alternative Markdown Processors
+
+While Jekyll defaults to using Maruku for Markdown conversion, you may use one
+of the other three pre-defined markdown parsers or define your own.
+
+### RDiscount
 
 If you prefer to use [RDiscount](http://github.com/rtomayko/rdiscount) instead
 of [Maruku](http://github.com/bhollis/maruku) for Markdown, just make sure you have
@@ -34,7 +39,7 @@ have Jekyll run with that option.
 markdown: rdiscount
 {% endhighlight %}
 
-## Kramdown
+### Kramdown
 
 You can also use [Kramdown](http://kramdown.rubyforge.org/) instead of Maruku
 for Markdown. Make sure that Kramdown is installed:
@@ -54,3 +59,34 @@ Kramdown has various options for customizing the HTML output. The
 [Configuration](/docs/configuration/) page lists the default options used by
 Jekyll. A complete list of options is also available on the [Kramdown
 website](http://kramdown.rubyforge.org/options.html).
+
+### User-Defined
+
+So, you're totally at odds with our four built-in markdown parsers, eh? No
+sweat. You can define one as a plugin:
+
+{% highlight ruby %}
+require 'jekyll'
+require 'some_renderer'
+
+class Jekyll::Converters::Markdown::MyCustomParser
+  def initialize(config)
+    @site_config = config
+  end
+
+  def convert(content)
+    # (this _must_ return the resulting String after the rendering)
+    SomeRenderer.new(@site_config).to_html(content)
+  end
+end
+{% endhighlight %}
+
+Once you've got that setup, ask Jekyll to use your custom markdown parser in
+your `_config.yml` file:
+
+{% highlight yaml %}
+markdown: MyCustomParser
+{% endhighlight %}
+
+(Note that this **is case-sensitive**, and is only the piece after
+`Jekyll::Converters::Markdown`.) And there you are!
diff --git a/site/docs/frontmatter.md b/site/docs/frontmatter.md
index 98c15cc..7f218ed 100644
--- a/site/docs/frontmatter.md
+++ b/site/docs/frontmatter.md
@@ -30,7 +30,8 @@ relies on.
   <p>
     If you use UTF-8 encoding, make sure that no <code>BOM</code> header
     characters exist in your files or very, very bad things will happen to
-    Jekyll. This is especially relevant if you’re running Jekyll on Windows.
+    Jekyll. This is especially relevant if you’re running
+    <a href="../windows/">Jekyll on Windows</a>.
   </p>
 </div>
 
@@ -178,3 +179,13 @@ These are available out-of-the-box to be used in the front-matter for a post.
   </tbody>
 </table>
 </div>
+
+<div class="note">
+  <h5>ProTip™: Don't repeat yourself</h5>
+  <p>
+    If you don't want to repeat your frequently used front-matter variables over and over,
+    just define <a href="../configuration/#frontmatter-defaults" title="frontmatter defaults">defaults</a>
+    for them and only override them where necessary (or not at all). This works both for predefined
+    and custom variables.
+  </p>
+</div>
diff --git a/site/docs/github-pages.md b/site/docs/github-pages.md
index d5036c5..c73046e 100644
--- a/site/docs/github-pages.md
+++ b/site/docs/github-pages.md
@@ -65,7 +65,7 @@ whilst maintaining the ability to preview your Jekyll site locally.
 1. In `_config.yml`, set the `baseurl` option to `/project-name` -- note the
    leading slash and the **absence** of a trailing slash.
 2. When referencing JS or CSS files, do it like this:
-   `{% raw %}{{ site.baseurl}}/path/to/css.css{% endraw %}` -- note the slash
+   `{% raw %}{{ site.baseurl }}/path/to/css.css{% endraw %}` -- note the slash
    immediately following the variable (just before "path").
 3. When doing permalinks or internal links, do it like this:
    `{% raw %}{{ site.baseurl }}{{ post.url }}{% endraw %}` -- note that there
diff --git a/site/docs/history.md b/site/docs/history.md
index 5520537..630fe24 100644
--- a/site/docs/history.md
+++ b/site/docs/history.md
@@ -5,6 +5,282 @@ permalink: "/docs/history/"
 prev_section: contributing
 ---
 
+## 2.0.3 / 2014-05-08
+
+### Bug Fixes
+
+- Properly prefix links in site template with URL or baseurl depending upon
+    need. ([#2319]({{ site.repository }}/issues/2319))
+- Update gist tag comments and error message to require username ([#2326]({{ site.repository }}/issues/2326))
+- Fix `permalink` setting in site template ([#2331]({{ site.repository }}/issues/2331))
+- Don't fail if any of the path objects are nil ([#2325]({{ site.repository }}/issues/2325))
+- Instantiate all descendants for converters and generators, not just
+    direct subclasses ([#2334]({{ site.repository }}/issues/2334))
+- Replace all instances of `site.name` with `site.title` in site template ([#2324]({{ site.repository }}/issues/2324))
+- `Jekyll::Filters#time` now accepts UNIX timestamps in string or number form ([#2339]({{ site.repository }}/issues/2339))
+- Use `item_property` for `where` filter so it doesn't break on collections ([#2359]({{ site.repository }}/issues/2359))
+- Rescue errors thrown so `--watch` doesn't fail ([#2364]({{ site.repository }}/issues/2364))
+
+### Site Enhancements
+
+- Add missing "as" to assets docs page ([#2337]({{ site.repository }}/issues/2337))
+- Update docs to reflect new `baseurl` default ([#2341]({{ site.repository }}/issues/2341))
+- Add links to headers who have an ID. ([#2342]({{ site.repository }}/issues/2342))
+- Use symbol instead of HTML number in `upgrading.md` ([#2351]({{ site.repository }}/issues/2351))
+- Fix link to frontmatter defaults docs ([#2353]({{ site.repository }}/issues/2353))
+- Fix for `History.markdown` in order to fix history page in docs ([#2363]({{ site.repository }}/issues/2363))
+
+## 2.0.2 / 2014-05-07
+
+### Bug Fixes
+
+- Correct use of `url` and `baseurl` in the site template. ([#2317]({{ site.repository }}/issues/2317))
+- Default `baseurl` to `""` ([#2317]({{ site.repository }}/issues/2317))
+
+### Site Enhancements
+
+- Correct docs for the `gist` plugin so it always includes the username. ([#2314]({{ site.repository }}/issues/2314))
+- Clarify new (defaults, `where` filter) features in docs ([#2316]({{ site.repository }}/issues/2316))
+
+## 2.0.1 / 2014-05-06
+
+### Bug Fixes
+
+- Require `kramdown` gem instead of `maruku` gem
+
+## 2.0.0 / 2014-05-06
+
+### Major Enhancements
+- Add "Collections" feature ([#2199]({{ site.repository }}/issues/2199))
+- Add gem-based plugin whitelist to safe mode ([#1657]({{ site.repository }}/issues/1657))
+- Replace the commander command line parser with a more robust
+    solution for our needs called `mercenary` ([#1706]({{ site.repository }}/issues/1706))
+- Remove support for Ruby 1.8.x ([#1780]({{ site.repository }}/issues/1780))
+- Move to jekyll/jekyll from mojombo/jekyll ([#1817]({{ site.repository }}/issues/1817))
+- Allow custom markdown processors ([#1872]({{ site.repository }}/issues/1872))
+- Provide support for the Rouge syntax highlighter ([#1859]({{ site.repository }}/issues/1859))
+- Provide support for Sass ([#1932]({{ site.repository }}/issues/1932))
+- Provide a 300% improvement when generating sites that use
+    `Post#next` or `Post#previous` ([#1983]({{ site.repository }}/issues/1983))
+- Provide support for CoffeeScript ([#1991]({{ site.repository }}/issues/1991))
+- Replace Maruku with Kramdown as Default Markdown Processor ([#1988]({{ site.repository }}/issues/1988))
+- Expose `site.static_files` to Liquid ([#2075]({{ site.repository }}/issues/2075))
+- Complete redesign of the template site generated by `jekyll new` ([#2050]({{ site.repository }}/issues/2050))
+- Update Listen from 1.x to 2.x ([#2097]({{ site.repository }}/issues/2097))
+- Front-matter defaults ([#2205]({{ site.repository }}/issues/2205))
+- Deprecate `relative_permalinks` configuration option (default to `false`) ([#2307]({{ site.repository }}/issues/2307))
+- Exclude files based on prefix as well as `fnmatch?` ([#2303]({{ site.repository }}/issues/2303))
+
+### Minor Enhancements
+- Move the EntryFilter class into the Jekyll module to avoid polluting the
+    global namespace ([#1800]({{ site.repository }}/issues/1800))
+- Add `group_by` Liquid filter create lists of items grouped by a common
+    property's value ([#1788]({{ site.repository }}/issues/1788))
+- Add support for Maruku's `fenced_code_blocks` option ([#1799]({{ site.repository }}/issues/1799))
+- Update Redcarpet dependency to ~> 3.0 ([#1815]({{ site.repository }}/issues/1815))
+- Automatically sort all pages by name ([#1848]({{ site.repository }}/issues/1848))
+- Better error message when time is not parseable ([#1847]({{ site.repository }}/issues/1847))
+- Allow `include` tag variable arguments to use filters ([#1841]({{ site.repository }}/issues/1841))
+- `post_url` tag should raise `ArgumentError` for invalid name ([#1825]({{ site.repository }}/issues/1825))
+- Bump dependency `mercenary` to `~> 0.2.0` ([#1879]({{ site.repository }}/issues/1879))
+- Bump dependency `safe_yaml` to `~> 1.0` ([#1886]({{ site.repository }}/issues/1886))
+- Allow sorting of content by custom properties ([#1849]({{ site.repository }}/issues/1849))
+- Add `--quiet` flag to silence output during build and serve ([#1898]({{ site.repository }}/issues/1898))
+- Add a `where` filter to filter arrays based on a key/value pair
+    ([#1875]({{ site.repository }}/issues/1875))
+- Route 404 errors to a custom 404 page in development ([#1899]({{ site.repository }}/issues/1899))
+- Excludes are now relative to the site source ([#1916]({{ site.repository }}/issues/1916))
+- Bring MIME Types file for `jekyll serve` to complete parity with GH Pages
+    servers ([#1993]({{ site.repository }}/issues/1993))
+- Adding Breakpoint to make new site template more responsive ([#2038]({{ site.repository }}/issues/2038))
+- Default to using the UTF-8 encoding when reading files. ([#2031]({{ site.repository }}/issues/2031))
+- Update Redcarpet dependency to ~> 3.1 ([#2044]({{ site.repository }}/issues/2044))
+- Remove support for Ruby 1.9.2 ([#2045]({{ site.repository }}/issues/2045))
+- Add `.mkdown` as valid Markdown extension ([#2048]({{ site.repository }}/issues/2048))
+- Add `index.xml` to the list of WEBrick directory index files ([#2041]({{ site.repository }}/issues/2041))
+- Make the `layouts` config key relative to CWD or to source ([#2058]({{ site.repository }}/issues/2058))
+- Update Kramdown to `~> 1.3` ([#1894]({{ site.repository }}/issues/1894))
+- Remove unnecessary references to `self` ([#2090]({{ site.repository }}/issues/2090))
+- Update to Mercenary v0.3.x ([#2085]({{ site.repository }}/issues/2085))
+- Ship Sass support as a separate gem ([#2098]({{ site.repository }}/issues/2098))
+- Extract core extensions into a Utils module ([#2112]({{ site.repository }}/issues/2112))
+- Refactor CLI & Commands For Greater Happiness ([#2143]({{ site.repository }}/issues/2143))
+- Provide useful error when Pygments returns `nil` and error out ([#2148]({{ site.repository }}/issues/2148))
+- Add support for unpublished drafts ([#2164]({{ site.repository }}/issues/2164))
+- Add `force_polling` option to the `serve` command ([#2165]({{ site.repository }}/issues/2165))
+- Clean up the `<head>` in the site template ([#2186]({{ site.repository }}/issues/2186))
+- Permit YAML blocks to end with three dots to better conform with the
+    YAML spec ([#2110]({{ site.repository }}/issues/2110))
+- Use `File.exist?` instead of deprecated `File.exists?` ([#2214]({{ site.repository }}/issues/2214))
+- Require newline after start of YAML front-matter header ([#2211]({{ site.repository }}/issues/2211))
+- Add the ability for pages to be marked as `published: false` ([#1492]({{ site.repository }}/issues/1492))
+- Add `Jekyll::LiquidExtensions` with `.lookup_variable` method for easy
+    looking up of variable values in a Liquid context. ([#2253]({{ site.repository }}/issues/2253))
+- Remove literal lang name from class ([#2292]({{ site.repository }}/issues/2292))
+- Return `utf-8` encoding in header for  webrick error page response ([#2289]({{ site.repository }}/issues/2289))
+- Make template site easier to customize ([#2268]({{ site.repository }}/issues/2268))
+- Add two-digit year to permalink template option ([#2301]({{ site.repository }}/issues/2301))
+- Add `site.documents` to Liquid payload (list of all docs) ([#2295]({{ site.repository }}/issues/2295))
+- Take into account missing values in the Liquid sort filter ([#2299]({{ site.repository }}/issues/2299))
+
+### Bug Fixes
+- Don't allow nil entries when loading posts ([#1796]({{ site.repository }}/issues/1796))
+- Remove the scrollbar that's always displayed in new sites generated
+    from the site template ([#1805]({{ site.repository }}/issues/1805))
+- Add `#path` to required methods in `Jekyll::Convertible` ([#1866]({{ site.repository }}/issues/1866))
+- Default Maruku fenced code blocks to ON for 2.0.0-dev ([#1831]({{ site.repository }}/issues/1831))
+- Change short opts for host and port for `jekyll docs` to be consistent with
+    other subcommands ([#1877]({{ site.repository }}/issues/1877))
+- Fix typos ([#1910]({{ site.repository }}/issues/1910))
+- Lock Maruku at 0.7.0 to prevent bugs caused by Maruku 0.7.1 ([#1958]({{ site.repository }}/issues/1958))
+- Fixes full path leak to source directory when using include tag ([#1951]({{ site.repository }}/issues/1951))
+- Don't generate pages that aren't being published ([#1931]({{ site.repository }}/issues/1931))
+- Use `SafeYAML.load` to avoid conflicts with other projects ([#1982]({{ site.repository }}/issues/1982))
+- Relative posts should never fail to build ([#1976]({{ site.repository }}/issues/1976))
+- Remove executable bits of non executable files ([#2056]({{ site.repository }}/issues/2056))
+- `#path` for a draft is now `_drafts` instead of `_posts` ([#2042]({{ site.repository }}/issues/2042))
+- Patch a couple show-stopping security vulnerabilities ([#1946]({{ site.repository }}/issues/1946))
+- Sanitize paths uniformly, in a Windows-friendly way ([#2065]({{ site.repository }}/issues/2065), [#2109]({{ site.repository }}/issues/2109))
+- Update gem build steps to work correctly on Windows ([#2118]({{ site.repository }}/issues/2118))
+- Remove obsolete `normalize_options` method call from `bin/jekyll` ([#2121]({{ site.repository }}/issues/2121)).
+- Remove `+` characters from Pygments lexer names when adding as a CSS
+    class ([#994]({{ site.repository }}/issues/994))
+- Remove some code that caused Ruby interpreter warnings ([#2178]({{ site.repository }}/issues/2178))
+- Only strip the drive name if it begins the string ([#2175]({{ site.repository }}/issues/2175))
+- Remove default post with invalid date from site template ([#2200]({{ site.repository }}/issues/2200))
+- Fix `Post#url` and `Page#url` escape ([#1568]({{ site.repository }}/issues/1568))
+- Strip newlines from the {% raw %}`{% highlight %}`{% endraw %} block content ([#1823]({{ site.repository }}/issues/1823))
+- Load in `rouge` only when it's been requested as the highlighter ([#2189]({{ site.repository }}/issues/2189))
+- Convert input to string before XML escaping (`xml_escape` liquid filter) ([#2244]({{ site.repository }}/issues/2244))
+- Modify configuration key for Collections and reset properly. ([#2238]({{ site.repository }}/issues/2238))
+- Avoid duplicated output using `highlight` tag ([#2264]({{ site.repository }}/issues/2264))
+- Only use Jekyll.logger for output ([#2307]({{ site.repository }}/issues/2307))
+- Close the file descriptor in `has_yaml_header?` ([#2310]({{ site.repository }}/issues/2310))
+- Add `output` to `Document` liquid output hash ([#2309]({{ site.repository }}/issues/2309))
+
+### Development Fixes
+- Add a link to the site in the README.md file ([#1795]({{ site.repository }}/issues/1795))
+- Add in History and site changes from `v1-stable` branch ([#1836]({{ site.repository }}/issues/1836))
+- Testing additions on the Excerpt class ([#1893]({{ site.repository }}/issues/1893))
+- Fix the `highlight` tag feature ([#1859]({{ site.repository }}/issues/1859))
+- Test Jekyll under Ruby 2.1.0 ([#1900]({{ site.repository }}/issues/1900))
+- Add script/cibuild for fun and profit ([#1912]({{ site.repository }}/issues/1912))
+- Use `Forwardable` for delegation between `Excerpt` and `Post`
+    ([#1927]({{ site.repository }}/issues/1927))
+- Rename `read_things` to `read_content` ([#1928]({{ site.repository }}/issues/1928))
+- Add `script/branding` script for ASCII art lovin' ([#1936]({{ site.repository }}/issues/1936))
+- Update the README to reflect the repo move ([#1943]({{ site.repository }}/issues/1943))
+- Add the project vision to the README ([#1935]({{ site.repository }}/issues/1935))
+- Speed up Travis CI builds by using Rebund ([#1985]({{ site.repository }}/issues/1985))
+- Use Yarp as a Gem proxy for Travis CI ([#1984]({{ site.repository }}/issues/1984))
+- Remove Yarp as a Gem proxy for Travis CI ([#2004]({{ site.repository }}/issues/2004))
+- Move the reading of layouts into its own class ([#2020]({{ site.repository }}/issues/2020))
+- Test Sass import ([#2009]({{ site.repository }}/issues/2009))
+- Switch Maruku and Kramdown in lists of Runtime vs. Development dependencies ([#2049]({{ site.repository }}/issues/2049))
+- Clean up the gemspec for the project ([#2095]({{ site.repository }}/issues/2095))
+- Add Japanese translation of README and CONTRIBUTING docs. ([#2081]({{ site.repository }}/issues/2081))
+- Re-align the tables in Cucumber ([#2108]({{ site.repository }}/issues/2108))
+- Trim trailing spaces and convert tabs to spaces ([#2122]({{ site.repository }}/issues/2122))
+- Fix the failing Travis scenarios due to Cucumber issues ([#2155]({{ site.repository }}/issues/2155))
+- Wrap `bundle install` in `travis_retry` to retry when RubyGems fails ([#2160]({{ site.repository }}/issues/2160))
+- Refactor tags and categories ([#1639]({{ site.repository }}/issues/1639))
+- Extract plugin management into its own class ([#2197]({{ site.repository }}/issues/2197))
+- Add missing tests for `Command` ([#2216]({{ site.repository }}/issues/2216))
+- Update `rr` link in CONTRIBUTING doc ([#2247]({{ site.repository }}/issues/2247))
+- Streamline Cucumber execution of `jekyll` subcommands ([#2258]({{ site.repository }}/issues/2258))
+- Refactor `Commands::Serve`. ([#2269]({{ site.repository }}/issues/2269))
+- Refactor `highlight` tag ([#2154]({{ site.repository }}/issues/2154))
+- Update `Util` hash functions with latest from Rails ([#2273]({{ site.repository }}/issues/2273))
+- Workaround for Travis bug ([#2290]({{ site.repository }}/issues/2290))
+
+### Site Enhancements
+- Document Kramdown's GFM parser option ([#1791]({{ site.repository }}/issues/1791))
+- Move CSS to includes & update normalize.css to v2.1.3 ([#1787]({{ site.repository }}/issues/1787))
+- Minify CSS only in production ([#1803]({{ site.repository }}/issues/1803))
+- Fix broken link to installation of Ruby on Mountain Lion blog post on
+    Troubleshooting docs page ([#1797]({{ site.repository }}/issues/1797))
+- Fix issues with 1.4.1 release blog post ([#1804]({{ site.repository }}/issues/1804))
+- Add note about deploying to OpenShift ([#1812]({{ site.repository }}/issues/1812))
+- Collect all Windows-related docs onto one page ([#1818]({{ site.repository }}/issues/1818))
+- Fixed typo in datafiles doc page ([#1854]({{ site.repository }}/issues/1854))
+- Clarify how to access `site` in docs ([#1864]({{ site.repository }}/issues/1864))
+- Add closing `<code>` tag to `context.registers[:site]` note ([#1867]({{ site.repository }}/issues/1867))
+- Fix link to [@mojombo](https://github.com/mojombo)'s site source ([#1897]({{ site.repository }}/issues/1897))
+- Add `paginate: nil` to default configuration in docs ([#1896]({{ site.repository }}/issues/1896))
+- Add link to our License in the site footer ([#1889]({{ site.repository }}/issues/1889))
+- Add a charset note in "Writing Posts" doc page ([#1902]({{ site.repository }}/issues/1902))
+- Disallow selection of path and prompt in bash examples
+- Add jekyll-compass to the plugin list ([#1923]({{ site.repository }}/issues/1923))
+- Add note in Posts docs about stripping `<p>` tags from excerpt ([#1933]({{ site.repository }}/issues/1933))
+- Add additional info about the new exclude behavior ([#1938]({{ site.repository }}/issues/1938))
+- Linkify 'awesome contributors' to point to the contributors graph on
+    GitHub ([#1940]({{ site.repository }}/issues/1940))
+- Update `docs/sites.md` link to GitHub Training materials ([#1949]({{ site.repository }}/issues/1949))
+- Update `master` with the release info from 1.4.3 ([#1947]({{ site.repository }}/issues/1947))
+- Define docs nav in datafile ([#1953]({{ site.repository }}/issues/1953))
+- Clarify the docs around the naming convention for posts ([#1971]({{ site.repository }}/issues/1971))
+- Add missing `next` and `previous` docs for post layouts and templates ([#1970]({{ site.repository }}/issues/1970))
+- Add note to `Writing posts` page about how to strip html from excerpt ([#1962]({{ site.repository }}/issues/1962))
+- Add `jekyll-humanize` plugin to plugin list ([#1998]({{ site.repository }}/issues/1998))
+- Add `jekyll-font-awesome` plugin to plugin list ([#1999]({{ site.repository }}/issues/1999))
+- Add `sublime-jekyll` to list of Editor plugins ([#2001]({{ site.repository }}/issues/2001))
+- Add `vim-jekyll` to the list of Editor plugins ([#2005]({{ site.repository }}/issues/2005))
+- Fix non-semantic nesting of `p` tags in `news_item` layout ([#2013]({{ site.repository }}/issues/2013))
+- Document destination folder cleaning ([#2016]({{ site.repository }}/issues/2016))
+- Updated instructions for NearlyFreeSpeech.NET installation ([#2015]({{ site.repository }}/issues/2015))
+- Update link to rack-jekyll on "Deployment Methods" page ([#2047]({{ site.repository }}/issues/2047))
+- Fix typo in /docs/configuration ([#2073]({{ site.repository }}/issues/2073))
+- Fix count in docs for `site.static_files` ([#2077]({{ site.repository }}/issues/2077))
+- Update configuration docs to indicate utf-8 is the default for 2.0.0
+    and ASCII for 1.9.3 ([#2074]({{ site.repository }}/issues/2074))
+- Add info about unreleased feature to the site ([#2061]({{ site.repository }}/issues/2061))
+- Add whitespace to liquid example in GitHub Pages docs ([#2084]({{ site.repository }}/issues/2084))
+- Clarify the way Sass and CoffeeScript files are read in and output ([#2067]({{ site.repository }}/issues/2067))
+- Add lyche gallery tag plugin link to list of plugins ([#2094]({{ site.repository }}/issues/2094))
+- Add Jekyll Pages Directory plugin to list of plugins ([#2096]({{ site.repository }}/issues/2096))
+- Update Configuration docs page with new markdown extension ([#2102]({{ site.repository }}/issues/2102))
+- Add `jekyll-image-set` to the list of third-party plugins ([#2105]({{ site.repository }}/issues/2105))
+- Losslessly compress images ([#2128]({{ site.repository }}/issues/2128))
+- Update normalize.css to 3.0.0 ([#2126]({{ site.repository }}/issues/2126))
+- Update modernizr to v2.7.1 ([#2129]({{ site.repository }}/issues/2129))
+- Add `jekyll-ordinal` to list of third-party plugins ([#2150]({{ site.repository }}/issues/2150))
+- Add `jekyll_figure` to list of third-party plugins ([#2158]({{ site.repository }}/issues/2158))
+- Clarify the documentation for safe mode ([#2163]({{ site.repository }}/issues/2163))
+- Some HTML tidying ([#2130]({{ site.repository }}/issues/2130))
+- Remove modernizr and use html5shiv.js directly for IE less than v9 ([#2131]({{ site.repository }}/issues/2131))
+- Remove unused images ([#2187]({{ site.repository }}/issues/2187))
+- Use `array_to_sentence_string` filter when outputting news item
+    categories ([#2191]({{ site.repository }}/issues/2191))
+- Add link to Help repo in primary navigation bar ([#2177]({{ site.repository }}/issues/2177))
+- Switch to using an ico file for the shortcut icon ([#2193]({{ site.repository }}/issues/2193))
+- Use numbers to specify font weights and only bring in font weights used ([#2185]({{ site.repository }}/issues/2185))
+- Add a link to the list of all tz database time zones ([#1824]({{ site.repository }}/issues/1824))
+- Clean-up and improve documentation `feed.xml` ([#2192]({{ site.repository }}/issues/2192))
+- Remove duplicate entry in list of third-party plugins ([#2206]({{ site.repository }}/issues/2206))
+- Reduce the whitespace in the favicon. ([#2213]({{ site.repository }}/issues/2213))
+- Add `jekyll-page-collections` to list of third-party plugins ([#2215]({{ site.repository }}/issues/2215))
+- Add a cross-reference about `post_url` ([#2243]({{ site.repository }}/issues/2243))
+- Add `jekyll-live-tiles` to list of third-party plugins ([#2250]({{ site.repository }}/issues/2250))
+- Fixed broken link to GitHub training material site source ([#2257]({{ site.repository }}/issues/2257))
+- Update link to help repo, now called `jekyll-help` ([#2277]({{ site.repository }}/issues/2277))
+- Fix capitalization of 'Jekyll' on Deployment Methods page ([#2291]({{ site.repository }}/issues/2291))
+- Include plugins by sonnym in list of third-party plugins ([#2297]({{ site.repository }}/issues/2297))
+- Add deprecated articles keeper filter to list of third-party plugins ([#2300]({{ site.repository }}/issues/2300))
+- Simplify and improve our CSS. ([#2127]({{ site.repository }}/issues/2127))
+- Use black text color for the mobile navbar ([#2306]({{ site.repository }}/issues/2306))
+- Use the built in date filter and `site.time` for the copyright year. ([#2305]({{ site.repository }}/issues/2305))
+- Update html5shiv to v3.7.2 ([#2304]({{ site.repository }}/issues/2304))
+- Add 2.0.0 release post ([#2298]({{ site.repository }}/issues/2298))
+- Add docs for custom markdown processors ([#2298]({{ site.repository }}/issues/2298))
+- Add docs for `where` and `group_by` Liquid filters ([#2298]({{ site.repository }}/issues/2298))
+- Remove notes in docs for unreleased features ([#2309]({{ site.repository }}/issues/2309))
+
+## 1.5.1 / 2014-03-27
+
+### Bug Fixes
+
+- Only strip the drive name if it begins the string ([#2176]({{ site.repository }}/issues/2176))
+
 ## 1.5.0 / 2014-03-24
 
 ### Minor Enhancements
@@ -19,12 +295,11 @@ prev_section: contributing
 
 ### Development Fixes
 
-- Lock `cucmber` at `1.3.11` ([#2167]({{ site.repository }}/issues/2167))
+- Lock `cucumber` at `1.3.11` ([#2167]({{ site.repository }}/issues/2167))
 
 ## 1.4.3 / 2014-01-13
 
 ### Bug Fixes
-
 - Patch show-stopping security vulnerabilities ([#1944]({{ site.repository }}/issues/1944))
 
 ## 1.4.2 / 2013-12-16
@@ -144,7 +419,7 @@ prev_section: contributing
 - Refactor Site#render ([#1638]({{ site.repository }}/issues/1638))
 - Remove duplication in command line options ([#1637]({{ site.repository }}/issues/1637))
 - Add tests for all the coderay options ([#1543]({{ site.repository }}/issues/1543))
-- Improve some of the cucumber test code ([#1493]({{ site.repository }}/issues/1493))
+- Improve some of the Cucumber test code ([#1493]({{ site.repository }}/issues/1493))
 - Improve comparisons of timestamps by ignoring the seconds ([#1582]({{ site.repository }}/issues/1582))
 
 ### Site Enhancements
@@ -314,7 +589,7 @@ prev_section: contributing
 - Latest posts first in non-LSI `related_posts` ([#1271]({{ site.repository }}/issues/1271))
 
 ### Development Fixes
-- Merge the theme and layout cucumber steps into one step ([#1151]({{ site.repository }}/issues/1151))
+- Merge the theme and layout Cucumber steps into one step ([#1151]({{ site.repository }}/issues/1151))
 - Restrict activesupport dependency to pre-4.0.0 to maintain compatibility with `<= 1.9.2`
 - Include/exclude deprecation handling simplification ([#1284]({{ site.repository }}/issues/1284))
 - Convert README to Markdown. ([#1267]({{ site.repository }}/issues/1267))
@@ -344,7 +619,7 @@ prev_section: contributing
 - Update contributor information ([#1192]({{ site.repository }}/issues/1192))
 - Update URL of article about Blogger migration ([#1242]({{ site.repository }}/issues/1242))
 - Specify that RedCarpet is the default for new Jekyll sites on Quickstart page ([#1247]({{ site.repository }}/issues/1247))
-- Added site.pages to Variables page in docs ([#1251]({{ site.repository }}/issues/1251))
+- Added `site.pages` to Variables page in docs ([#1251]({{ site.repository }}/issues/1251))
 - Add Youku and Tudou Embed link on Plugins page. ([#1250]({{ site.repository }}/issues/1250))
 - Add note that `gist` tag supports private gists. ([#1248]({{ site.repository }}/issues/1248))
 - Add `jekyll-timeago` to list of third-party plugins. ([#1260]({{ site.repository }}/issues/1260))
@@ -362,7 +637,7 @@ prev_section: contributing
 
 ### Minor Enhancements
 - Add support to gist tag for private gists. ([#1189]({{ site.repository }}/issues/1189))
-- Fail loudly when MaRuKu errors out ([#1190]({{ site.repository }}/issues/1190))
+- Fail loudly when Maruku errors out ([#1190]({{ site.repository }}/issues/1190))
 - Move the building of related posts into their own class ([#1057]({{ site.repository }}/issues/1057))
 - Removed trailing spaces in several places throughout the code ([#1116]({{ site.repository }}/issues/1116))
 - Add a `--force` option to `jekyll new` ([#1115]({{ site.repository }}/issues/1115))
@@ -428,7 +703,7 @@ prev_section: contributing
 ## 1.0.1 / 2013-05-08
 
 ### Minor Enhancements
-- Do not force use of toc_token when using generate_tok in RDiscount ([#1048]({{ site.repository }}/issues/1048))
+- Do not force use of `toc_token` when using `generate_tok` in RDiscount ([#1048]({{ site.repository }}/issues/1048))
 - Add newer `language-` class name prefix to code blocks ([#1037]({{ site.repository }}/issues/1037))
 - Commander error message now preferred over process abort with incorrect args ([#1040]({{ site.repository }}/issues/1040))
 
@@ -451,15 +726,15 @@ prev_section: contributing
 ## 1.0.0 / 2013-05-06
 
 ### Major Enhancements
-- Add `jekyll new` subcommand: generate a jekyll scaffold ([#764]({{ site.repository }}/issues/764))
-- Refactored jekyll commands into subcommands: build, serve, and migrate. ([#690]({{ site.repository }}/issues/690))
+- Add `jekyll new` subcommand: generate a Jekyll scaffold ([#764]({{ site.repository }}/issues/764))
+- Refactored Jekyll commands into subcommands: build, serve, and migrate. ([#690]({{ site.repository }}/issues/690))
 - Removed importers/migrators from main project, migrated to jekyll-import sub-gem ([#793]({{ site.repository }}/issues/793))
 - Added ability to render drafts in `_drafts` folder via command line ([#833]({{ site.repository }}/issues/833))
 - Add ordinal date permalink style (/:categories/:year/:y_day/:title.html) ([#928]({{ site.repository }}/issues/928))
 
 ### Minor Enhancements
 - Site template HTML5-ified ([#964]({{ site.repository }}/issues/964))
-- Use post's directory path when matching for the post_url tag ([#998]({{ site.repository }}/issues/998))
+- Use post's directory path when matching for the `post_url` tag ([#998]({{ site.repository }}/issues/998))
 - Loosen dependency on Pygments so it's only required when it's needed ([#1015]({{ site.repository }}/issues/1015))
 - Parse strings into Time objects for date-related Liquid filters ([#1014]({{ site.repository }}/issues/1014))
 - Tell the user if there is no subcommand specified ([#1008]({{ site.repository }}/issues/1008))
@@ -473,7 +748,7 @@ prev_section: contributing
 - Expose new attribute to Liquid via `page`: `page.path` ([#951]({{ site.repository }}/issues/951))
 - Accept multiple config files from command line ([#945]({{ site.repository }}/issues/945))
 - Add page variable to liquid custom tags and blocks ([#413]({{ site.repository }}/issues/413))
-- Add paginator.previous_page_path and paginator.next_page_path ([#942]({{ site.repository }}/issues/942))
+- Add `paginator.previous_page_path` and `paginator.next_page_path` ([#942]({{ site.repository }}/issues/942))
 - Backwards compatibility for 'auto' ([#821]({{ site.repository }}/issues/821), [#934]({{ site.repository }}/issues/934))
 - Added date_to_rfc822 used on RSS feeds ([#892]({{ site.repository }}/issues/892))
 - Upgrade version of pygments.rb to 0.4.2 ([#927]({{ site.repository }}/issues/927))
@@ -492,7 +767,7 @@ prev_section: contributing
 - Relaxed Kramdown version to 0.14 ([#808]({{ site.repository }}/issues/808))
 - Aliased `jekyll server` to `jekyll serve`. ([#792]({{ site.repository }}/issues/792))
 - Updated gem versions for Kramdown, Rake, Shoulda, Cucumber, and RedCarpet. ([#744]({{ site.repository }}/issues/744))
-- Refactored jekyll subcommands into Jekyll::Commands submodule, which now contains them ([#768]({{ site.repository }}/issues/768))
+- Refactored Jekyll subcommands into Jekyll::Commands submodule, which now contains them ([#768]({{ site.repository }}/issues/768))
 - Rescue from import errors in Wordpress.com migrator ([#671]({{ site.repository }}/issues/671))
 - Massively accelerate LSI performance ([#664]({{ site.repository }}/issues/664))
 - Truncate post slugs when importing from Tumblr ([#496]({{ site.repository }}/issues/496))
@@ -507,7 +782,7 @@ prev_section: contributing
 - Paginate in subdirectories properly ([#1016]({{ site.repository }}/issues/1016))
 - Ensure post and page URLs have a leading slash ([#992]({{ site.repository }}/issues/992))
 - Catch all exceptions, not just StandardError descendents ([#1007]({{ site.repository }}/issues/1007))
-- Bullet-proof limit_posts option ([#1004]({{ site.repository }}/issues/1004))
+- Bullet-proof `limit_posts` option ([#1004]({{ site.repository }}/issues/1004))
 - Read in YAML as UTF-8 to accept non-ASCII chars ([#836]({{ site.repository }}/issues/836))
 - Fix the CLI option `--plugins` to actually accept dirs and files ([#993]({{ site.repository }}/issues/993))
 - Allow 'excerpt' in YAML Front-Matter to override the extracted excerpt ([#946]({{ site.repository }}/issues/946))
@@ -519,10 +794,10 @@ prev_section: contributing
 - Force usage of older directory_watcher gem as 1.5 is broken ([#883]({{ site.repository }}/issues/883))
 - Ensure all Post categories are downcase ([#842]({{ site.repository }}/issues/842), [#872]({{ site.repository }}/issues/872))
 - Force encoding of the rdiscount TOC to UTF8 to avoid conversion errors ([#555]({{ site.repository }}/issues/555))
-- Patch for multibyte URI problem with jekyll serve ([#723]({{ site.repository }}/issues/723))
+- Patch for multibyte URI problem with `jekyll serve` ([#723]({{ site.repository }}/issues/723))
 - Order plugin execution by priority ([#864]({{ site.repository }}/issues/864))
 - Fixed Page#dir and Page#url for edge cases ([#536]({{ site.repository }}/issues/536))
-- Fix broken post_url with posts with a time in their YAML Front-Matter ([#831]({{ site.repository }}/issues/831))
+- Fix broken `post_url` with posts with a time in their YAML Front-Matter ([#831]({{ site.repository }}/issues/831))
 - Look for plugins under the source directory ([#654]({{ site.repository }}/issues/654))
 - Tumblr Migrator: finds `_posts` dir correctly, fixes truncation of long
       post names ([#775]({{ site.repository }}/issues/775))
@@ -544,7 +819,7 @@ prev_section: contributing
 ### Development Fixes
 - Exclude Cucumber 1.2.4, which causes tests to fail in 1.9.2 ([#938]({{ site.repository }}/issues/938))
 - Added "features:html" rake task for debugging purposes, cleaned up
-      cucumber profiles ([#832]({{ site.repository }}/issues/832))
+      Cucumber profiles ([#832]({{ site.repository }}/issues/832))
 - Explicitly require HTTPS rubygems source in Gemfile ([#826]({{ site.repository }}/issues/826))
 - Changed Ruby version for development to 1.9.3-p374 from p362 ([#801]({{ site.repository }}/issues/801))
 - Including a link to the GitHub Ruby style guide in CONTRIBUTING.md ([#806]({{ site.repository }}/issues/806))
@@ -554,6 +829,7 @@ prev_section: contributing
 - Switch to Simplecov for coverage report ([#765]({{ site.repository }}/issues/765))
 
 ## 0.12.1 / 2013-02-19
+
 ### Minor Enhancements
 - Update Kramdown version to 0.14.1 ([#744]({{ site.repository }}/issues/744))
 - Test Enhancements
@@ -562,11 +838,12 @@ prev_section: contributing
 - Update Redcarpet version to 2.2.2 ([#744]({{ site.repository }}/issues/744))
 
 ## 0.12.0 / 2012-12-22
+
 ### Minor Enhancements
 - Add ability to explicitly specify included files ([#261]({{ site.repository }}/issues/261))
-- Add --default-mimetype option ([#279]({{ site.repository }}/issues/279))
+- Add `--default-mimetype` option ([#279]({{ site.repository }}/issues/279))
 - Allow setting of RedCloth options ([#284]({{ site.repository }}/issues/284))
-- Add post_url Liquid tag for internal post linking ([#369]({{ site.repository }}/issues/369))
+- Add `post_url` Liquid tag for internal post linking ([#369]({{ site.repository }}/issues/369))
 - Allow multiple plugin dirs to be specified ([#438]({{ site.repository }}/issues/438))
 - Inline TOC token support for RDiscount ([#333]({{ site.repository }}/issues/333))
 - Add the option to specify the paginated url format ([#342]({{ site.repository }}/issues/342))
@@ -576,9 +853,9 @@ prev_section: contributing
 - Bug Fixes
 - Allow some special characters in highlight names
 - URL escape category names in URL generation ([#360]({{ site.repository }}/issues/360))
-- Fix error with limit_posts ([#442]({{ site.repository }}/issues/442))
+- Fix error with `limit_posts` ([#442]({{ site.repository }}/issues/442))
 - Properly select dotfile during directory scan ([#363]({{ site.repository }}/issues/363), [#431]({{ site.repository }}/issues/431), [#377]({{ site.repository }}/issues/377))
-- Allow setting of Kramdown smart_quotes ([#482]({{ site.repository }}/issues/482))
+- Allow setting of Kramdown `smart_quotes` ([#482]({{ site.repository }}/issues/482))
 - Ensure front-matter is at start of file ([#562]({{ site.repository }}/issues/562))
 
 ## 0.11.2 / 2011-12-27
@@ -591,6 +868,7 @@ prev_section: contributing
 - Update dependencies
 
 ## 0.11.0 / 2011-07-10
+
 ### Major Enhancements
 - Add command line importer functionality ([#253]({{ site.repository }}/issues/253))
 - Add Redcarpet Markdown support ([#318]({{ site.repository }}/issues/318))
@@ -612,9 +890,10 @@ prev_section: contributing
 
 ## 0.10.0 / 2010-12-16
 - Bug Fixes
-- Add --no-server option.
+- Add `--no-server` option.
 
 ## 0.9.0 / 2010-12-15
+
 ### Minor Enhancements
 - Use OptionParser's `[no-]` functionality for better boolean parsing.
 - Add Drupal migrator ([#245]({{ site.repository }}/issues/245))
@@ -623,11 +902,12 @@ prev_section: contributing
 - Add Marley migrator ([#28]({{ site.repository }}/issues/28))
 
 ## 0.8.0 / 2010-11-22
+
 ### Minor Enhancements
 - Add wordpress.com importer ([#207]({{ site.repository }}/issues/207))
-- Add --limit-posts cli option ([#212]({{ site.repository }}/issues/212))
-- Add uri_escape filter ([#234]({{ site.repository }}/issues/234))
-- Add --base-url cli option ([#235]({{ site.repository }}/issues/235))
+- Add `--limit-posts` cli option ([#212]({{ site.repository }}/issues/212))
+- Add `uri_escape` filter ([#234]({{ site.repository }}/issues/234))
+- Add `--base-url` cli option ([#235]({{ site.repository }}/issues/235))
 - Improve MT migrator ([#238]({{ site.repository }}/issues/238))
 - Add kramdown support ([#239]({{ site.repository }}/issues/239))
 - Bug Fixes
@@ -636,6 +916,7 @@ prev_section: contributing
 - Prevent `_includes` dir from being a symlink
 
 ## 0.7.0 / 2010-08-24
+
 ### Minor Enhancements
 - Add support for rdiscount extensions ([#173]({{ site.repository }}/issues/173))
 - Bug Fixes
@@ -647,13 +928,14 @@ prev_section: contributing
 - Fix Rakefile 'release' task (tag pushing was missing origin)
 - Ensure that RedCloth is loaded when textilize filter is used ([#183]({{ site.repository }}/issues/183))
 - Expand source, destination, and plugin paths ([#180]({{ site.repository }}/issues/180))
-- Fix page.url to include full relative path ([#181]({{ site.repository }}/issues/181))
+- Fix `page.url` to include full relative path ([#181]({{ site.repository }}/issues/181))
 
 ## 0.6.1 / 2010-06-24
 - Bug Fixes
 - Fix Markdown Pygments prefix and suffix ([#178]({{ site.repository }}/issues/178))
 
 ## 0.6.0 / 2010-06-23
+
 ### Major Enhancements
 - Proper plugin system ([#19]({{ site.repository }}/issues/19), [#100]({{ site.repository }}/issues/100))
 - Add safe mode so unsafe converters/generators can be added
@@ -664,9 +946,9 @@ prev_section: contributing
 ### Minor Enhancements
 - Inclusion/exclusion of future dated posts ([#59]({{ site.repository }}/issues/59))
 - Generation for a specific time ([#59]({{ site.repository }}/issues/59))
-- Allocate site.time on render not per site_payload invocation ([#59]({{ site.repository }}/issues/59))
+- Allocate `site.time` on render not per site_payload invocation ([#59]({{ site.repository }}/issues/59))
 - Pages now present in the site payload and can be used through the
-      site.pages and site.html_pages variables
+      `site.pages` and `site.html_pages` variables
 - Generate phase added to site#process and pagination is now a generator
 - Switch to RakeGem for build/test process
 - Only regenerate static files when they have changed ([#142]({{ site.repository }}/issues/142))
@@ -678,9 +960,10 @@ prev_section: contributing
 - Fix extension munging when pretty permalinks are enabled ([#64]({{ site.repository }}/issues/64))
 - Stop sorting categories ([#33]({{ site.repository }}/issues/33))
 - Preserve generated attributes over front matter ([#119]({{ site.repository }}/issues/119))
-- Fix source directory binding using Dir.pwd ([#75]({{ site.repository }}/issues/75))
+- Fix source directory binding using `Dir.pwd` ([#75]({{ site.repository }}/issues/75))
 
 ## 0.5.7 / 2010-01-12
+
 ### Minor Enhancements
 - Allow overriding of post date in the front matter ([#62]({{ site.repository }}/issues/62), [#38]({{ site.repository }}/issues/38))
 - Bug Fixes
@@ -688,7 +971,7 @@ prev_section: contributing
 - Empty tags causes error in read_posts ([#84]({{ site.repository }}/issues/84))
 - Fix pagination to adhere to read/render/write paradigm
 - Test Enhancement
-- cucumber features no longer use site.posts.first where a better
+- Cucumber features no longer use site.posts.first where a better
       alternative is available
 
 ## 0.5.6 / 2010-01-08
@@ -746,6 +1029,7 @@ prev_section: contributing
 - Added Date#xmlschema for Ruby versions < 1.9
 
 ## 0.5.1 / 2009-05-06
+
 ### Major Enhancements
 - Next/previous posts in site payload ([@pantulis](https://github.com/pantulis), [@tomo](https://github.com/tomo))
 - Permalink templating system
@@ -760,6 +1044,7 @@ prev_section: contributing
 - CGI escaped post titles ([@Chrononaut](https://github.com/Chrononaut))
 
 ## 0.5.0 / 2009-04-07
+
 ### Minor Enhancements
 - Ability to set post categories via YAML ([@qrush](https://github.com/qrush))
 - Ability to set prevent a post from publishing via YAML ([@qrush](https://github.com/qrush))
@@ -778,18 +1063,20 @@ prev_section: contributing
 - Add Cucumber acceptance test suite ([@qrush](https://github.com/qrush), [@technicalpickles](https://github.com/technicalpickles))
 
 ## 0.4.1
+
 ### Minor Enhancements
 - Changed date format on wordpress converter (zeropadding) ([@dysinger](https://github.com/dysinger))
 - Bug Fixes
-- Add jekyll binary as executable to gemspec ([@dysinger](https://github.com/dysinger))
+- Add Jekyll binary as executable to gemspec ([@dysinger](https://github.com/dysinger))
 
 ## 0.4.0 / 2009-02-03
+
 ### Major Enhancements
 - Switch to Jeweler for packaging tasks
 
 ### Minor Enhancements
 - Type importer ([@codeslinger](https://github.com/codeslinger))
-- site.topics accessor ([@baz](https://github.com/baz))
+- `site.topics` accessor ([@baz](https://github.com/baz))
 - Add `array_to_sentence_string` filter ([@mchung](https://github.com/mchung))
 - Add a converter for textpattern ([@PerfectlyNormal](https://github.com/PerfectlyNormal))
 - Add a working Mephisto / MySQL converter ([@ivey](https://github.com/ivey))
@@ -804,8 +1091,9 @@ prev_section: contributing
 - Fix site payload available to files ([@matrix9180](https://github.com/matrix9180))
 
 ## 0.3.0 / 2008-12-24
+
 ### Major Enhancements
-- Added --server option to start a simple WEBrick server on destination
+- Added `--server` option to start a simple WEBrick server on destination
       directory ([@johnreilly](https://github.com/johnreilly) and [@mchung](https://github.com/mchung))
 
 ### Minor Enhancements
@@ -824,23 +1112,24 @@ prev_section: contributing
 ## 0.2.1 / 2008-12-15
 - Major Changes
 - Use Maruku (pure Ruby) for Markdown by default ([@mreid](https://github.com/mreid))
-- Allow use of RDiscount with --rdiscount flag
+- Allow use of RDiscount with `--rdiscount` flag
 
 ### Minor Enhancements
 - Don't load directory_watcher unless it's needed ([@pjhyett](https://github.com/pjhyett))
 
 ## 0.2.0 / 2008-12-14
 - Major Changes
-- related_posts is now found in site.related_posts
+- related_posts is now found in `site.related_posts`
 
 ## 0.1.6 / 2008-12-13
 - Major Features
 - Include files in `_includes` with {% raw %}`{% include x.textile %}`{% endraw %}
 
 ## 0.1.5 / 2008-12-12
+
 ### Major Enhancements
-- Code highlighting with Pygments if --pygments is specified
-- Disable true LSI by default, enable with --lsi
+- Code highlighting with Pygments if `--pygments` is specified
+- Disable true LSI by default, enable with `--lsi`
 
 ### Minor Enhancements
 - Output informative message if RDiscount is not available ([@JackDanger](https://github.com/JackDanger))
@@ -859,7 +1148,7 @@ prev_section: contributing
 - Code hilighting ([@vanpelt](https://github.com/vanpelt))
 - Autobuild
 - Bug Fixes
-- Accept both \r\n and \n in YAML header ([@vanpelt](https://github.com/vanpelt))
+- Accept both `\r\n` and `\n` in YAML header ([@vanpelt](https://github.com/vanpelt))
 
 ## 0.1.2 / 2008-11-22
 - Major Features
diff --git a/site/docs/index.md b/site/docs/index.md
index 021a712..44a00b4 100644
--- a/site/docs/index.md
+++ b/site/docs/index.md
@@ -24,7 +24,7 @@ behind [GitHub Pages](http://pages.github.com), which means you can use Jekyll
 to host your project’s page, blog, or website from GitHub’s servers **for
 free**.
 
-## ProTips™, Notes, and Warnings
+## Helpful Hints
 
 Throughout this guide there are a number of small-but-handy pieces of
 information that can make using Jekyll easier, more interesting, and less
@@ -46,6 +46,12 @@ hazardous. Here’s what to look out for.
   <p>Be aware of these messages if you wish to avoid certain death.</p>
 </div>
 
+<div class="note unreleased">
+  <h5>You'll see this by a feature that hasn't been released</h5>
+  <p>Some pieces of this website are for future versions of Jekyll that
+    are not yet released.</p>
+</div>
+
 If you come across anything along the way that we haven’t covered, or if you
 know of a tip you think others would find handy, please [file an
 issue]({{ site.repository }}/issues/new) and we’ll see about
diff --git a/site/docs/installation.md b/site/docs/installation.md
index 8610443..4f566cc 100644
--- a/site/docs/installation.md
+++ b/site/docs/installation.md
@@ -23,10 +23,9 @@ you’ll need to make sure your system has before you start.
 <div class="note info">
   <h5>Running Jekyll on Windows</h5>
   <p>
-    It is possible to get
-    <a href="http://www.madhur.co.in/blog/2011/09/01/runningjekyllwindows.html">
-    Jekyll running on Windows</a>, but the official documentation does not
-    support installation on Windows platforms.
+    While Windows is not officially supported, it is possible to get it running
+    on Windows. Special instructions can be found on our
+    <a href="../windows/#installation">Windows-specific docs page</a>.
   </p>
 </div>
 
@@ -56,6 +55,34 @@ community can improve the experience for everyone.
   </p>
 </div>
 
+## Pre-releases
+
+In order to install a pre-release, make sure you have all the requirements
+installed properly and run:
+
+{% highlight bash %}
+gem install jekyll --pre
+{% endhighlight %}
+
+This will install the latest pre-release. If you want a particular pre-release,
+use the `-v` switch to indicate the version you'd like to install:
+
+{% highlight bash %}
+gem install jekyll -v '2.0.0.alpha.1'
+{% endhighlight %}
+
+If you'd like to install a development version of Jekyll, the process is a bit
+more involved. This gives you the advantage of having the latest and greatest,
+but may be unstable.
+
+{% highlight bash %}
+$ git clone git://github.com/jekyll/jekyll.git
+$ cd jekyll
+$ script/bootstrap
+$ bundle exec rake build
+$ ls pkg/*.gem | head -n 1 | xargs gem install -l
+{% endhighlight %}
+
 ## Optional Extras
 
 There are a number of (optional) extra features that Jekyll supports that you
@@ -67,9 +94,10 @@ Check out [the extras page](../extras/) for more information.
   <h5>ProTip™: Enable Syntax Highlighting</h5>
   <p>
     If you’re the kind of person who is using Jekyll, then chances are you’ll
-    want to enable syntax highlighting using Pygments. You should really
-    <a href="../templates/#code_snippet_highlighting">check out how to do
-    that</a> before you go any further.
+    want to enable syntax highlighting using <a href="http://pygments.org/">Pygments</a>
+    or <a href="https://github.com/jayferd/rouge">Rouge</a>. You should really
+    <a href="../templates/#code_snippet_highlighting">check out how to
+    do that</a> before you go any farther.
   </p>
 </div>
 
diff --git a/site/docs/migrations.md b/site/docs/migrations.md
index 27ecf71..a080c6c 100644
--- a/site/docs/migrations.md
+++ b/site/docs/migrations.md
@@ -1,11 +1,11 @@
 ---
 layout: docs
 title: Blog migrations
-prev_section: datafiles
+prev_section: assets
 next_section: templates
 permalink: /docs/migrations/
 ---
 
 If you’re switching to Jekyll from another blogging system, Jekyll’s importers
 can help you with the move. To learn more about importing your site to Jekyll,
-visit our [`jekyll-import` docs site](http://import.jekyllrb.com).
+visit our [`jekyll-import` docs site](http://import.jekyllrb.com/docs/home/).
diff --git a/site/docs/permalinks.md b/site/docs/permalinks.md
index c38ad94..155432b 100644
--- a/site/docs/permalinks.md
+++ b/site/docs/permalinks.md
@@ -69,6 +69,14 @@ permalink is defined as `/:categories/:year/:month/:day/:title.html`.
     </tr>
     <tr>
       <td>
+        <p><code>short_year</code></p>
+      </td>
+      <td>
+        <p>Year from the Post’s filename without the century.</p>
+      </td>
+    </tr>
+    <tr>
+      <td>
         <p><code>title</code></p>
       </td>
       <td>
diff --git a/site/docs/plugins.md b/site/docs/plugins.md
index eb6392f..a6bc02b 100644
--- a/site/docs/plugins.md
+++ b/site/docs/plugins.md
@@ -73,6 +73,7 @@ instances of
 and are available via `site.pages`. Static files become instances of
 [`Jekyll::StaticFile`]({{ site.repository }}/blob/master/lib/jekyll/static_file.rb)
 and are available via `site.static_files`. See
+[the Variables documentation page](/docs/variables/) and
 [`Jekyll::Site`]({{ site.repository }}/blob/master/lib/jekyll/site.rb)
 for more details.
 
@@ -339,9 +340,9 @@ Liquid::Template.register_filter(Jekyll::AssetFilter)
   <h5>ProTip™: Access the site object using Liquid</h5>
   <p>
     Jekyll lets you access the <code>site</code> object through the
-    <code>context.registers</code> feature of Liquid. For example, you can
+    <code>context.registers</code> feature of Liquid at <code>context.registers[:site]</code>. For example, you can
     access the global configuration file <code>_config.yml</code> using
-    <code>context.registers.config</code>.
+    <code>context.registers[:site].config</code>.
   </p>
 </div>
 
@@ -422,6 +423,10 @@ You can find a few useful plugins at the following locations:
 - [Monthly archive generator by Shigeya Suzuki](https://github.com/shigeya/jekyll-monthly-archive-plugin): Generator and template which renders monthly archive like MovableType style, based on the work by Ilkka Laukkanen and others above.
 - [Category archive generator by Shigeya Suzuki](https://github.com/shigeya/jekyll-category-archive-plugin): Generator and template which renders category archive like MovableType style, based on Monthly archive generator.
 - [Emoji for Jekyll](https://github.com/yihangho/emoji-for-jekyll): Seamlessly enable emoji for all posts and pages.
+- [Compass integration for Jekyll](https://github.com/mscharley/jekyll-compass): Easily integrate Compass and Sass with your Jekyll website.
+- [Pages Directory by Ben Baker-Smith](https://github.com/bbakersmith/jekyll-pages-directory): Defines a `_pages` directory for page files which routes its output relative to the project root.
+- [Page Collections by Jeff Kolesky](https://github.com/jeffkole/jekyll-page-collections): Generates collections of pages with functionality that resembles posts.
+- [Windows 8.1 Live Tile Generation by Matt Sheehan](https://github.com/sheehamj13/jekyll-live-tiles): Generates Internet Explorer 11 config.xml file and Tile Templates for pinning your site to Windows 8.1.
 
 #### Converters
 
@@ -438,7 +443,6 @@ You can find a few useful plugins at the following locations:
 - [ReStructuredText Converter](https://github.com/xdissent/jekyll-rst): Converts ReST documents to HTML with Pygments syntax highlighting.
 - [Jekyll-pandoc-plugin](https://github.com/dsanson/jekyll-pandoc-plugin): Use pandoc for rendering markdown.
 - [Jekyll-pandoc-multiple-formats](https://github.com/fauno/jekyll-pandoc-multiple-formats) by [edsl](https://github.com/edsl): Use pandoc to generate your site in multiple formats. Supports pandoc’s markdown extensions.
-- [ReStructuredText Converter](https://github.com/xdissent/jekyll-rst): Converts ReST documents to HTML with Pygments syntax highlighting.
 - [Transform Layouts](https://gist.github.com/1472645): Allows HAML layouts (you need a HAML Converter plugin for this to work).
 - [Org-mode Converter](https://gist.github.com/abhiyerra/7377603): Org-mode converter for Jekyll.
 
@@ -456,6 +460,9 @@ You can find a few useful plugins at the following locations:
 - [pluralize](https://github.com/bdesham/pluralize): Easily combine a number and a word into a gramatically-correct amount like “1 minute” or “2 minute**s**”.
 - [reading_time](https://github.com/bdesham/reading_time): Count words and estimate reading time for a piece of text, ignoring HTML elements that are unlikely to contain running text.
 - [Table of Content Generator](https://github.com/dafi/jekyll-toc-generator): Generate the HTML code containing a table of content (TOC), the TOC can be customized in many way, for example you can decide which pages can be without TOC.
+- [jekyll-humanize](https://github.com/23maverick23/jekyll-humanize): This is a port of the Django app humanize which adds a "human touch" to data. Each method represents a Fluid type filter that can be used in your Jekyll site templates. Given that Jekyll produces static sites, some of the original methods do not make logical sense to port (e.g. naturaltime).
+- [Jekyll-Ordinal](https://github.com/PatrickC8t/Jekyll-Ordinal): Jekyll liquid filter to output a date ordinal such as "st", "nd", "rd", or "th".
+- [Deprecated articles keeper](https://github.com/kzykbys/JekyllPlugins) by [Kazuya Kobayashi](http://blog.kazuya.co/): A simple Jekyll filter which monitor how old an article is.
 
 #### Tags
 
@@ -495,6 +502,10 @@ You can find a few useful plugins at the following locations:
 - [Jekyll Date Chart](https://github.com/GSI/jekyll_date_chart) by [GSI](https://github.com/GSI): Block that renders date line charts based on textile-formatted tables.
 - [Jekyll Image Encode](https://github.com/GSI/jekyll_image_encode) by [GSI](https://github.com/GSI): Tag that renders base64 codes of images fetched from the web.
 - [Jekyll Quick Man](https://github.com/GSI/jekyll_quick_man) by [GSI](https://github.com/GSI): Tag that renders pretty links to man page sources on the internet.
+- [jekyll-font-awesome](https://gist.github.com/23maverick23/8532525): Quickly and easily add Font Awesome icons to your posts.
+- [Lychee Gallery Tag](https://gist.github.com/tobru/9171700) by [tobru](https://github.com/tobru): Include [Lychee](http://lychee.electerious.com/) albums into a post. For an introduction, see [Jekyll meets Lychee - A Liquid Tag plugin](https://tobrunet.ch/articles/jekyll-meets-lychee-a-liquid-tag-plugin/)
+- [Image Set/Gallery Tag](https://github.com/callmeed/jekyll-image-set) by [callmeed](https://github.com/callmeed): Renders HTML for an image gallery from a folder in your Jekyll site. Just pass it a folder name and class/tag options.
+- [jekyll_figure](https://github.com/lmullen/jekyll_figure): Generate figures and captions with links to the figure in a variety of formats
 
 #### Collections
 
@@ -524,6 +535,12 @@ You can find a few useful plugins at the following locations:
 - [grunt-jekyll](https://github.com/dannygarcia/grunt-jekyll): A straightforward [Grunt](http://gruntjs.com/) plugin for Jekyll.
 - [jekyll-postfiles](https://github.com/indirect/jekyll-postfiles): Add `_postfiles` directory and {% raw %}`{{ postfile }}`{% endraw %} tag so the files a post refers to will always be right there inside your repo.
 
+#### Editors
+
+- [sublime-jekyll](https://github.com/23maverick23/sublime-jekyll): A Sublime Text package for Jekyll static sites. This package should help creating Jekyll sites and posts easier by providing access to key template tags and filters, as well as common completions and a current date/datetime command (for dating posts). You can install this package manually via GitHub, or via [Package Control](https://sublime.wbond.net/packages/Jekyll).
+- [vim-jekyll](https://github.com/parkr/vim-jekyll): A vim plugin to generate
+  new posts and run `jekyll build` all without leaving vim.
+
 <div class="note info">
   <h5>Jekyll Plugins Wanted</h5>
   <p>
diff --git a/site/docs/posts.md b/site/docs/posts.md
index 88036bd..eeb8b8e 100644
--- a/site/docs/posts.md
+++ b/site/docs/posts.md
@@ -41,9 +41,18 @@ file. For example, the following are examples of valid post filenames:
 2012-09-12-how-to-write-a-blog.textile
 {% endhighlight %}
 
+<div class="note">
+  <h5>ProTip™: Link to other posts</h5>
+  <p>
+    Use the <a href="../templates#post_url"><code>post_url</code></a>
+    tag to link to other posts without having to worry about the URL's
+    breaking when the site permalink style changes.
+  </p>
+</div>
+
 ### Content Formats
 
-All blog post files must begin with [YAML front- matter](../frontmatter/). After
+All blog post files must begin with [YAML front-matter](../frontmatter/). After
 that, it's simply a matter of deciding which format you prefer. Jekyll supports
 two popular content markup formats:
 [Markdown](http://daringfireball.net/projects/markdown/) and
@@ -52,6 +61,18 @@ of marking up different types of content within a post, so you should
 familiarize yourself with these formats and decide which one best suits your
 needs.
 
+<div class="note info">
+  <h5>Be aware of character sets</h5>
+  <p>
+    Content processors can modify certain characters to make them look nicer.
+    For example, the <code>smart</code> extension in Redcarpet converts standard,
+    ASCII quotation characters to curly, Unicode ones. In order for the browser
+    to display those characters properly, define the charset meta value by
+    including <code><meta charset="utf-8"></code> in the
+    <code><head></code> of your layout.
+  </p>
+</div>
+
 ## Including images and resources
 
 Chances are, at some point, you'll want to include images, downloads, or other
@@ -126,21 +147,30 @@ posts:
   {% raw %}{% for post in site.posts %}{% endraw %}
     <li>
       <a href="{% raw %}{{ post.url }}{% endraw %}">{% raw %}{{ post.title }}{% endraw %}</a>
-      <p>{% raw %}{{ post.excerpt }}{% endraw %}</p>
+      {% raw %}{{ post.excerpt }}{% endraw %}
     </li>
   {% raw %}{% endfor %}{% endraw %}
 </ul>
 {% endhighlight %}
 
+Because Jekyll grabs the first paragraph you will not need to wrap the excerpt in `p` tags,
+which is already done for you. These tags can be removed with the following if you'd prefer:
+
+{% highlight html %}
+{% raw %}{{ post.excerpt | remove: '<p>' | remove: '</p>' }}{% endraw %}
+{% endhighlight %}
+
 If you don't like the automatically-generated post excerpt, it can be overridden by adding
 `excerpt` to your post's YAML front-matter. Completely disable it by setting
 your `excerpt_separator` to `""`.
 
+Also, as with any output generated by Liquid tags, you can pass the `| strip_html` flag to remove any html tags in the output. This is particularly helpful if you wish to output a post excerpt as a `meta="description"` tag within the post `head`, or anywhere else having html tags along with the content is not desirable.
+
 ## Highlighting code snippets
 
 Jekyll also has built-in support for syntax highlighting of code snippets using
-Pygments, and including a code snippet in any post is easy. Just use the
-dedicated Liquid tag as follows:
+either Pygments or Rouge, and including a code snippet in any post is easy. Just
+use the dedicated Liquid tag as follows:
 
 {% highlight text %}
 {% raw %}{% highlight ruby %}{% endraw %}
diff --git a/site/docs/sites.md b/site/docs/sites.md
index 57c927b..4e57aba 100644
--- a/site/docs/sites.md
+++ b/site/docs/sites.md
@@ -11,13 +11,13 @@ with. Below are some Jekyll-powered blogs which were hand-picked for
 learning purposes.
 
 - [Tom Preston-Werner](http://tom.preston-werner.com/)
-    ([source](http://github.com/mojombo/mojombo.github.com))
+    ([source](https://github.com/mojombo/mojombo.github.io))
 - [Nick Quaranto](http://quaran.to/)
     ([source](https://github.com/qrush/qrush.github.com))
 - [Roger Chapman](http://rogchap.com/)
     ([source](https://github.com/rogchap/rogchap.github.com))
-- [GitHub Official Teaching Materials](http://teach.github.com)
-    ([source](https://github.com/github/teach.github.com))
+- [GitHub Official Teaching Materials](http://training.github.com)
+    ([source](https://github.com/github/training.github.com/tree/7049d7532a6856411e34046aedfce43a4afaf424))
 - [Rasmus Andersson](http://rsms.me/)
     ([source](https://github.com/rsms/rsms.github.com))
 - [Scott Chacon](http://schacon.github.com)
diff --git a/site/docs/structure.md b/site/docs/structure.md
index d03baee..44bf27b 100644
--- a/site/docs/structure.md
+++ b/site/docs/structure.md
@@ -113,7 +113,7 @@ An overview of what each of these does:
       <td>
         <p>
 
-          Your dynamic content, so to speak. The format of these files is
+          Your dynamic content, so to speak. The naming convention of these files is
           important, and must follow the format:
           <code>YEAR-MONTH-DAY-title.MARKUP</code>.
           The <a href="../permalinks/">permalinks</a> can be customized for each
@@ -130,9 +130,9 @@ An overview of what each of these does:
       <td>
         <p>
 
-          Well-formatted site data should be placed here. The jekyll engine will 
-          autoload all yaml files (ends with <code>.yml</code> or <code>.yaml</code>) 
-          in this directory. If there's a file <code>members.yml</code> under the directory, 
+          Well-formatted site data should be placed here. The jekyll engine will
+          autoload all yaml files (ends with <code>.yml</code> or <code>.yaml</code>)
+          in this directory. If there's a file <code>members.yml</code> under the directory,
           then you can access contents of the file through <code>site.data.members</code>.
 
         </p>
diff --git a/site/docs/templates.md b/site/docs/templates.md
index 7cf2a86..79cdfc8 100644
--- a/site/docs/templates.md
+++ b/site/docs/templates.md
@@ -25,162 +25,205 @@ common tasks easier.
   <tbody>
     <tr>
       <td>
-        <p class='name'><strong>Date to XML Schema</strong></p>
+        <p class="name"><strong>Date to XML Schema</strong></p>
         <p>Convert a Date into XML Schema (ISO 8601) format.</p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p>
-         <code class='filter'>{% raw %}{{ site.time | date_to_xmlschema }}{% endraw %}</code>
+         <code class="filter">{% raw %}{{ site.time | date_to_xmlschema }}{% endraw %}</code>
         </p>
         <p>
-          <code class='output'>2008-11-07T13:07:54-08:00</code>
+          <code class="output">2008-11-07T13:07:54-08:00</code>
         </p>
       </td>
     </tr>
     <tr>
       <td>
-        <p class='name'><strong>Date to RFC-822 Format</strong></p>
+        <p class="name"><strong>Date to RFC-822 Format</strong></p>
         <p>Convert a Date into the RFC-822 format used for RSS feeds.</p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p>
-         <code class='filter'>{% raw %}{{ site.time | date_to_rfc822 }}{% endraw %}</code>
+         <code class="filter">{% raw %}{{ site.time | date_to_rfc822 }}{% endraw %}</code>
         </p>
         <p>
-          <code class='output'>Mon, 07 Nov 2008 13:07:54 -0800</code>
+          <code class="output">Mon, 07 Nov 2008 13:07:54 -0800</code>
         </p>
       </td>
     </tr>
     <tr>
       <td>
-        <p class='name'><strong>Date to String</strong></p>
+        <p class="name"><strong>Date to String</strong></p>
         <p>Convert a date to short format.</p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p>
-         <code class='filter'>{% raw %}{{ site.time | date_to_string }}{% endraw %}</code>
+         <code class="filter">{% raw %}{{ site.time | date_to_string }}{% endraw %}</code>
         </p>
         <p>
-          <code class='output'>07 Nov 2008</code>
+          <code class="output">07 Nov 2008</code>
         </p>
       </td>
     </tr>
     <tr>
       <td>
-        <p class='name'><strong>Date to Long String</strong></p>
+        <p class="name"><strong>Date to Long String</strong></p>
         <p>Format a date to long format.</p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p>
-         <code class='filter'>{% raw %}{{ site.time | date_to_long_string }}{% endraw %}</code>
+         <code class="filter">{% raw %}{{ site.time | date_to_long_string }}{% endraw %}</code>
         </p>
         <p>
-          <code class='output'>07 November 2008</code>
+          <code class="output">07 November 2008</code>
         </p>
       </td>
     </tr>
     <tr>
       <td>
-        <p class='name'><strong>XML Escape</strong></p>
+        <p class="name"><strong>Where</strong></p>
+        <p>Select all the objects in an array where the key has the given value.</p>
+      </td>
+      <td class="align-center">
+        <p>
+         <code class="filter">{% raw %}{{ site.members | where:"graduation_year","2014" }}{% endraw %}</code>
+        </p>
+      </td>
+    </tr>
+    <tr>
+      <td>
+        <p class="name"><strong>Group By</strong></p>
+        <p>Group an array's items by a given property.</p>
+      </td>
+      <td class="align-center">
+        <p>
+         <code class="filter">{% raw %}{{ site.members | group_by:"graduation_year" }}{% endraw %}</code>
+        </p>
+        <p>
+          <code class="output">[{"name"=>"2013", "items"=>[...]},
+{"name"=>"2014", "items"=>[...]}]</code>
+        </p>
+      </td>
+    </tr>
+    <tr>
+      <td>
+        <p class="name"><strong>XML Escape</strong></p>
         <p>Escape some text for use in XML.</p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p>
-         <code class='filter'>{% raw %}{{ page.content | xml_escape }}{% endraw %}</code>
+         <code class="filter">{% raw %}{{ page.content | xml_escape }}{% endraw %}</code>
         </p>
       </td>
     </tr>
     <tr>
       <td>
-        <p class='name'><strong>CGI Escape</strong></p>
+        <p class="name"><strong>CGI Escape</strong></p>
         <p>
           CGI escape a string for use in a URL. Replaces any special characters
           with appropriate %XX replacements.
         </p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p>
-         <code class='filter'>{% raw %}{{ “foo,bar;baz?” | cgi_escape }}{% endraw %}</code>
+         <code class="filter">{% raw %}{{ “foo,bar;baz?” | cgi_escape }}{% endraw %}</code>
         </p>
         <p>
-          <code class='output'>foo%2Cbar%3Bbaz%3F</code>
+          <code class="output">foo%2Cbar%3Bbaz%3F</code>
         </p>
       </td>
     </tr>
     <tr>
       <td>
-        <p class='name'><strong>URI Escape</strong></p>
+        <p class="name"><strong>URI Escape</strong></p>
         <p>
           URI escape a string.
         </p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p>
-         <code class='filter'>{% raw %}{{ “'foo, bar \\baz?'” | uri_escape }}{% endraw %}</code>
+         <code class="filter">{% raw %}{{ “'foo, bar \\baz?'” | uri_escape }}{% endraw %}</code>
         </p>
         <p>
-          <code class='output'>foo,%20bar%20%5Cbaz?</code>
+          <code class="output">foo,%20bar%20%5Cbaz?</code>
         </p>
       </td>
     </tr>
     <tr>
       <td>
-        <p class='name'><strong>Number of Words</strong></p>
+        <p class="name"><strong>Number of Words</strong></p>
         <p>Count the number of words in some text.</p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p>
-         <code class='filter'>{% raw %}{{ page.content | number_of_words }}{% endraw %}</code>
+         <code class="filter">{% raw %}{{ page.content | number_of_words }}{% endraw %}</code>
         </p>
         <p>
-          <code class='output'>1337</code>
+          <code class="output">1337</code>
         </p>
       </td>
     </tr>
     <tr>
       <td>
-        <p class='name'><strong>Array to Sentence</strong></p>
+        <p class="name"><strong>Array to Sentence</strong></p>
         <p>Convert an array into a sentence. Useful for listing tags.</p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p>
-         <code class='filter'>{% raw %}{{ page.tags | array_to_sentence_string }}{% endraw %}</code>
+         <code class="filter">{% raw %}{{ page.tags | array_to_sentence_string }}{% endraw %}</code>
         </p>
         <p>
-          <code class='output'>foo, bar, and baz</code>
+          <code class="output">foo, bar, and baz</code>
         </p>
       </td>
     </tr>
     <tr>
       <td>
-        <p class='name'><strong>Textilize</strong></p>
+        <p class="name"><strong>Textilize</strong></p>
         <p>Convert a Textile-formatted string into HTML, formatted via RedCloth</p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p>
-         <code class='filter'>{% raw %}{{ page.excerpt | textilize }}{% endraw %}</code>
+         <code class="filter">{% raw %}{{ page.excerpt | textilize }}{% endraw %}</code>
         </p>
       </td>
     </tr>
     <tr>
       <td>
-        <p class='name'><strong>Markdownify</strong></p>
+        <p class="name"><strong>Markdownify</strong></p>
         <p>Convert a Markdown-formatted string into HTML.</p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
         <p>
-         <code class='filter'>{% raw %}{{ page.excerpt | markdownify }}{% endraw %}</code>
+         <code class="filter">{% raw %}{{ page.excerpt | markdownify }}{% endraw %}</code>
         </p>
       </td>
     </tr>
     <tr>
       <td>
-        <p class='name'><strong>Data To JSON</strong></p>
+        <p class="name"><strong>Data To JSON</strong></p>
         <p>Convert Hash or Array to JSON.</p>
       </td>
-      <td class='align-center'>
+      <td class="align-center">
+        <p>
+         <code class="filter">{% raw %}{{ site.data.projects | jsonify }}{% endraw %}</code>
+        </p>
+      </td>
+    </tr>
+    <tr>
+      <td>
+        <p class="name"><strong>Sort</strong></p>
+        <p>Sort an array. Optional arguments for hashes: 1. property name 2. nils order (<em>first</em> or <em>last</em>).</p>
+      </td>
+      <td class="align-center">
+        <p>
+         <code class="filter">{% raw %}{{ page.tags | sort }}{% endraw %}</code>
+        </p>
+        <p>
+         <code class="filter">{% raw %}{{ site.posts | sort: 'author' }}{% endraw %}</code>
+        </p>
         <p>
-         <code class='filter'>{% raw %}{{ site.data.projects | jsonify }}{% endraw %}</code>
+         <code class="filter">{% raw %}{{ site.pages | sort: 'title', 'last' }}{% endraw %}</code>
         </p>
       </td>
     </tr>
@@ -211,8 +254,6 @@ root of your source directory. This will embed the contents of
     or you can use a variable, using liquid-like variable syntax as in
     <code>{% raw %}{% include {{my_variable}} %}{% endraw %}</code>.
 
-    Note that unlike usual liquid variable syntax, you cannot have spaces inside the curly braces.
-
   </p>
 </div>
 
@@ -232,8 +273,14 @@ These parameters are available via Liquid in the include:
 
 Jekyll has built in support for syntax highlighting of [over 100
 languages](http://pygments.org/languages/) thanks to
-[Pygments](http://pygments.org/). To use Pygments, you must have Python installed on your
-system and set `pygments` to `true` in your site's configuration file.
+[Pygments](http://pygments.org/). To use Pygments, you must have Python installed
+on your system and set `highlighter` to `pygments` in your site's configuration
+file.
+
+Alternatively, you can use [Rouge](https://github.com/jayferd/rouge) to highlight
+your code snippets. It doesn't support as many languages as Pygments does but
+it should fit in most cases and it's written in pure Ruby ; you don't need Python
+on your system!
 
 To render a code block with syntax highlighting, surround your code as follows:
 
@@ -249,8 +296,9 @@ end
 
 The argument to the `highlight` tag (`ruby` in the example above) is the
 language identifier. To find the appropriate identifier to use for the language
-you want to highlight, look for the “short name” on the [Lexers
-page](http://pygments.org/docs/lexers/).
+you want to highlight, look for the “short name” on the [Pygments' Lexers
+page](http://pygments.org/docs/lexers/) or the [Rouge
+wiki](https://github.com/jayferd/rouge/wiki/List-of-supported-languages-and-lexers).
 
 #### Line numbers
 
@@ -290,7 +338,7 @@ will generate the correct permalink URL for the post you specify.
 {% endraw %}
 {% endhighlight %}
 
-If you organize your posts in subdirectories, you need to include subdirectory 
+If you organize your posts in subdirectories, you need to include subdirectory
 path to the post:
 
 {% highlight text %}
@@ -311,11 +359,11 @@ You can also use this tag to create a link to a post in Markdown as follows:
 
 ### Gist
 
-Use the `gist` tag to easily embed a GitHub Gist onto your site:
+Use the `gist` tag to easily embed a GitHub Gist onto your site. This works with public or secret gists:
 
 {% highlight text %}
 {% raw %}
-{% gist 5555251 %}
+{% gist parkr/931c1c8d465a04042403 %}
 {% endraw %}
 {% endhighlight %}
 
@@ -323,17 +371,6 @@ You may also optionally specify the filename in the gist to display:
 
 {% highlight text %}
 {% raw %}
-{% gist 5555251 result.md %}
+{% gist parkr/931c1c8d465a04042403 jekyll-private-gist.markdown %}
 {% endraw %}
 {% endhighlight %}
-
-The `gist` tag also works with private gists, which require the gist owner's
-github username:
-
-{% highlight text %}
-{% raw %}
-{% gist parkr/931c1c8d465a04042403 %}
-{% endraw %}
-{% endhighlight %}
-
-The private gist syntax also supports filenames.
diff --git a/site/docs/troubleshooting.md b/site/docs/troubleshooting.md
index 836e1ea..e428922 100644
--- a/site/docs/troubleshooting.md
+++ b/site/docs/troubleshooting.md
@@ -6,9 +6,9 @@ next_section: sites
 permalink: /docs/troubleshooting/
 ---
 
-If you ever run into problems installing or using Jekyll, here's a few tips
+If you ever run into problems installing or using Jekyll, here are a few tips
 that might be of help. If the problem you’re experiencing isn’t covered below,
-please [report an issue]({{ site.repository }}/issues/new) so the
+please [report an issue]({{site.help_url}}/issues/new) so the
 Jekyll community can make everyone’s experience better.
 
 ## Installation Problems
@@ -28,10 +28,13 @@ sudo yum install ruby-devel
 {% endhighlight %}
 
 On [NearlyFreeSpeech](http://nearlyfreespeech.net/) you need to run the
-command with the following environment variable:
+following commands before installing Jekyll:
 
 {% highlight bash %}
-RB_USER_INSTALL=true gem install jekyll
+export GEM_HOME=/home/private/gems
+export GEM_PATH=/home/private/gems:/usr/local/lib/ruby/gems/1.8/
+export PATH=$PATH:/home/private/gems/bin
+export RB_USER_INSTALL='true'
 {% endhighlight %}
 
 On OSX, you may need to update RubyGems:
@@ -41,7 +44,7 @@ sudo gem update --system
 {% endhighlight %}
 
 If you still have issues, you may need to [use XCode to install Command Line
-Tools](http://www.zlu.me/blog/2012/02/21/install-native-ruby-gem-in-mountain-lion-preview/)
+Tools](http://www.zlu.me/ruby/os%20x/gem/mountain%20lion/2012/02/21/install-native-ruby-gem-in-mountain-lion-preview.html)
 that will allow you to install native gems using the following command:
 
 {% highlight bash %}
@@ -123,8 +126,8 @@ bug](http://aaronqian.com/articles/2009/04/07/redcloth-ate-my-notextile.html)
 and will hopefully be fixed for 4.2. You can still use 4.1.9, but the
 test suite requires that 4.1.0 be installed. If you use a version of
 RedCloth that does not have the notextile tag, you may notice that
-syntax highlighted blocks from Pygments are not formatted correctly,
-among other things. If you’re seeing this just install 4.1.0.
+syntax highlighted blocks from Pygments or Rouge are not formatted
+correctly, among other things. If you’re seeing this just install 4.1.0.
 
 ### Liquid
 
@@ -146,5 +149,9 @@ run into these errors, try setting `excerpt_separator: ""` in your
 
 <div class="note">
   <h5>Please report issues you encounter!</h5>
-  <p>If you come across a bug, please <a href="{{ site.repository }}/issues/new">create an issue</a> on GitHub describing the problem and any work-arounds you find so we can document it here for others.</p>
+  <p>
+  If you come across a bug, please <a href="{{ site.help_url }}/issues/new">create an issue</a>
+  on GitHub describing the problem and any work-arounds you find so we can
+  document it here for others.
+  </p>
 </div>
diff --git a/site/docs/upgrading.md b/site/docs/upgrading.md
index 3cf5a1e..3a3f167 100644
--- a/site/docs/upgrading.md
+++ b/site/docs/upgrading.md
@@ -35,7 +35,7 @@ rebuild each time a file changes, just add the `--watch` flag at the end.
   <p markdown="1">With the new subcommands, the way sites are previewed locally
    changed a bit. Instead of specifying `server: true` in the site's
    configuration file, use `jekyll serve`. The same hold's true for
-   `watch: true`. Instead, use the `--watch` flag with either `jekyll serve`
+   `watch: true`. Instead, use the `--watch` flag with either `jekyll serve`
     or `jekyll build`.</p>
 </div>
 
@@ -97,13 +97,13 @@ to one or more config files (comma-delimited, no spaces).
 
 <div class="note info">
   <h5>The config flag explicitly specifies your configuration file(s)</h5>
-  <p markdown="1">If you use the `--config` flag, Jekyll will ignore your
-    `_config.yml` file. Want to merge a custom configuration with the normal
+  <p markdown="1">If you use the `--config` flag, Jekyll will ignore your
+    `_config.yml` file. Want to merge a custom configuration with the normal
     configuration? No problem. Jekyll will accept more than one custom config
     file via the command line. Config files cascade from right to left, such
-    that if I run `jekyll serve --config _config.yml,_config-dev.yml`,
-    the values in the config files on the right (`_config-dev.yml`) overwrite
-    those on the left (`_config.yml`) when both contain the same key.</p>
+    that if I run `jekyll serve --config _config.yml,_config-dev.yml`,
+    the values in the config files on the right (`_config-dev.yml`) overwrite
+    those on the left (`_config.yml`) when both contain the same key.</p>
 </div>
 
 ### New Config File Options
diff --git a/site/docs/usage.md b/site/docs/usage.md
index 6db3a11..7538de0 100644
--- a/site/docs/usage.md
+++ b/site/docs/usage.md
@@ -24,6 +24,17 @@ $ jekyll build --watch
 #    watched for changes, and regenerated automatically.
 {% endhighlight %}
 
+<div class="note warning">
+  <h5>Destination folders are cleaned on site builds</h5>
+  <p>
+    The contents of <code><destination></code> are automatically
+    cleaned when the site is built.  Files or folders that are not
+    created by your site will be removed.  Do not use an important
+    location for <code><destination></code>; instead, use it as
+    a staging area and copy files from there to your web server.
+  </p>
+</div>
+
 Jekyll also comes with a built-in development server that will allow you to
 preview what the generated site will look like in your browser locally.
 
diff --git a/site/docs/variables.md b/site/docs/variables.md
index 89e11a5..5f4afbe 100644
--- a/site/docs/variables.md
+++ b/site/docs/variables.md
@@ -2,7 +2,7 @@
 layout: docs
 title: Variables
 prev_section: pages
-next_section: datafiles
+next_section: collections
 permalink: /docs/variables/
 ---
 
@@ -113,6 +113,24 @@ following is a reference of the available data.
       </p></td>
     </tr>
     <tr>
+      <td><p><code>site.static_files</code></p></td>
+      <td><p>
+
+        A list of all static files (i.e. files not processed by Jekyll's
+        converters or the Liquid renderer). Each file has three properties:
+        <code>path</code>, <code>modified_time</code> and <code>extname</code>.
+
+      </p></td>
+    </tr>
+    <tr>
+      <td><p><code>site.documents</code></p></td>
+      <td><p>
+
+        A list of all the documents in every collection.
+
+      </p></td>
+    </tr>
+    <tr>
       <td><p><code>site.categories.CATEGORY</code></p></td>
       <td><p>
 
@@ -244,6 +262,24 @@ following is a reference of the available data.
 
       </p></td>
     </tr>
+    <tr>
+      <td><p><code>page.next</code></p></td>
+      <td><p>
+
+        The next post relative to the position of the current post in
+        <code>site.posts</code>. Returns <code>nil</code> for the last entry.
+
+      </p></td>
+    </tr>
+    <tr>
+      <td><p><code>page.previous</code></p></td>
+      <td><p>
+
+        The previous post relative to the position of the current post in
+        <code>site.posts</code>. Returns <code>nil</code> for the first entry.
+
+      </p></td>
+    </tr>
   </tbody>
 </table>
 </div>
diff --git a/site/docs/windows.md b/site/docs/windows.md
new file mode 100644
index 0000000..b1f12cc
--- /dev/null
+++ b/site/docs/windows.md
@@ -0,0 +1,44 @@
+---
+layout: docs
+title: Jekyll on Windows
+prev_section: configuration
+next_section: posts
+permalink: /docs/windows/
+---
+
+While Windows is not an officially-supported platform, it can be used to run
+Jekyll with the proper tweaks. This page aims to collect some of the general
+knowledge and lessons that have been unearthed by Windows users.
+
+## Installation
+
+Madhur Ahuja has written up instructions to get
+[Jekyll running on Windows][windows-installation] and it seems to work for most.
+
+## Encoding
+
+If you use UTF-8 encoding, make sure that no `BOM` header
+characters exist in your files or very, very bad things will happen to
+Jekyll. This is especially relevant if you're running Jekyll on Windows.
+
+Additionally, you might need to change the code page of the console window to UTF-8
+in case you get a "Liquid Exception: Incompatible character encoding" error during
+the site generation process. It can be done with the following command:
+
+{% highlight bash %}
+$ chcp 65001
+{% endhighlight %}
+
+[windows-installation]: http://www.madhur.co.in/blog/2011/09/01/runningjekyllwindows.html
+
+## Auto-regeneration
+
+As of v1.3.0, Jekyll uses the `listen` gem to watch for changes when the
+`--watch` switch is specified during a build or serve. While `listen` has
+built-in support for UNIX systems, it requires an extra gem for compatibility
+with Windows. Add the following to the Gemfile for your site:
+
+{% highlight ruby %}
+require 'rbconfig'
+gem 'wdm', '~> 0.1.0' if RbConfig::CONFIG['target_os'] =~ /mswin|mingw/i
+{% endhighlight %}
diff --git a/site/favicon.ico b/site/favicon.ico
new file mode 100644
index 0000000..e8b4e38
Binary files /dev/null and b/site/favicon.ico differ
diff --git a/site/favicon.png b/site/favicon.png
deleted file mode 100644
index 4443b67..0000000
Binary files a/site/favicon.png and /dev/null differ
diff --git a/site/feed.xml b/site/feed.xml
index 2f4dfcf..1a683be 100644
--- a/site/feed.xml
+++ b/site/feed.xml
@@ -1,5 +1,4 @@
 ---
-layout: none
 permalink: /feed.xml
 ---
 
@@ -12,25 +11,38 @@ permalink: /feed.xml
   xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   >
-<channel>
+  <channel>
     <title xml:lang="en">Jekyll • Simple, blog-aware, static sites</title>
-    <atom:link type="application/atom+xml" href="http://jekyllrb.com/feed/" rel="self"/>
-    <link>http://jekyllrb.com</link>
-    <pubDate>{{ site.time | date: "%a, %d %b %Y %H:%M:%S %z" }}</pubDate>
-    <lastBuildDate>{{ site.time | date: "%a, %d %b %Y %H:%M:%S %z" }}</lastBuildDate>
+    <atom:link type="application/atom+xml" href="http://jekyllrb.com/feed.xml" rel="self"/>
+    <link>http://jekyllrb.com/</link>
+    <pubDate>{{ site.time | date_to_rfc822 }}</pubDate>
+    <lastBuildDate>{{ site.time | date_to_rfc822 }}</lastBuildDate>
     <language>en-US</language>
+    <generator>Jekyll v{{ jekyll.version }}</generator>
     <description>Transform your plain text into static websites and blogs.</description>
+    <image>
+      <description>Transform your plain text into static websites and blogs.</description>
+      <url>http://jekyllrb.com/img/logo-rss.png</url>
+      <title>Jekyll • Simple, blog-aware, static sites</title>
+      <link>http://jekyllrb.com/</link>
+      <width>144</width>
+      <height>73</height>
+    </image>
     {% for post in site.posts %}
     <item>
-        <title>{{ post.title | xml_escape}}</title>
-        <link>http://jekyllrb.com{{ post.url }}</link>
-        <pubDate>{{ post.date | date: "%a, %d %b %Y %H:%M:%S %z" }}</pubDate>
-        <dc:creator>{{ post.author }}</dc:creator>
-        {% for tag in post.tags %}<category>{{ tag | xml_escape }}</category>
-        {% endfor %}{% for cat in post.categories %}<category>{{ cat | xml_escape }}</category>
-        {% endfor %}<guid isPermaLink="false">{{ post.id }}</guid>
-        <description><![CDATA[ {{ post.content }} ]]></description>
+      <title>{{ post.title | xml_escape}}</title>
+      <link>http://jekyllrb.com{{ post.url }}</link>
+      <pubDate>{{ post.date | date_to_rfc822 }}</pubDate>
+      <dc:creator>{{ post.author }}</dc:creator>
+      {% for tag in post.tags %}
+      <category>{{ tag | xml_escape }}</category>
+      {% endfor %}
+      {% for cat in post.categories %}
+      <category>{{ cat | xml_escape }}</category>
+      {% endfor %}
+      <guid isPermaLink="true">http://jekyllrb.com{{ post.url }}</guid>
+      <description>{{ post.content | xml_escape }}</description>
     </item>
     {% endfor %}
-</channel>
+  </channel>
 </rss>
diff --git a/site/fonts/FontAwesome.otf b/site/fonts/FontAwesome.otf
new file mode 100644
index 0000000..8b0f54e
Binary files /dev/null and b/site/fonts/FontAwesome.otf differ
diff --git a/site/fonts/fontawesome-webfont.eot b/site/fonts/fontawesome-webfont.eot
new file mode 100755
index 0000000..7c79c6a
Binary files /dev/null and b/site/fonts/fontawesome-webfont.eot differ
diff --git a/site/fonts/fontawesome-webfont.svg b/site/fonts/fontawesome-webfont.svg
new file mode 100755
index 0000000..45fdf33
--- /dev/null
+++ b/site/fonts/fontawesome-webfont.svg
@@ -0,0 +1,414 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata></metadata>
+<defs>
+<font id="fontawesomeregular" horiz-adv-x="1536" >
+<font-face units-per-em="1792" ascent="1536" descent="-256" />
+<missing-glyph horiz-adv-x="448" />
+<glyph unicode=" "  horiz-adv-x="448" />
+<glyph unicode="&#x09;" horiz-adv-x="448" />
+<glyph unicode="&#xa0;" horiz-adv-x="448" />
+<glyph unicode="&#xa8;" horiz-adv-x="1792" />
+<glyph unicode="&#xa9;" horiz-adv-x="1792" />
+<glyph unicode="&#xae;" horiz-adv-x="1792" />
+<glyph unicode="&#xb4;" horiz-adv-x="1792" />
+<glyph unicode="&#xc6;" horiz-adv-x="1792" />
+<glyph unicode="&#x2000;" horiz-adv-x="768" />
+<glyph unicode="&#x2001;" />
+<glyph unicode="&#x2002;" horiz-adv-x="768" />
+<glyph unicode="&#x2003;" />
+<glyph unicode="&#x2004;" horiz-adv-x="512" />
+<glyph unicode="&#x2005;" horiz-adv-x="384" />
+<glyph unicode="&#x2006;" horiz-adv-x="256" />
+<glyph unicode="&#x2007;" horiz-adv-x="256" />
+<glyph unicode="&#x2008;" horiz-adv-x="192" />
+<glyph unicode="&#x2009;" horiz-adv-x="307" />
+<glyph unicode="&#x200a;" horiz-adv-x="85" />
+<glyph unicode="&#x202f;" horiz-adv-x="307" />
+<glyph unicode="&#x205f;" horiz-adv-x="384" />
+<glyph unicode="&#x2122;" horiz-adv-x="1792" />
+<glyph unicode="&#x221e;" horiz-adv-x="1792" />
+<glyph unicode="&#x2260;" horiz-adv-x="1792" />
+<glyph unicode="&#xe000;" horiz-adv-x="500" d="M0 0z" />
+<glyph unicode="&#xf000;" horiz-adv-x="1792" d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" />
+<glyph unicode="&#xf001;" d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89 t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf002;" horiz-adv-x="1664" d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5 t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
+<glyph unicode="&#xf003;" horiz-adv-x="1792" d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13 t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 [...]
+<glyph unicode="&#xf004;" horiz-adv-x="1792" d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600 q-18 -18 -44 -18z" />
+<glyph unicode="&#xf005;" horiz-adv-x="1664" d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455 l502 -73q56 -9 56 -46z" />
+<glyph unicode="&#xf006;" horiz-adv-x="1664" d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500 l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" />
+<glyph unicode="&#xf007;" horiz-adv-x="1408" d="M1408 131q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q9 0 42 -21.5t74.5 -48t108 -48t133.5 -21.5t133.5 21.5t108 48t74.5 48t42 21.5q61 0 111.5 -20t85.5 -53.5t62 -81 t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
+<glyph unicode="&#xf008;" horiz-adv-x="1920" d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128 q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 [...]
+<glyph unicode="&#xf009;" horiz-adv-x="1664" d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38 h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf00a;" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40  [...]
+<glyph unicode="&#xf00b;" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40  [...]
+<glyph unicode="&#xf00c;" horiz-adv-x="1792" d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" />
+<glyph unicode="&#xf00d;" horiz-adv-x="1408" d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68 t-28 -68l-294 -294l294 -294q28 -28 28 -68z" />
+<glyph unicode="&#xf00e;" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224 q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343  [...]
+<glyph unicode="&#xf010;" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150  [...]
+<glyph unicode="&#xf011;" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5 t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0  [...]
+<glyph unicode="&#xf012;" horiz-adv-x="1792" d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t [...]
+<glyph unicode="&#xf013;" d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38 q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5 [...]
+<glyph unicode="&#xf014;" horiz-adv-x="1408" d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q [...]
+<glyph unicode="&#xf015;" horiz-adv-x="1664" d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5 l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" />
+<glyph unicode="&#xf016;" horiz-adv-x="1280" d="M128 0h1024v768h-416q-40 0 -68 28t-28 68v416h-512v-1280zM768 896h376q-10 29 -22 41l-313 313q-12 12 -41 22v-376zM1280 864v-896q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h640q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88z " />
+<glyph unicode="&#xf017;" d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf018;" horiz-adv-x="1920" d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256 q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t2 [...]
+<glyph unicode="&#xf019;" horiz-adv-x="1664" d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136 q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q4 [...]
+<glyph unicode="&#xf01a;" d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273 t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf01b;" d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198 t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf01c;" d="M1023 576h316q-1 3 -2.5 8t-2.5 8l-212 496h-708l-212 -496q-1 -2 -2.5 -8t-2.5 -8h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552 q25 -61 25 -123z" />
+<glyph unicode="&#xf01d;" d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf01e;" d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q14 0 25 -9 l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" />
+<glyph unicode="&#xf021;" d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117 q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 2 [...]
+<glyph unicode="&#xf022;" horiz-adv-x="1792" d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5  [...]
+<glyph unicode="&#xf023;" horiz-adv-x="1152" d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf024;" horiz-adv-x="1792" d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48 t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -1 [...]
+<glyph unicode="&#xf025;" horiz-adv-x="1664" d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78 t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185  [...]
+<glyph unicode="&#xf026;" horiz-adv-x="768" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" />
+<glyph unicode="&#xf027;" horiz-adv-x="1152" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" />
+<glyph unicode="&#xf028;" horiz-adv-x="1664" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56  [...]
+<glyph unicode="&#xf029;" horiz-adv-x="1408" d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" />
+<glyph unicode="&#xf02a;" horiz-adv-x="1792" d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" />
+<glyph unicode="&#xf02b;" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91z" />
+<glyph unicode="&#xf02c;" horiz-adv-x="1920" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l7 [...]
+<glyph unicode="&#xf02d;" horiz-adv-x="1664" d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23 q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 [...]
+<glyph unicode="&#xf02e;" horiz-adv-x="1280" d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
+<glyph unicode="&#xf02f;" horiz-adv-x="1664" d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68 v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" />
+<glyph unicode="&#xf030;" horiz-adv-x="1920" d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136 q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+<glyph unicode="&#xf031;" horiz-adv-x="1664" d="M725 977l-170 -450q73 -1 153.5 -2t119 -1.5t52.5 -0.5l29 2q-32 95 -92 241q-53 132 -92 211zM21 -128h-21l2 79q22 7 80 18q89 16 110 31q20 16 48 68l237 616l280 724h75h53l11 -21l205 -480q103 -242 124 -297q39 -102 96 -235q26 -58 65 -164q24 -67 65 -149 q22 -49 35 -57q22 -19 69 -23q47 -6 103 -27q6 -39 6 -57q0 -14 -1 -26q-80 0 -192 8q-93 8 -189 8q-79 0 -135 -2l-200 -11l-58 -2q0 45 4 78l131 28q56 13 68 23q12 12 12 27t-6 32l-47 114l-92 228l-450 2q-29 - [...]
+<glyph unicode="&#xf032;" horiz-adv-x="1408" d="M555 15q76 -32 140 -32q131 0 216 41t122 113q38 70 38 181q0 114 -41 180q-58 94 -141 126q-80 32 -247 32q-74 0 -101 -10v-144l-1 -173l3 -270q0 -15 12 -44zM541 761q43 -7 109 -7q175 0 264 65t89 224q0 112 -85 187q-84 75 -255 75q-52 0 -130 -13q0 -44 2 -77 q7 -122 6 -279l-1 -98q0 -43 1 -77zM0 -128l2 94q45 9 68 12q77 12 123 31q17 27 21 51q9 66 9 194l-2 497q-5 256 -9 404q-1 87 -11 109q-1 4 -12 12q-18 12 -69 15q-30 2 -114 13l-4 83l260 6l380 13l45 1q5 0 [...]
+<glyph unicode="&#xf033;" horiz-adv-x="1024" d="M0 -126l17 85q4 1 77 20q76 19 116 39q29 37 41 101l27 139l56 268l12 64q8 44 17 84.5t16 67t12.5 46.5t9 30.5t3.5 11.5l29 157l16 63l22 135l8 50v38q-41 22 -144 28q-28 2 -38 4l19 103l317 -14q39 -2 73 -2q66 0 214 9q33 2 68 4.5t36 2.5q-2 -19 -6 -38 q-7 -29 -13 -51q-55 -19 -109 -31q-64 -16 -101 -31q-12 -31 -24 -88q-9 -44 -13 -82q-44 -199 -66 -306l-61 -311l-38 -158l-43 -235l-12 -45q-2 -7 1 -27q64 -15 119 -21q36 -5 66 -10q-1 -29 -7 -58q-7 -31 -9 -41q- [...]
+<glyph unicode="&#xf034;" horiz-adv-x="1792" d="M81 1407l54 -27q20 -5 211 -5h130l19 3l115 1l215 -1h293l34 -2q14 -1 28 7t21 16l7 8l42 1q15 0 28 -1v-104.5t1 -131.5l1 -100l-1 -58q0 -32 -4 -51q-39 -15 -68 -18q-25 43 -54 128q-8 24 -15.5 62.5t-11.5 65.5t-6 29q-13 15 -27 19q-7 2 -42.5 2t-103.5 -1t-111 -1 q-34 0 -67 -5q-10 -97 -8 -136l1 -152v-332l3 -359l-1 -147q-1 -46 11 -85q49 -25 89 -32q2 0 18 -5t44 -13t43 -12q30 -8 50 -18q5 -45 5 -50q0 -10 -3 -29q-14 -1 -34 -1q-110 0 -187 10q-72 8 -238 8q-88  [...]
+<glyph unicode="&#xf035;" d="M81 1407l54 -27q20 -5 211 -5h130l19 3l115 1l446 -1h318l34 -2q14 -1 28 7t21 16l7 8l42 1q15 0 28 -1v-104.5t1 -131.5l1 -100l-1 -58q0 -32 -4 -51q-39 -15 -68 -18q-25 43 -54 128q-8 24 -15.5 62.5t-11.5 65.5t-6 29q-13 15 -27 19q-7 2 -58.5 2t-138.5 -1t-128 -1 q-94 0 -127 -5q-10 -97 -8 -136l1 -152v52l3 -359l-1 -147q-1 -46 11 -85q49 -25 89 -32q2 0 18 -5t44 -13t43 -12q30 -8 50 -18q5 -45 5 -50q0 -10 -3 -29q-14 -1 -34 -1q-110 0 -187 10q-72 8 -238 8q-82 0 -233 -13q-45 -5 -7 [...]
+<glyph unicode="&#xf036;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf037;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19 h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf038;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf039;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf03a;" horiz-adv-x="1792" d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5 t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 - [...]
+<glyph unicode="&#xf03b;" horiz-adv-x="1792" d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22 [...]
+<glyph unicode="&#xf03c;" horiz-adv-x="1792" d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q- [...]
+<glyph unicode="&#xf03d;" horiz-adv-x="1792" d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5 q39 -17 39 -59z" />
+<glyph unicode="&#xf03e;" horiz-adv-x="1920" d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216 q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf040;" d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38 q53 0 91 -38l235 -234q37 -39 37 -91z" />
+<glyph unicode="&#xf041;" horiz-adv-x="1024" d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" />
+<glyph unicode="&#xf042;" d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf043;" horiz-adv-x="1024" d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362 q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" />
+<glyph unicode="&#xf044;" horiz-adv-x="1792" d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 12 [...]
+<glyph unicode="&#xf045;" horiz-adv-x="1664" d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832 q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34 [...]
+<glyph unicode="&#xf046;" horiz-adv-x="1664" d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832 q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263  [...]
+<glyph unicode="&#xf047;" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45 t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256  [...]
+<glyph unicode="&#xf048;" horiz-adv-x="1024" d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19z" />
+<glyph unicode="&#xf049;" horiz-adv-x="1792" d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19l710 710 q19 19 32 13t13 -32v-710q4 11 13 19z" />
+<glyph unicode="&#xf04a;" horiz-adv-x="1664" d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-8 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q5 11 13 19z" />
+<glyph unicode="&#xf04b;" horiz-adv-x="1408" d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" />
+<glyph unicode="&#xf04c;" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf04d;" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf04e;" horiz-adv-x="1664" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
+<glyph unicode="&#xf050;" horiz-adv-x="1792" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19l-710 -710 q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
+<glyph unicode="&#xf051;" horiz-adv-x="1024" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19z" />
+<glyph unicode="&#xf052;" horiz-adv-x="1538" d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" />
+<glyph unicode="&#xf053;" horiz-adv-x="1152" d="M742 -37l-652 651q-37 37 -37 90.5t37 90.5l652 651q37 37 90.5 37t90.5 -37l75 -75q37 -37 37 -90.5t-37 -90.5l-486 -486l486 -485q37 -38 37 -91t-37 -90l-75 -75q-37 -37 -90.5 -37t-90.5 37z" />
+<glyph unicode="&#xf054;" horiz-adv-x="1152" d="M1099 704q0 -52 -37 -91l-652 -651q-37 -37 -90 -37t-90 37l-76 75q-37 39 -37 91q0 53 37 90l486 486l-486 485q-37 39 -37 91q0 53 37 90l76 75q36 38 90 38t90 -38l652 -651q37 -37 37 -90z" />
+<glyph unicode="&#xf055;" d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5 t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf056;" d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5 t103 -385.5z" />
+<glyph unicode="&#xf057;" d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19 q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 - [...]
+<glyph unicode="&#xf058;" d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf059;" d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59 q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-38 [...]
+<glyph unicode="&#xf05a;" d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23 t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf05b;" d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109 q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h [...]
+<glyph unicode="&#xf05c;" d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23 l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385. [...]
+<glyph unicode="&#xf05d;" d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198 t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf05e;" d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61 t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" />
+<glyph unicode="&#xf060;" d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5 t32.5 -90.5z" />
+<glyph unicode="&#xf061;" d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" />
+<glyph unicode="&#xf062;" horiz-adv-x="1664" d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651 q37 -39 37 -91z" />
+<glyph unicode="&#xf063;" horiz-adv-x="1664" d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
+<glyph unicode="&#xf064;" horiz-adv-x="1792" d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22 t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" />
+<glyph unicode="&#xf065;" d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332 q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf066;" d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45 t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" />
+<glyph unicode="&#xf067;" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf068;" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf069;" horiz-adv-x="1664" d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154 q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" />
+<glyph unicode="&#xf06a;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192 q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" />
+<glyph unicode="&#xf06b;" d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320 q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 [...]
+<glyph unicode="&#xf06c;" horiz-adv-x="1792" d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268 q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-30 0 -51 11t-31 24t-27 42q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 3 [...]
+<glyph unicode="&#xf06d;" horiz-adv-x="1408" d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1 q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150. [...]
+<glyph unicode="&#xf06e;" horiz-adv-x="1792" d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5 t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 [...]
+<glyph unicode="&#xf070;" horiz-adv-x="1792" d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9 q-105 -188 -315 -566t-316 -567l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 [...]
+<glyph unicode="&#xf071;" horiz-adv-x="1792" d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185 q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" />
+<glyph unicode="&#xf072;" horiz-adv-x="1408" d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9 q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" />
+<glyph unicode="&#xf073;" horiz-adv-x="1664" d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h28 [...]
+<glyph unicode="&#xf074;" horiz-adv-x="1792" d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1 t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -1 [...]
+<glyph unicode="&#xf075;" horiz-adv-x="1792" d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281 q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" />
+<glyph unicode="&#xf076;" d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384 q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 [...]
+<glyph unicode="&#xf077;" horiz-adv-x="1664" d="M1611 320q0 -53 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-486 485l-486 -485q-36 -38 -90 -38t-90 38l-75 75q-38 36 -38 90q0 53 38 91l651 651q37 37 90 37q52 0 91 -37l650 -651q38 -38 38 -91z" />
+<glyph unicode="&#xf078;" horiz-adv-x="1664" d="M1611 832q0 -53 -37 -90l-651 -651q-38 -38 -91 -38q-54 0 -90 38l-651 651q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l486 -486l486 486q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
+<glyph unicode="&#xf079;" horiz-adv-x="1920" d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -11 7 -21 zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5  [...]
+<glyph unicode="&#xf07a;" horiz-adv-x="1664" d="M640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5 l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h [...]
+<glyph unicode="&#xf07b;" horiz-adv-x="1664" d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
+<glyph unicode="&#xf07c;" horiz-adv-x="1920" d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5 t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" />
+<glyph unicode="&#xf07d;" horiz-adv-x="768" d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" />
+<glyph unicode="&#xf07e;" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
+<glyph unicode="&#xf080;" horiz-adv-x="1920" d="M512 512v-384h-256v384h256zM896 1024v-896h-256v896h256zM1280 768v-640h-256v640h256zM1664 1152v-1024h-256v1024h256zM1792 32v1216q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5z M1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf081;" d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4 q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t [...]
+<glyph unicode="&#xf082;" d="M1307 618l23 219h-198v109q0 49 15.5 68.5t71.5 19.5h110v219h-175q-152 0 -218 -72t-66 -213v-131h-131v-219h131v-635h262v635h175zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960 q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf083;" horiz-adv-x="1792" d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5 t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 - [...]
+<glyph unicode="&#xf084;" horiz-adv-x="1792" d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26 l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189  [...]
+<glyph unicode="&#xf085;" horiz-adv-x="1920" d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -10 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11  [...]
+<glyph unicode="&#xf086;" horiz-adv-x="1792" d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224 q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 [...]
+<glyph unicode="&#xf087;" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5 t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 4 [...]
+<glyph unicode="&#xf088;" d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 32 18 69t-17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5 t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h [...]
+<glyph unicode="&#xf089;" horiz-adv-x="896" d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" />
+<glyph unicode="&#xf08a;" horiz-adv-x="1792" d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559 q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -6 [...]
+<glyph unicode="&#xf08b;" horiz-adv-x="1664" d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704 q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t4 [...]
+<glyph unicode="&#xf08c;" d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5 q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf08d;" horiz-adv-x="1152" d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38 t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" />
+<glyph unicode="&#xf08e;" horiz-adv-x="1792" d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q2 [...]
+<glyph unicode="&#xf090;" d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5 q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -2 [...]
+<glyph unicode="&#xf091;" horiz-adv-x="1664" d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91 t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 4 [...]
+<glyph unicode="&#xf092;" d="M394 184q-8 -9 -20 3q-13 11 -4 19q8 9 20 -3q12 -11 4 -19zM352 245q9 -12 0 -19q-8 -6 -17 7t0 18q9 7 17 -6zM291 305q-5 -7 -13 -2q-10 5 -7 12q3 5 13 2q10 -5 7 -12zM322 271q-6 -7 -16 3q-9 11 -2 16q6 6 16 -3q9 -11 2 -16zM451 159q-4 -12 -19 -6q-17 4 -13 15 t19 7q16 -5 13 -16zM514 154q0 -11 -16 -11q-17 -2 -17 11q0 11 16 11q17 2 17 -11zM572 164q2 -10 -14 -14t-18 8t14 15q16 2 18 -9zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-224q-16 0 -24.5 1t-19.5 5t-16 14.5t-5 [...]
+<glyph unicode="&#xf093;" horiz-adv-x="1664" d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92 t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 [...]
+<glyph unicode="&#xf094;" d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5 q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t- [...]
+<glyph unicode="&#xf095;" horiz-adv-x="1408" d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -52.5 3.5t-57.5 12.5t-47.5 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-128 79 -264.5 215.5t-215.5 264.5q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47.5t-12.5 57.5t-3.5 52.5 q0 92 51 186q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5  [...]
+<glyph unicode="&#xf096;" horiz-adv-x="1408" d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf097;" horiz-adv-x="1280" d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289 q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
+<glyph unicode="&#xf098;" d="M1280 343q0 11 -2 16q-3 8 -38.5 29.5t-88.5 49.5l-53 29q-5 3 -19 13t-25 15t-21 5q-18 0 -47 -32.5t-57 -65.5t-44 -33q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170.5 126.5t-126.5 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5t-3.5 16.5q0 13 20.5 33.5t45 38.5 t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216. [...]
+<glyph unicode="&#xf099;" horiz-adv-x="1664" d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41 q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" />
+<glyph unicode="&#xf09a;" horiz-adv-x="768" d="M511 980h257l-30 -284h-227v-824h-341v824h-170v284h170v171q0 182 86 275.5t283 93.5h227v-284h-142q-39 0 -62.5 -6.5t-34 -23.5t-13.5 -34.5t-3 -49.5v-142z" />
+<glyph unicode="&#xf09b;" d="M1536 640q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -39.5 7t-12.5 30v211q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5 q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 - [...]
+<glyph unicode="&#xf09c;" horiz-adv-x="1664" d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5 t316.5 -131.5t131.5 -316.5z" />
+<glyph unicode="&#xf09d;" horiz-adv-x="1920" d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608 q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
+<glyph unicode="&#xf09e;" horiz-adv-x="1408" d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5 t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5 [...]
+<glyph unicode="&#xf0a0;" d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5 h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q- [...]
+<glyph unicode="&#xf0a1;" horiz-adv-x="1792" d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5 t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" />
+<glyph unicode="&#xf0a2;" horiz-adv-x="1664" d="M848 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM183 128h1298q-164 181 -246.5 411.5t-82.5 484.5q0 256 -320 256t-320 -256q0 -254 -82.5 -484.5t-246.5 -411.5zM1664 128q0 -52 -38 -90t-90 -38 h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q190 161 287 397.5t97 498.5q0 165 96 262t264 117q-8 18 -8 37q0 40 28 68t68 28t68 -28t28 -68q0 -19 -8 -37q168 -20 264 -117 [...]
+<glyph unicode="&#xf0a3;" d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70 l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 [...]
+<glyph unicode="&#xf0a4;" horiz-adv-x="1792" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106 q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-1 [...]
+<glyph unicode="&#xf0a5;" horiz-adv-x="1792" d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-2 3 -3.5 4.5t-4 4.5t-4.5 5q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576 q-50 0 -89 -38.5t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32z [...]
+<glyph unicode="&#xf0a6;" d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576 q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 - [...]
+<glyph unicode="&#xf0a7;" d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33 t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -4 [...]
+<glyph unicode="&#xf0a8;" d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0a9;" d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0aa;" d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0ab;" d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0ac;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11 q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 10.5t-9.5 10.5q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5 [...]
+<glyph unicode="&#xf0ad;" horiz-adv-x="1664" d="M384 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1028 484l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5zM1662 919q0 -39 -23 -106q-47 -134 -164.5 -217.5 t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q58 0 121.5 -16.5t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25z" />
+<glyph unicode="&#xf0ae;" horiz-adv-x="1792" d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 832v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19 t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0b0;" horiz-adv-x="1408" d="M1403 1241q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70q17 39 59 39h1280q42 0 59 -39z" />
+<glyph unicode="&#xf0b1;" horiz-adv-x="1792" d="M640 1280h512v128h-512v-128zM1792 640v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384q0 66 47 113t113 47h352v160q0 40 28 68 t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf0b2;" d="M1283 995l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l144 -144 l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45v-448q0  [...]
+<glyph unicode="&#xf0c0;" horiz-adv-x="1920" d="M593 640q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256zM1664 3q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5 t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM640 1280q0 -106 -7 [...]
+<glyph unicode="&#xf0c1;" horiz-adv-x="1664" d="M1456 320q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26 l147 146q28 28 28 67zM753 1025q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3. [...]
+<glyph unicode="&#xf0c2;" horiz-adv-x="1920" d="M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5z " />
+<glyph unicode="&#xf0c3;" horiz-adv-x="1664" d="M1527 88q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5t21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399zM748 813l-272 -429h712l-272 429l-20 31v37v399h-128v-399v-37z" />
+<glyph unicode="&#xf0c4;" horiz-adv-x="1792" d="M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84 q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 [...]
+<glyph unicode="&#xf0c5;" horiz-adv-x="1792" d="M1696 1152q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323l-299 -299 h299v299zM708 676l316 316v416h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h512v256q0 40 20 88t48 76zM1664 -128v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h896z" />
+<glyph unicode="&#xf0c6;" horiz-adv-x="1408" d="M1404 151q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776q-113 115 -113 271q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181 l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0  [...]
+<glyph unicode="&#xf0c7;" d="M384 0h768v384h-768v-384zM1280 0h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416zM896 928v320q0 13 -9.5 22.5t-22.5 9.5 h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1536 896v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 [...]
+<glyph unicode="&#xf0c8;" d="M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf0c9;" d="M1536 192v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 704v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 1216v-128q0 -26 -19 -45 t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0ca;" horiz-adv-x="1792" d="M384 128q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 640q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1152q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22. [...]
+<glyph unicode="&#xf0cb;" horiz-adv-x="1792" d="M381 -84q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88zM383 543v-159h-362 q-6 36 -6 54q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t- [...]
+<glyph unicode="&#xf0cc;" horiz-adv-x="1792" d="M1760 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h1728zM483 704q-28 35 -51 80q-48 97 -48 188q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6 l-14 2q-50 149 -103 205q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743zM990 448h411q7 -39 7 -92q0 -111 -41 -212q-23 -55 -71 -104q-37 -3 [...]
+<glyph unicode="&#xf0cd;" d="M48 1313q-37 2 -45 4l-3 88q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47 q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -1 [...]
+<glyph unicode="&#xf0ce;" horiz-adv-x="1664" d="M512 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23 v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -2 [...]
+<glyph unicode="&#xf0d0;" horiz-adv-x="1664" d="M1190 955l293 293l-107 107l-293 -293zM1637 1248q0 -27 -18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45t18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45zM286 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM636 1276 l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1566 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM926 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" />
+<glyph unicode="&#xf0d1;" horiz-adv-x="1792" d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5 t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5  [...]
+<glyph unicode="&#xf0d2;" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134 q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11 [...]
+<glyph unicode="&#xf0d3;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5 t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 - [...]
+<glyph unicode="&#xf0d4;" d="M678 -57q0 -38 -10 -71h-380q-95 0 -171.5 56.5t-103.5 147.5q24 45 69 77.5t100 49.5t107 24t107 7q32 0 49 -2q6 -4 30.5 -21t33 -23t31 -23t32 -25.5t27.5 -25.5t26.5 -29.5t21 -30.5t17.5 -34.5t9.5 -36t4.5 -40.5zM385 294q-234 -7 -385 -85v433q103 -118 273 -118 q32 0 70 5q-21 -61 -21 -86q0 -67 63 -149zM558 805q0 -100 -43.5 -160.5t-140.5 -60.5q-51 0 -97 26t-78 67.5t-56 93.5t-35.5 104t-11.5 99q0 96 51.5 165t144.5 69q66 0 119 -41t84 -104t47 -130t16 -128zM1536 896v-736q0 -1 [...]
+<glyph unicode="&#xf0d5;" horiz-adv-x="1664" d="M876 71q0 21 -4.5 40.5t-9.5 36t-17.5 34.5t-21 30.5t-26.5 29.5t-27.5 25.5t-32 25.5t-31 23t-33 23t-30.5 21q-17 2 -50 2q-54 0 -106 -7t-108 -25t-98 -46t-69 -75t-27 -107q0 -68 35.5 -121.5t93 -84t120.5 -45.5t127 -15q59 0 112.5 12.5t100.5 39t74.5 73.5 t27.5 110zM756 933q0 60 -16.5 127.5t-47 130.5t-84 104t-119.5 41q-93 0 -144 -69t-51 -165q0 -47 11.5 -99t35.5 -104t56 -93.5t78 -67.5t97 -26q97 0 140.5 60.5t43.5 160.5zM625 1408h437l-135 -79h-135q71 -45 [...]
+<glyph unicode="&#xf0d6;" horiz-adv-x="1920" d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384 v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45  [...]
+<glyph unicode="&#xf0d7;" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0d8;" horiz-adv-x="1024" d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="&#xf0d9;" horiz-adv-x="640" d="M640 1088v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45t19 45l448 448q19 19 45 19t45 -19t19 -45z" />
+<glyph unicode="&#xf0da;" horiz-adv-x="640" d="M576 640q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="&#xf0db;" horiz-adv-x="1664" d="M160 0h608v1152h-640v-1120q0 -13 9.5 -22.5t22.5 -9.5zM1536 32v1120h-640v-1152h608q13 0 22.5 9.5t9.5 22.5zM1664 1248v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf0dc;" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45zM1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="&#xf0dd;" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0de;" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="&#xf0e0;" horiz-adv-x="1792" d="M1792 826v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87zM1792 1120q0 -79 -49 -151t-122 -123 q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5q0 78 41.5 130t11 [...]
+<glyph unicode="&#xf0e1;" d="M349 911v-991h-330v991h330zM370 1217q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5zM1536 488v-568h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329 q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5z" />
+<glyph unicode="&#xf0e2;" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5 t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 - [...]
+<glyph unicode="&#xf0e3;" horiz-adv-x="1792" d="M1771 0q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5 t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 - [...]
+<glyph unicode="&#xf0e4;" horiz-adv-x="1792" d="M384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM576 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1004 351l101 382q6 26 -7.5 48.5t-38.5 29.5 t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5t-63 -98.5q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91zM1664 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37 [...]
+<glyph unicode="&#xf0e5;" horiz-adv-x="1792" d="M896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640 q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26  [...]
+<glyph unicode="&#xf0e6;" horiz-adv-x="1792" d="M704 1152q-153 0 -286 -52t-211.5 -141t-78.5 -191q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52zM704 1280q191 0 353.5 -68.5t256.5 -186.5t94 -257t-94 -257 t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q [...]
+<glyph unicode="&#xf0e7;" horiz-adv-x="896" d="M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z" />
+<glyph unicode="&#xf0e8;" horiz-adv-x="1792" d="M1792 288v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h [...]
+<glyph unicode="&#xf0e9;" horiz-adv-x="1664" d="M896 708v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11zM1664 681q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97 q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 2 [...]
+<glyph unicode="&#xf0ea;" horiz-adv-x="1792" d="M768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1024 1312v64q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5zM1280 640h299l-299 299v-299zM1792 512v-672q0 -40 -28 -68t-68 -28 h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88z" />
+<glyph unicode="&#xf0eb;" horiz-adv-x="1024" d="M736 960q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90zM896 960q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134 q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180zM1024 960q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q [...]
+<glyph unicode="&#xf0ec;" horiz-adv-x="1792" d="M1792 352v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5zM1792 896q0 -14 -9 -23l-320 -320q-9 -9 -23 -9 q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
+<glyph unicode="&#xf0ed;" horiz-adv-x="1920" d="M1280 608q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
+<glyph unicode="&#xf0ee;" horiz-adv-x="1920" d="M1280 672q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
+<glyph unicode="&#xf0f0;" horiz-adv-x="1408" d="M384 192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56 t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 [...]
+<glyph unicode="&#xf0f1;" horiz-adv-x="1408" d="M1280 832q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 832q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5t-131.5 271.5v132q-164 20 -274 128t-110 252v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48 t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 - [...]
+<glyph unicode="&#xf0f2;" horiz-adv-x="1792" d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h64zM1408 1152v-1280h-1024v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128zM1792 928v-832q0 -92 -66 -158t-158 -66h-64v1280h64q92 0 158 -66 t66 -158z" />
+<glyph unicode="&#xf0f3;" horiz-adv-x="1664" d="M848 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM1664 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q190 161 287 397.5t97 498.5 q0 165 96 262t264 117q-8 18 -8 37q0 40 28 68t68 28t68 -28t28 -68q0 -19 -8 -37q168 -20 264 -117t96 -262q0 -262 97 -498.5t287 -397.5z" />
+<glyph unicode="&#xf0f4;" horiz-adv-x="1920" d="M1664 896q0 80 -56 136t-136 56h-64v-384h64q80 0 136 56t56 136zM0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM1856 896q0 -159 -112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158v736q0 26 19 45 t45 19h1152q159 0 271.5 -112.5t112.5 -271.5z" />
+<glyph unicode="&#xf0f5;" horiz-adv-x="1408" d="M640 1472v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45 t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45zM1408 1472v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5v800q0 132 94 226t226 94h256q26 0 45 -19t1 [...]
+<glyph unicode="&#xf0f6;" horiz-adv-x="1280" d="M1024 352v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1024 608v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM128 0h1024v768h-416q-40 0 -68 28t-28 68v416h-512v-1280z M768 896h376q-10 29 -22 41l-313 313q-12 12 -41 22v-376zM1280 864v-896q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h640q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88z" />
+<glyph unicode="&#xf0f7;" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22 [...]
+<glyph unicode="&#xf0f8;" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22 [...]
+<glyph unicode="&#xf0f9;" horiz-adv-x="1920" d="M640 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM1536 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1664 800v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23  [...]
+<glyph unicode="&#xf0fa;" horiz-adv-x="1792" d="M1280 416v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM640 1152h512v128h-512v-128zM256 1152v-1280h-32 q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h32zM1440 1152v-1280h-1088v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160zM1792 928v-832q0 -92 -66 -158t-158 -66h-32v1280h32q92 0 15 [...]
+<glyph unicode="&#xf0fb;" horiz-adv-x="1920" d="M1920 576q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h64h160h96 q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64l352 -32q261 -58 287 -93z" />
+<glyph unicode="&#xf0fc;" horiz-adv-x="1664" d="M640 640v384h-256v-256q0 -53 37.5 -90.5t90.5 -37.5h128zM1664 192v-192h-1152v192l128 192h-128q-159 0 -271.5 112.5t-112.5 271.5v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z" />
+<glyph unicode="&#xf0fd;" d="M1280 192v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf0fe;" d="M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf100;" horiz-adv-x="1024" d="M627 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23zM1011 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23z" />
+<glyph unicode="&#xf101;" horiz-adv-x="1024" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM979 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23 l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="&#xf102;" horiz-adv-x="1152" d="M1075 224q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM1075 608q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393 q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="&#xf103;" horiz-adv-x="1152" d="M1075 672q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23zM1075 1056q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+<glyph unicode="&#xf104;" horiz-adv-x="640" d="M627 992q0 -13 -10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+<glyph unicode="&#xf105;" horiz-adv-x="640" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="&#xf106;" horiz-adv-x="1152" d="M1075 352q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="&#xf107;" horiz-adv-x="1152" d="M1075 800q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+<glyph unicode="&#xf108;" horiz-adv-x="1920" d="M1792 544v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1376v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19 t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf109;" horiz-adv-x="1920" d="M416 256q-66 0 -113 47t-47 113v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088zM384 1120v-704q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5z M1760 192h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68v96h160h1600zM1040 96q16 0 16 16t-16 16h-160q-16 0 -16 -16t16 -16h160z" />
+<glyph unicode="&#xf10a;" horiz-adv-x="1152" d="M640 128q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1024 288v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5zM1152 1248v-1088q0 -66 -47 -113t-113 -47h-832 q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf10b;" horiz-adv-x="768" d="M464 128q0 33 -23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5zM672 288v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5zM480 1136 q0 16 -16 16h-160q-16 0 -16 -16t16 -16h160q16 0 16 16zM768 1152v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf10c;" d="M768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103 t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf10d;" horiz-adv-x="1664" d="M768 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z M1664 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75  [...]
+<glyph unicode="&#xf10e;" horiz-adv-x="1664" d="M768 1216v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136zM1664 1216 v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 [...]
+<glyph unicode="&#xf110;" horiz-adv-x="1568" d="M496 192q0 -60 -42.5 -102t-101.5 -42q-60 0 -102 42t-42 102t42 102t102 42q59 0 101.5 -42t42.5 -102zM928 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM320 640q0 -66 -47 -113t-113 -47t-113 47t-47 113 t47 113t113 47t113 -47t47 -113zM1360 192q0 -46 -33 -79t-79 -33t-79 33t-33 79t33 79t79 33t79 -33t33 -79zM528 1088q0 -73 -51.5 -124.5t-124.5 -51.5t-124.5 51.5t-51.5 124.5t51.5 124.5t124.5 51.5t124.5 [...]
+<glyph unicode="&#xf111;" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf112;" horiz-adv-x="1792" d="M1792 416q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19 l-512 512q-19 19 -19 45t19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333z" />
+<glyph unicode="&#xf113;" horiz-adv-x="1664" d="M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320 q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM16 [...]
+<glyph unicode="&#xf114;" horiz-adv-x="1664" d="M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320 q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
+<glyph unicode="&#xf115;" horiz-adv-x="1920" d="M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68 v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 [...]
+<glyph unicode="&#xf116;" horiz-adv-x="1792" />
+<glyph unicode="&#xf117;" horiz-adv-x="1792" />
+<glyph unicode="&#xf118;" d="M1134 461q-37 -121 -138 -195t-228 -74t-228 74t-138 195q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-2 [...]
+<glyph unicode="&#xf119;" d="M1134 307q8 -25 -4 -48.5t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5q37 121 138 195t228 74t228 -74t138 -195zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248 [...]
+<glyph unicode="&#xf11a;" d="M1152 448q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h640q26 0 45 -19t19 -45zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136. [...]
+<glyph unicode="&#xf11b;" horiz-adv-x="1920" d="M832 448v128q0 14 -9 23t-23 9h-192v192q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-192h-192q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h192v-192q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v192h192q14 0 23 9t9 23zM1408 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5 t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1920 512q0 -212 -150 -362t-362 -1 [...]
+<glyph unicode="&#xf11c;" horiz-adv-x="1920" d="M384 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM512 624v-96q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h224q16 0 16 -16zM384 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 368v-96q0 -16 -16 -16 h-864q-16 0 -16 16v96q0 16 16 16h864q16 0 16 -16zM768 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM640 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16z [...]
+<glyph unicode="&#xf11d;" horiz-adv-x="1792" d="M1664 491v616q-169 -91 -306 -91q-82 0 -145 32q-100 49 -184 76.5t-178 27.5q-173 0 -403 -127v-599q245 113 433 113q55 0 103.5 -7.5t98 -26t77 -31t82.5 -39.5l28 -14q44 -22 101 -22q120 0 293 92zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9 h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -9 [...]
+<glyph unicode="&#xf11e;" horiz-adv-x="1792" d="M832 536v192q-181 -16 -384 -117v-185q205 96 384 110zM832 954v197q-172 -8 -384 -126v-189q215 111 384 118zM1664 491v184q-235 -116 -384 -71v224q-20 6 -39 15q-5 3 -33 17t-34.5 17t-31.5 15t-34.5 15.5t-32.5 13t-36 12.5t-35 8.5t-39.5 7.5t-39.5 4t-44 2 q-23 0 -49 -3v-222h19q102 0 192.5 -29t197.5 -82q19 -9 39 -15v-188q42 -17 91 -17q120 0 293 92zM1664 918v189q-169 -91 -306 -91q-45 0 -78 8v-196q148 -42 384 90zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q [...]
+<glyph unicode="&#xf120;" horiz-adv-x="1664" d="M585 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23zM1664 96v-64q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h960q14 0 23 -9 t9 -23z" />
+<glyph unicode="&#xf121;" horiz-adv-x="1920" d="M617 137l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23zM1208 1204l-373 -1291q-4 -13 -15.5 -19.5t-23.5 -2.5l-62 17q-13 4 -19.5 15.5t-2.5 24.5 l373 1291q4 13 15.5 19.5t23.5 2.5l62 -17q13 -4 19.5 -15.5t2.5 -24.5zM1865 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10 [...]
+<glyph unicode="&#xf122;" horiz-adv-x="1792" d="M640 454v-70q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-69l-397 -398q-19 -19 -19 -45t19 -45zM1792 416q0 -58 -17 -133.5t-38.5 -138t-48 -125t-40.5 -90.5l-20 -40q-8 -17 -28 -17q-6 0 -9 1 q-25 8 -23 34q43 400 -106 565q-64 71 -170.5 110.5t-267.5 52.5v-251q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-262q411 -28 599 -221q169 - [...]
+<glyph unicode="&#xf123;" horiz-adv-x="1664" d="M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500q5 -33 -6 -51.5t-34 -18.5q-17 0 -40 12l-449 236l-449 -236q-23 -12 -40 -12q-23 0 -34 18.5t-6 51.5l86 500l-364 354q-32 32 -23 59.5t54 34.5 l502 73l225 455q20 41 49 41q28 0 49 -41l225 -455l502 -73q45 -7 54 -34.5t-24 -59.5z" />
+<glyph unicode="&#xf124;" horiz-adv-x="1408" d="M1401 1187l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13.5t-22.5 35.5t4 42t29 30l1280 640q13 7 29 7q27 0 45 -19q15 -14 18.5 -34.5t-6.5 -39.5z" />
+<glyph unicode="&#xf125;" horiz-adv-x="1664" d="M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v224h-864q-14 0 -23 9t-9 23v864h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23 -9t9 -23 v-224h851l246 247q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-247 -246v-851h224q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf126;" horiz-adv-x="1024" d="M288 64q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM288 1216q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM928 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1024 1088q0 -52 -26 -96.5t-70 -69.5 q-2 -287 -226 -414q-68 -38 -203 -81q-128 -40 -169.5 -71t-41.5 -100v-26q44 -25 70 -69.5t26 -96.5q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 52 26 96.5t70 69.5v820q-44 25 -70 69.5t-26 96.5q0 80 56 13 [...]
+<glyph unicode="&#xf127;" horiz-adv-x="1664" d="M439 265l-256 -256q-10 -9 -23 -9q-12 0 -23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23zM608 224v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM384 448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23t9 23t23 9h320 q14 0 23 -9t9 -23zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-334 335q-21 21 -42 56l239 18l273 -274q27 -27 68 -27.5t68 26.5l147 146q28 28 28 67q0 40 -28 68l-274 275l18 239 [...]
+<glyph unicode="&#xf128;" horiz-adv-x="1024" d="M704 280v-240q0 -16 -12 -28t-28 -12h-240q-16 0 -28 12t-12 28v240q0 16 12 28t28 12h240q16 0 28 -12t12 -28zM1020 880q0 -54 -15.5 -101t-35 -76.5t-55 -59.5t-57.5 -43.5t-61 -35.5q-41 -23 -68.5 -65t-27.5 -67q0 -17 -12 -32.5t-28 -15.5h-240q-15 0 -25.5 18.5 t-10.5 37.5v45q0 83 65 156.5t143 108.5q59 27 84 56t25 76q0 42 -46.5 74t-107.5 32q-65 0 -108 -29q-35 -25 -107 -115q-13 -16 -31 -16q-12 0 -25 8l-164 125q-13 10 -15.5 25t5.5 28q160 266 464 266q80 0 [...]
+<glyph unicode="&#xf129;" horiz-adv-x="640" d="M640 192v-128q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64v384h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-576h64q26 0 45 -19t19 -45zM512 1344v-192q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v192 q0 26 19 45t45 19h256q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf12a;" horiz-adv-x="640" d="M512 288v-224q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v224q0 26 19 45t45 19h256q26 0 45 -19t19 -45zM542 1344l-28 -768q-1 -26 -20.5 -45t-45.5 -19h-256q-26 0 -45.5 19t-20.5 45l-28 768q-1 26 17.5 45t44.5 19h320q26 0 44.5 -19t17.5 -45z" />
+<glyph unicode="&#xf12b;" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1534 846v-206h-514l-3 27 q-4 28 -4 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q83 65 188 65q110 0 178 -59.5t68 -158.5q0 -56 -24.5 -103t-62 -76.5t-81.5 -58.5t- [...]
+<glyph unicode="&#xf12c;" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1536 -50v-206h-514l-4 27 q-3 45 -3 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q80 65 188 65q110 0 178 -59.5t68 -158.5q0 -66 -34.5 -118.5t-84 -86t-99.5 -62.5t- [...]
+<glyph unicode="&#xf12d;" horiz-adv-x="1920" d="M896 128l336 384h-768l-336 -384h768zM1909 1205q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -44h-768q-38 0 -69.5 20.5t-47.5 54.5q-15 34 -9.5 71.5t30.5 65.5l896 1024q38 44 96 44h768q38 0 69.5 -20.5t47.5 -54.5z" />
+<glyph unicode="&#xf12e;" horiz-adv-x="1664" d="M1664 438q0 -81 -44.5 -135t-123.5 -54q-41 0 -77.5 17.5t-59 38t-56.5 38t-71 17.5q-110 0 -110 -124q0 -39 16 -115t15 -115v-5q-22 0 -33 -1q-34 -3 -97.5 -11.5t-115.5 -13.5t-98 -5q-61 0 -103 26.5t-42 83.5q0 37 17.5 71t38 56.5t38 59t17.5 77.5q0 79 -54 123.5 t-135 44.5q-84 0 -143 -45.5t-59 -127.5q0 -43 15 -83t33.5 -64.5t33.5 -53t15 -50.5q0 -45 -46 -89q-37 -35 -117 -35q-95 0 -245 24q-9 2 -27.5 4t-27.5 4l-13 2q-1 0 -3 1q-2 0 -2 1v1024q2 -1 17.5 -3.5t [...]
+<glyph unicode="&#xf130;" horiz-adv-x="1152" d="M1152 832v-128q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-217 24 -364.5 187.5t-147.5 384.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -185 131.5 -316.5t316.5 -131.5 t316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45zM896 1216v-512q0 -132 -94 -226t-226 -94t-226 94t-94 226v512q0 132 94 226t226 94t226 -94t94 -226z" />
+<glyph unicode="&#xf131;" horiz-adv-x="1408" d="M271 591l-101 -101q-42 103 -42 214v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -53 15 -113zM1385 1193l-361 -361v-128q0 -132 -94 -226t-226 -94q-55 0 -109 19l-96 -96q97 -51 205 -51q185 0 316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128 q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-125 13 -235 81l-254 -254q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 [...]
+<glyph unicode="&#xf132;" horiz-adv-x="1280" d="M1088 576v640h-448v-1137q119 63 213 137q235 184 235 360zM1280 1344v-768q0 -86 -33.5 -170.5t-83 -150t-118 -127.5t-126.5 -103t-121 -77.5t-89.5 -49.5t-42.5 -20q-12 -6 -26 -6t-26 6q-16 7 -42.5 20t-89.5 49.5t-121 77.5t-126.5 103t-118 127.5t-83 150 t-33.5 170.5v768q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf133;" horiz-adv-x="1664" d="M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280 q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf134;" horiz-adv-x="1408" d="M512 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 1376v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800 q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37t3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-2 [...]
+<glyph unicode="&#xf135;" horiz-adv-x="1664" d="M1440 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1664 1376q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85q-3 -1 -9 -1 q-14 0 -23 9l-64 64q-17 19 -5 39l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5z" />
+<glyph unicode="&#xf136;" horiz-adv-x="1792" d="M1745 763l-164 -763h-334l178 832q13 56 -15 88q-27 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334l204 953l-153 327h1276q101 0 189.5 -40.5t147.5 -113.5q60 -73 81 -168.5t0 -194.5z" />
+<glyph unicode="&#xf137;" d="M909 141l102 102q19 19 19 45t-19 45l-307 307l307 307q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf138;" d="M717 141l454 454q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf139;" d="M1165 397l102 102q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf13a;" d="M813 237l454 454q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-307 -307l-307 307q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf13b;" horiz-adv-x="1408" d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z" />
+<glyph unicode="&#xf13c;" horiz-adv-x="1792" d="M275 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z" />
+<glyph unicode="&#xf13d;" horiz-adv-x="1792" d="M960 1280q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1792 352v-352q0 -22 -20 -30q-8 -2 -12 -2q-13 0 -23 9l-93 93q-119 -143 -318.5 -226.5t-429.5 -83.5t-429.5 83.5t-318.5 226.5l-93 -93q-9 -9 -23 -9q-4 0 -12 2q-20 8 -20 30v352 q0 14 9 23t23 9h352q22 0 30 -20q8 -19 -7 -35l-100 -100q67 -91 189.5 -153.5t271.5 -82.5v647h-192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h192v163q-58 34 -93 92.5t-35 128.5q0 106 75 181t181 75t181 -75t75 [...]
+<glyph unicode="&#xf13e;" horiz-adv-x="1152" d="M1056 768q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v320q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45q0 106 -75 181t-181 75t-181 -75t-75 -181 v-320h736z" />
+<glyph unicode="&#xf140;" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM1152 640q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1280 640q0 -212 -150 -362t-362 -150t-362 150 t-150 362t150 362t362 150t362 -150t150 -362zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 2 [...]
+<glyph unicode="&#xf141;" horiz-adv-x="1408" d="M384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM896 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM1408 800v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf142;" horiz-adv-x="384" d="M384 288v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 1312v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf143;" d="M512 256q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM863 162q-13 232 -177 396t-396 177q-14 1 -24 -9t-10 -23v-128q0 -13 8.5 -22t21.5 -10q154 -11 264 -121t121 -264q1 -13 10 -21.5t22 -8.5h128q13 0 23 10 t9 24zM1247 161q-5 154 -56 297.5t-139.5 260t-205 205t-260 139.5t-297.5 56q-14 1 -23 -9q-10 -10 -10 -23v-128q0 -13 9 -22t22 -10q204 -7 378 -111.5t278.5 -278.5t111.5 -378q1 -13 10 -22t22 -9h128q13 0 23 10q11 9 9 23z [...]
+<glyph unicode="&#xf144;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1152 585q32 18 32 55t-32 55l-544 320q-31 19 -64 1q-32 -19 -32 -56v-640q0 -37 32 -56 q16 -8 32 -8q17 0 32 9z" />
+<glyph unicode="&#xf145;" horiz-adv-x="1792" d="M1024 1084l316 -316l-572 -572l-316 316zM813 105l618 618q19 19 19 45t-19 45l-362 362q-18 18 -45 18t-45 -18l-618 -618q-19 -19 -19 -45t19 -45l362 -362q18 -18 45 -18t45 18zM1702 742l-907 -908q-37 -37 -90.5 -37t-90.5 37l-126 126q56 56 56 136t-56 136 t-136 56t-136 -56l-125 126q-37 37 -37 90.5t37 90.5l907 906q37 37 90.5 37t90.5 -37l125 -125q-56 -56 -56 -136t56 -136t136 -56t136 56l126 -125q37 -37 37 -90.5t-37 -90.5z" />
+<glyph unicode="&#xf146;" d="M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z" />
+<glyph unicode="&#xf147;" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h832q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5 t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf148;" horiz-adv-x="1024" d="M1018 933q-18 -37 -58 -37h-192v-864q0 -14 -9 -23t-23 -9h-704q-21 0 -29 18q-8 20 4 35l160 192q9 11 25 11h320v640h-192q-40 0 -58 37q-17 37 9 68l320 384q18 22 49 22t49 -22l320 -384q27 -32 9 -68z" />
+<glyph unicode="&#xf149;" horiz-adv-x="1024" d="M32 1280h704q13 0 22.5 -9.5t9.5 -23.5v-863h192q40 0 58 -37t-9 -69l-320 -384q-18 -22 -49 -22t-49 22l-320 384q-26 31 -9 69q18 37 58 37h192v640h-320q-14 0 -25 11l-160 192q-13 14 -4 34q9 19 29 19z" />
+<glyph unicode="&#xf14a;" d="M685 237l614 614q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-467 -467l-211 211q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l358 -358q19 -19 45 -19t45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5 t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf14b;" d="M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818q14 -13 -3 -30l-291 -291q-17 -17 -30 -3q-14 13 3 30l291 291q17 17 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92q28 28 28 68t-28 68l-152 152q-28 28 -68 28t-68 -28l-92 -92zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf14c;" d="M1280 608v480q0 26 -19 45t-45 19h-480q-42 0 -59 -39q-17 -41 14 -70l144 -144l-534 -534q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l534 534l144 -144q18 -19 45 -19q12 0 25 5q39 17 39 59zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf14d;" d="M1005 435l352 352q19 19 19 45t-19 45l-352 352q-30 31 -69 14q-40 -17 -40 -59v-160q-119 0 -216 -19.5t-162.5 -51t-114 -79t-76.5 -95.5t-44.5 -109t-21.5 -111.5t-5 -110.5q0 -181 167 -404q10 -12 25 -12q7 0 13 3q22 9 19 33q-44 354 62 473q46 52 130 75.5 t224 23.5v-160q0 -42 40 -59q12 -5 24 -5q26 0 45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf14e;" d="M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf150;" d="M1145 861q18 -35 -5 -66l-320 -448q-19 -27 -52 -27t-52 27l-320 448q-23 31 -5 66q17 35 57 35h640q40 0 57 -35zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf151;" d="M1145 419q-17 -35 -57 -35h-640q-40 0 -57 35q-18 35 5 66l320 448q19 27 52 27t52 -27l320 -448q23 -31 5 -66zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf152;" d="M1088 640q0 -33 -27 -52l-448 -320q-31 -23 -66 -5q-35 17 -35 57v640q0 40 35 57q35 18 66 -5l448 -320q27 -19 27 -52zM1280 160v960q0 14 -9 23t-23 9h-960q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h960q14 0 23 9t9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf153;" horiz-adv-x="1024" d="M976 229l35 -159q3 -12 -3 -22.5t-17 -14.5l-5 -1q-4 -2 -10.5 -3.5t-16 -4.5t-21.5 -5.5t-25.5 -5t-30 -5t-33.5 -4.5t-36.5 -3t-38.5 -1q-234 0 -409 130.5t-238 351.5h-95q-13 0 -22.5 9.5t-9.5 22.5v113q0 13 9.5 22.5t22.5 9.5h66q-2 57 1 105h-67q-14 0 -23 9 t-9 23v114q0 14 9 23t23 9h98q67 210 243.5 338t400.5 128q102 0 194 -23q11 -3 20 -15q6 -11 3 -24l-43 -159q-3 -13 -14 -19.5t-24 -2.5l-4 1q-4 1 -11.5 2.5l-17.5 3.5t-22.5 3.5t-26 3t-29 2.5t-29.5 1q-126  [...]
+<glyph unicode="&#xf154;" horiz-adv-x="1024" d="M1020 399v-367q0 -14 -9 -23t-23 -9h-956q-14 0 -23 9t-9 23v150q0 13 9.5 22.5t22.5 9.5h97v383h-95q-14 0 -23 9.5t-9 22.5v131q0 14 9 23t23 9h95v223q0 171 123.5 282t314.5 111q185 0 335 -125q9 -8 10 -20.5t-7 -22.5l-103 -127q-9 -11 -22 -12q-13 -2 -23 7 q-5 5 -26 19t-69 32t-93 18q-85 0 -137 -47t-52 -123v-215h305q13 0 22.5 -9t9.5 -23v-131q0 -13 -9.5 -22.5t-22.5 -9.5h-305v-379h414v181q0 13 9 22.5t23 9.5h162q14 0 23 -9.5t9 -22.5z" />
+<glyph unicode="&#xf155;" horiz-adv-x="1024" d="M978 351q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5t-17.5 18q-17 21 -2 41l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43 t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242t255 134v180q0 13 9.5 22.5t22.5  [...]
+<glyph unicode="&#xf156;" horiz-adv-x="898" d="M898 1066v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102 q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf157;" horiz-adv-x="1027" d="M603 0h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214l-321 578q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61 l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103q0 -14 -9.5 -23t-22.5 -9h-290v-330q [...]
+<glyph unicode="&#xf158;" horiz-adv-x="1280" d="M1043 971q0 100 -65 162t-171 62h-320v-448h320q106 0 171 62t65 162zM1280 971q0 -193 -126.5 -315t-326.5 -122h-340v-118h505q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-505v-192q0 -14 -9.5 -23t-22.5 -9h-167q-14 0 -23 9t-9 23v192h-224q-14 0 -23 9t-9 23v128 q0 14 9 23t23 9h224v118h-224q-14 0 -23 9t-9 23v149q0 13 9 22.5t23 9.5h224v629q0 14 9 23t23 9h539q200 0 326.5 -122t126.5 -315z" />
+<glyph unicode="&#xf159;" horiz-adv-x="1792" d="M514 341l81 299h-159l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3zM1382 768l33 128h-297l34 -128h230zM1792 736v-64q0 -14 -9 -23 t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h175l-33 128h-142q-1 [...]
+<glyph unicode="&#xf15a;" horiz-adv-x="1280" d="M1167 896q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164 l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5zM952 351q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1t-47.5 -1v-338q8 0 37 -0 [...]
+<glyph unicode="&#xf15b;" horiz-adv-x="1280" d="M1280 768v-800q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h544v-544q0 -40 28 -68t68 -28h544zM1277 896h-509v509q82 -15 132 -65l312 -312q50 -50 65 -132z" />
+<glyph unicode="&#xf15c;" horiz-adv-x="1280" d="M1024 160v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1024 416v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1280 768v-800q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28 t-28 68v1344q0 40 28 68t68 28h544v-544q0 -40 28 -68t68 -28h544zM1277 896h-509v509q82 -15 132 -65l312 -312q50 -50 65 -132z" />
+<glyph unicode="&#xf15d;" horiz-adv-x="1664" d="M1191 1128h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1572 -23 v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -11v-2l14 2q9 2 30 2h248v119h121zM1661 874v-106h-288v106h75l- [...]
+<glyph unicode="&#xf15e;" horiz-adv-x="1664" d="M1191 104h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1661 -150 v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1572 1001v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567 [...]
+<glyph unicode="&#xf160;" horiz-adv-x="1792" d="M736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1792 -32v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832 q14 0 23 -9t9 -23zM1600 480v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1408 992v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14  [...]
+<glyph unicode="&#xf161;" horiz-adv-x="1792" d="M1216 -32v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192 q14 0 23 -9t9 -23zM1408 480v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1600 992v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14  [...]
+<glyph unicode="&#xf162;" d="M1346 223q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23 zM1486 165q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 [...]
+<glyph unicode="&#xf163;" d="M1346 1247q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9 t9 -23zM1456 -142v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1486 1189q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -4 [...]
+<glyph unicode="&#xf164;" horiz-adv-x="1664" d="M256 192q0 26 -19 45t-45 19q-27 0 -45.5 -19t-18.5 -45q0 -27 18.5 -45.5t45.5 -18.5q26 0 45 18.5t19 45.5zM416 704v-640q0 -26 -19 -45t-45 -19h-288q-26 0 -45 19t-19 45v640q0 26 19 45t45 19h288q26 0 45 -19t19 -45zM1600 704q0 -86 -55 -149q15 -44 15 -76 q3 -76 -43 -137q17 -56 0 -117q-15 -57 -54 -94q9 -112 -49 -181q-64 -76 -197 -78h-36h-76h-17q-66 0 -144 15.5t-121.5 29t-120.5 39.5q-123 43 -158 44q-26 1 -45 19.5t-19 44.5v641q0 25 18 43.5t43 20.5q24  [...]
+<glyph unicode="&#xf165;" horiz-adv-x="1664" d="M256 960q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5zM416 448v640q0 26 -19 45t-45 19h-288q-26 0 -45 -19t-19 -45v-640q0 -26 19 -45t45 -19h288q26 0 45 19t19 45zM1545 597q55 -61 55 -149q-1 -78 -57.5 -135 t-134.5 -57h-277q4 -14 8 -24t11 -22t10 -18q18 -37 27 -57t19 -58.5t10 -76.5q0 -24 -0.5 -39t-5 -45t-12 -50t-24 -45t-40 -40.5t-60 -26t-82.5 -10.5q-26 0 -45 19q-20 20 -34 50t-19.5 52t-12.5 61q-9 42 [...]
+<glyph unicode="&#xf166;" d="M919 233v157q0 50 -29 50q-17 0 -33 -16v-224q16 -16 33 -16q29 0 29 49zM1103 355h66v34q0 51 -33 51t-33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40q-39 -45 -76 -45q-33 0 -42 28q-6 16 -6 54v290h66v-270q0 -24 1 -26q1 -15 15 -15 q20 0 42 31v280h67zM985 384v-146q0 -52 -7 -73q-12 -42 -53 -42q-35 0 -68 41v-36h-67v493h67v-161q32 40 68 40q41 0 53 -42q7 -21 7 -74zM1236 255v-9q0 -29 -2 -43q-3 -22 -15 -40q-27 -40 -80 -40q-52 0 -81 38q-21 27 -21 86 [...]
+<glyph unicode="&#xf167;" d="M971 292v-211q0 -67 -39 -67q-23 0 -45 22v301q22 22 45 22q39 0 39 -67zM1309 291v-46h-90v46q0 68 45 68t45 -68zM343 509h107v94h-312v-94h105v-569h100v569zM631 -60h89v494h-89v-378q-30 -42 -57 -42q-18 0 -21 21q-1 3 -1 35v364h-89v-391q0 -49 8 -73 q12 -37 58 -37q48 0 102 61v-54zM1060 88v197q0 73 -9 99q-17 56 -71 56q-50 0 -93 -54v217h-89v-663h89v48q45 -55 93 -55q54 0 71 55q9 27 9 100zM1398 98v13h-91q0 -51 -2 -61q-7 -36 -40 -36q-46 0 -46 69v87h179v103q0 79 -27 116q-39  [...]
+<glyph unicode="&#xf168;" horiz-adv-x="1408" d="M597 869q-10 -18 -257 -456q-27 -46 -65 -46h-239q-21 0 -31 17t0 36l253 448q1 0 0 1l-161 279q-12 22 -1 37q9 15 32 15h239q40 0 66 -45zM1403 1511q11 -16 0 -37l-528 -934v-1l336 -615q11 -20 1 -37q-10 -15 -32 -15h-239q-42 0 -66 45l-339 622q18 32 531 942 q25 45 64 45h241q22 0 31 -15z" />
+<glyph unicode="&#xf169;" d="M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1 l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf16a;" horiz-adv-x="1792" d="M1280 640q0 37 -30 54l-512 320q-31 20 -65 2q-33 -18 -33 -56v-640q0 -38 33 -56q16 -8 31 -8q20 0 34 10l512 320q30 17 30 54zM1792 640q0 -96 -1 -150t-8.5 -136.5t-22.5 -147.5q-16 -73 -69 -123t-124 -58q-222 -25 -671 -25t-671 25q-71 8 -124.5 58t-69.5 123 q-14 65 -21.5 147.5t-8.5 136.5t-1 150t1 150t8.5 136.5t22.5 147.5q16 73 69 123t124 58q222 25 671 25t671 -25q71 -8 124.5 -58t69.5 -123q14 -65 21.5 -147.5t8.5 -136.5t1 -150z" />
+<glyph unicode="&#xf16b;" horiz-adv-x="1792" d="M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z" />
+<glyph unicode="&#xf16c;" horiz-adv-x="1408" d="M928 135v-151l-707 -1v151zM1169 481v-701l-1 -35v-1h-1132l-35 1h-1v736h121v-618h928v618h120zM241 393l704 -65l-13 -150l-705 65zM309 709l683 -183l-39 -146l-683 183zM472 1058l609 -360l-77 -130l-609 360zM832 1389l398 -585l-124 -85l-399 584zM1285 1536 l121 -697l-149 -26l-121 697z" />
+<glyph unicode="&#xf16d;" d="M1362 110v648h-135q20 -63 20 -131q0 -126 -64 -232.5t-174 -168.5t-240 -62q-197 0 -337 135.5t-140 327.5q0 68 20 131h-141v-648q0 -26 17.5 -43.5t43.5 -17.5h1069q25 0 43 17.5t18 43.5zM1078 643q0 124 -90.5 211.5t-218.5 87.5q-127 0 -217.5 -87.5t-90.5 -211.5 t90.5 -211.5t217.5 -87.5q128 0 218.5 87.5t90.5 211.5zM1362 1003v165q0 28 -20 48.5t-49 20.5h-174q-29 0 -49 -20.5t-20 -48.5v-165q0 -29 20 -49t49 -20h174q29 0 49 20t20 49zM1536 1211v-1142q0 -81 -58 -139t-139 -58h-11 [...]
+<glyph unicode="&#xf16e;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150 t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z" />
+<glyph unicode="&#xf170;" d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf171;" horiz-adv-x="1408" d="M815 677q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82t52 58q36 18 72.5 12t64 -35.5t27.5 -67.5zM926 698q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5q4 -91 77.5 -155t165.5 -56q91 8 152 84t50 168zM1165 1240q-20 27 -56 44.5t-58 22 t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5zM1222 205q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q- [...]
+<glyph unicode="&#xf172;" d="M848 666q0 43 -41 66t-77 1q-43 -20 -42.5 -72.5t43.5 -70.5q39 -23 81 4t36 72zM928 682q8 -66 -36 -121t-110 -61t-119 40t-56 113q-2 49 25.5 93t72.5 64q70 31 141.5 -10t81.5 -118zM1100 1073q-20 -21 -53.5 -34t-53 -16t-63.5 -8q-155 -20 -324 0q-44 6 -63 9.5 t-52.5 16t-54.5 32.5q13 19 36 31t40 15.5t47 8.5q198 35 408 1q33 -5 51 -8.5t43 -16t39 -31.5zM1142 327q0 7 5.5 26.5t3 32t-17.5 16.5q-161 -106 -365 -106t-366 106l-12 -6l-5 -12q26 -154 41 -210q47 -81 204 -108q249 -46 4 [...]
+<glyph unicode="&#xf173;" horiz-adv-x="1024" d="M390 1408h219v-388h364v-241h-364v-394q0 -136 14 -172q13 -37 52 -60q50 -31 117 -31q117 0 232 76v-242q-102 -48 -178 -65q-77 -19 -173 -19q-105 0 -186 27q-78 25 -138 75q-58 51 -79 105q-22 54 -22 161v539h-170v217q91 30 155 84q64 55 103 132q39 78 54 196z " />
+<glyph unicode="&#xf174;" d="M1123 127v181q-88 -56 -174 -56q-51 0 -88 23q-29 17 -39 45q-11 30 -11 129v295h274v181h-274v291h-164q-11 -90 -40 -147t-78 -99q-48 -40 -116 -63v-163h127v-404q0 -78 17 -121q17 -42 59 -78q43 -37 104 -57q62 -20 140 -20q67 0 129 14q57 13 134 49zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf175;" horiz-adv-x="768" d="M765 237q8 -19 -5 -35l-350 -384q-10 -10 -23 -10q-14 0 -24 10l-355 384q-13 16 -5 35q9 19 29 19h224v1248q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1248h224q21 0 29 -19z" />
+<glyph unicode="&#xf176;" horiz-adv-x="768" d="M765 1043q-9 -19 -29 -19h-224v-1248q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1248h-224q-21 0 -29 19t5 35l350 384q10 10 23 10q14 0 24 -10l355 -384q13 -16 5 -35z" />
+<glyph unicode="&#xf177;" horiz-adv-x="1792" d="M1792 736v-192q0 -14 -9 -23t-23 -9h-1248v-224q0 -21 -19 -29t-35 5l-384 350q-10 10 -10 23q0 14 10 24l384 354q16 14 35 6q19 -9 19 -29v-224h1248q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf178;" horiz-adv-x="1792" d="M1728 643q0 -14 -10 -24l-384 -354q-16 -14 -35 -6q-19 9 -19 29v224h-1248q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h1248v224q0 21 19 29t35 -5l384 -350q10 -10 10 -23z" />
+<glyph unicode="&#xf179;" horiz-adv-x="1408" d="M1393 321q-39 -125 -123 -250q-129 -196 -257 -196q-49 0 -140 32q-86 32 -151 32q-61 0 -142 -33q-81 -34 -132 -34q-152 0 -301 259q-147 261 -147 503q0 228 113 374q112 144 284 144q72 0 177 -30q104 -30 138 -30q45 0 143 34q102 34 173 34q119 0 213 -65 q52 -36 104 -100q-79 -67 -114 -118q-65 -94 -65 -207q0 -124 69 -223t158 -126zM1017 1494q0 -61 -29 -136q-30 -75 -93 -138q-54 -54 -108 -72q-37 -11 -104 -17q3 149 78 257q74 107 250 148q1 -3 2.5 -11t2.5 -11 [...]
+<glyph unicode="&#xf17a;" horiz-adv-x="1664" d="M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z" />
+<glyph unicode="&#xf17b;" horiz-adv-x="1408" d="M493 1053q16 0 27.5 11.5t11.5 27.5t-11.5 27.5t-27.5 11.5t-27 -11.5t-11 -27.5t11 -27.5t27 -11.5zM915 1053q16 0 27 11.5t11 27.5t-11 27.5t-27 11.5t-27.5 -11.5t-11.5 -27.5t11.5 -27.5t27.5 -11.5zM103 869q42 0 72 -30t30 -72v-430q0 -43 -29.5 -73t-72.5 -30 t-73 30t-30 73v430q0 42 30 72t73 30zM1163 850v-666q0 -46 -32 -78t-77 -32h-75v-227q0 -43 -30 -73t-73 -30t-73 30t-30 73v227h-138v-227q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73l-1 227h-74q-46 0 -78  [...]
+<glyph unicode="&#xf17c;" d="M663 1125q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5q0 12 19 15h10zM750 1111q-4 -1 -11.5 6.5t-17.5 4.5q24 11 32 -2q3 -6 -3 -9zM399 684q-4 1 -6 -3t-4.5 -12.5t-5.5 -13.5t-10 -13q-7 -10 -1 -12q4 -1 12.5 7t12.5 18q1 3 2 7t2 6t1.5 4.5t0.5 4v3t-1 2.5t-3 2z M1254 325q0 18 -55 42q4 15 7.5 27.5t5 26t3 21.5t0.5 22.5t-1 19.5t-3.5 22t-4 20.5t-5 25t-5.5 26.5q-10 48 -47 103t-72 75q24 -20 57 -83q87 -162 54 -278q-11 -40 -50 -42q-31 -4 -38.5 18.5t-8 83.5t-11.5 107q-9 39 -19.5 69 [...]
+<glyph unicode="&#xf17d;" d="M1024 36q-42 241 -140 498h-2l-2 -1q-16 -6 -43 -16.5t-101 -49t-137 -82t-131 -114.5t-103 -148l-15 11q184 -150 418 -150q132 0 256 52zM839 643q-21 49 -53 111q-311 -93 -673 -93q-1 -7 -1 -21q0 -124 44 -236.5t124 -201.5q50 89 123.5 166.5t142.5 124.5t130.5 81 t99.5 48l37 13q4 1 13 3.5t13 4.5zM732 855q-120 213 -244 378q-138 -65 -234 -186t-128 -272q302 0 606 80zM1416 536q-210 60 -409 29q87 -239 128 -469q111 75 185 189.5t96 250.5zM611 1277q-1 0 -2 -1q1 1 2 1zM1201 1132q [...]
+<glyph unicode="&#xf17e;" d="M1173 473q0 50 -19.5 91.5t-48.5 68.5t-73 49t-82.5 34t-87.5 23l-104 24q-30 7 -44 10.5t-35 11.5t-30 16t-16.5 21t-7.5 30q0 77 144 77q43 0 77 -12t54 -28.5t38 -33.5t40 -29t48 -12q47 0 75.5 32t28.5 77q0 55 -56 99.5t-142 67.5t-182 23q-68 0 -132 -15.5 t-119.5 -47t-89 -87t-33.5 -128.5q0 -61 19 -106.5t56 -75.5t80 -48.5t103 -32.5l146 -36q90 -22 112 -36q32 -20 32 -60q0 -39 -40 -64.5t-105 -25.5q-51 0 -91.5 16t-65 38.5t-45.5 45t-46 38.5t-54 16q-50 0 -75.5 -30t-25.5 -75q0 - [...]
+<glyph unicode="&#xf180;" horiz-adv-x="1664" d="M1483 512l-587 -587q-52 -53 -127.5 -53t-128.5 53l-587 587q-53 53 -53 128t53 128l587 587q53 53 128 53t128 -53l265 -265l-398 -399l-188 188q-42 42 -99 42q-59 0 -100 -41l-120 -121q-42 -40 -42 -99q0 -58 42 -100l406 -408q30 -28 67 -37l6 -4h28q60 0 99 41 l619 619l2 -3q53 -53 53 -128t-53 -128zM1406 1138l120 -120q14 -15 14 -36t-14 -36l-730 -730q-17 -15 -37 -15v0q-4 0 -6 1q-18 2 -30 14l-407 408q-14 15 -14 36t14 35l121 120q13 15 35 15t36 -15l252 -252l [...]
+<glyph unicode="&#xf181;" d="M704 192v1024q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-1024q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1376 576v640q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-640q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408 q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf182;" horiz-adv-x="1280" d="M1280 480q0 -40 -28 -68t-68 -28q-51 0 -80 43l-227 341h-45v-132l247 -411q9 -15 9 -33q0 -26 -19 -45t-45 -19h-192v-272q0 -46 -33 -79t-79 -33h-160q-46 0 -79 33t-33 79v272h-192q-26 0 -45 19t-19 45q0 18 9 33l247 411v132h-45l-227 -341q-29 -43 -80 -43 q-40 0 -68 28t-28 68q0 29 16 53l256 384q73 107 176 107h384q103 0 176 -107l256 -384q16 -24 16 -53zM864 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65. [...]
+<glyph unicode="&#xf183;" horiz-adv-x="1024" d="M1024 832v-416q0 -40 -28 -68t-68 -28t-68 28t-28 68v352h-64v-912q0 -46 -33 -79t-79 -33t-79 33t-33 79v464h-64v-464q0 -46 -33 -79t-79 -33t-79 33t-33 79v912h-64v-352q0 -40 -28 -68t-68 -28t-68 28t-28 68v416q0 80 56 136t136 56h640q80 0 136 -56t56 -136z M736 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+<glyph unicode="&#xf184;" d="M773 234l350 473q16 22 24.5 59t-6 85t-61.5 79q-40 26 -83 25.5t-73.5 -17.5t-54.5 -45q-36 -40 -96 -40q-59 0 -95 40q-24 28 -54.5 45t-73.5 17.5t-84 -25.5q-46 -31 -60.5 -79t-6 -85t24.5 -59zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf185;" horiz-adv-x="1792" d="M1472 640q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5zM1748 363q-4 -15 -20 -20l-292 -96v-306q0 -16 -13 -26q-15 -10 -29 -4 l-292 94l-180 -248q-10 -13 -26 -13t-26 13l-180 248l-292 -94q-14 -6 -29 4q-13 10 -13 26v306l-292 96q-16 5 -20 20q-5 17 4 29l180 248l-180 248q-9 13 -4 29q4 15 20 20l292 96v306q0 16 13 26q15 10 2 [...]
+<glyph unicode="&#xf186;" d="M1262 233q-54 -9 -110 -9q-182 0 -337 90t-245 245t-90 337q0 192 104 357q-201 -60 -328.5 -229t-127.5 -384q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q144 0 273.5 61.5t220.5 171.5zM1465 318q-94 -203 -283.5 -324.5t-413.5 -121.5q-156 0 -298 61 t-245 164t-164 245t-61 298q0 153 57.5 292.5t156 241.5t235.5 164.5t290 68.5q44 2 61 -39q18 -41 -15 -72q-86 -78 -131.5 -181.5t-45.5 -218.5q0 -148 73 -273t198 -198t273 -73q118 0 228 51q41 18 72 -13q14 -14 17.5 -34t-4.5 -38z" />
+<glyph unicode="&#xf187;" horiz-adv-x="1792" d="M1088 704q0 26 -19 45t-45 19h-256q-26 0 -45 -19t-19 -45t19 -45t45 -19h256q26 0 45 19t19 45zM1664 896v-960q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v960q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1728 1344v-256q0 -26 -19 -45t-45 -19h-1536 q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1536q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf188;" horiz-adv-x="1664" d="M1632 576q0 -26 -19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207 q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45t19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 [...]
+<glyph unicode="&#xf189;" horiz-adv-x="1920" d="M1917 1016q23 -64 -150 -294q-24 -32 -65 -85q-78 -100 -90 -131q-17 -41 14 -81q17 -21 81 -82h1l1 -1l1 -1l2 -2q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12q-30 21 -70 64t-68.5 77.5t-61 58 t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91 [...]
+<glyph unicode="&#xf18a;" horiz-adv-x="1792" d="M675 252q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5t43 -50.5t74.5 -2.5t62.5 47.5zM769 373q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5q-17 -31 13 -45q14 -5 29 0.5t22 18.5zM943 266q-45 -102 -158 -150t-224 -12 q-107 34 -147.5 126.5t6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5zM1255 426q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5q9 -96 89 -170t208.5 -109t274.5 -21q223 23 [...]
+<glyph unicode="&#xf18b;" d="M1133 -34q-171 -94 -368 -94q-196 0 -367 94q138 87 235.5 211t131.5 268q35 -144 132.5 -268t235.5 -211zM638 1394v-485q0 -252 -126.5 -459.5t-330.5 -306.5q-181 215 -181 495q0 187 83.5 349.5t229.5 269.5t325 137zM1536 638q0 -280 -181 -495 q-204 99 -330.5 306.5t-126.5 459.5v485q179 -30 325 -137t229.5 -269.5t83.5 -349.5z" />
+<glyph unicode="&#xf18c;" horiz-adv-x="1408" d="M1402 433q-32 -80 -76 -138t-91 -88.5t-99 -46.5t-101.5 -14.5t-96.5 8.5t-86.5 22t-69.5 27.5t-46 22.5l-17 10q-113 -228 -289.5 -359.5t-384.5 -132.5q-19 0 -32 13t-13 32t13 31.5t32 12.5q173 1 322.5 107.5t251.5 294.5q-36 -14 -72 -23t-83 -13t-91 2.5t-93 28.5 t-92 59t-84.5 100t-74.5 146q114 47 214 57t167.5 -7.5t124.5 -56.5t88.5 -77t56.5 -82q53 131 79 291q-7 -1 -18 -2.5t-46.5 -2.5t-69.5 0.5t-81.5 10t-88.5 23t-84 42.5t-75 65t-54.5 94.5t-28.5 127.5q70  [...]
+<glyph unicode="&#xf18d;" horiz-adv-x="1280" d="M1259 283v-66q0 -85 -57.5 -144.5t-138.5 -59.5h-57l-260 -269v269h-529q-81 0 -138.5 59.5t-57.5 144.5v66h1238zM1259 609v-255h-1238v255h1238zM1259 937v-255h-1238v255h1238zM1259 1077v-67h-1238v67q0 84 57.5 143.5t138.5 59.5h846q81 0 138.5 -59.5t57.5 -143.5z " />
+<glyph unicode="&#xf18e;" d="M1152 640q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf190;" d="M1152 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-192q0 -14 -9 -23t-23 -9q-12 0 -24 10l-319 319q-9 9 -9 23t9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h352q13 0 22.5 -9.5t9.5 -22.5zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf191;" d="M1024 960v-640q0 -26 -19 -45t-45 -19q-20 0 -37 12l-448 320q-27 19 -27 52t27 52l448 320q17 12 37 12q26 0 45 -19t19 -45zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5z M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf192;" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5 t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf193;" horiz-adv-x="1664" d="M1023 349l102 -204q-58 -179 -210 -290t-339 -111q-156 0 -288.5 77.5t-210 210t-77.5 288.5q0 181 104.5 330t274.5 211l17 -131q-122 -54 -195 -165.5t-73 -244.5q0 -185 131.5 -316.5t316.5 -131.5q126 0 232.5 65t165 175.5t49.5 236.5zM1571 249l58 -114l-256 -128 q-13 -7 -29 -7q-40 0 -57 35l-239 477h-472q-24 0 -42.5 16.5t-21.5 40.5l-96 779q-2 16 6 42q14 51 57 82.5t97 31.5q66 0 113 -47t47 -113q0 -69 -52 -117.5t-120 -41.5l37 -289h423v-128h-407l16 -128h455 [...]
+<glyph unicode="&#xf194;" d="M1254 899q16 85 -21 132q-52 65 -187 45q-17 -3 -41 -12.5t-57.5 -30.5t-64.5 -48.5t-59.5 -70t-44.5 -91.5q80 7 113.5 -16t26.5 -99q-5 -52 -52 -143q-43 -78 -71 -99q-44 -32 -87 14q-23 24 -37.5 64.5t-19 73t-10 84t-8.5 71.5q-23 129 -34 164q-12 37 -35.5 69 t-50.5 40q-57 16 -127 -25q-54 -32 -136.5 -106t-122.5 -102v-7q16 -8 25.5 -26t21.5 -20q21 -3 54.5 8.5t58 10.5t41.5 -30q11 -18 18.5 -38.5t15 -48t12.5 -40.5q17 -46 53 -187q36 -146 57 -197q42 -99 103 -125q43 -12 85 -1.5t7 [...]
+<glyph unicode="&#xf195;" horiz-adv-x="1152" d="M1152 704q0 -191 -94.5 -353t-256.5 -256.5t-353 -94.5h-160q-14 0 -23 9t-9 23v611l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v93l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v250q0 14 9 23t23 9h160 q14 0 23 -9t9 -23v-181l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-93l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-487q188 13 318 151t130 328q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf196;" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-352v-352q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v352h-352q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h352v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-352h352q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832 q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 20 [...]
+<glyph unicode="&#xf197;" horiz-adv-x="1792" />
+<glyph unicode="&#xf198;" horiz-adv-x="1792" />
+<glyph unicode="&#xf199;" horiz-adv-x="1792" />
+<glyph unicode="&#xf19a;" horiz-adv-x="1792" />
+<glyph unicode="&#xf19b;" horiz-adv-x="1792" />
+<glyph unicode="&#xf19c;" horiz-adv-x="1792" />
+<glyph unicode="&#xf19d;" horiz-adv-x="1792" />
+<glyph unicode="&#xf19e;" horiz-adv-x="1792" />
+<glyph unicode="&#xf500;" horiz-adv-x="1792" />
+</font>
+</defs></svg> 
\ No newline at end of file
diff --git a/site/fonts/fontawesome-webfont.ttf b/site/fonts/fontawesome-webfont.ttf
new file mode 100755
index 0000000..e89738d
Binary files /dev/null and b/site/fonts/fontawesome-webfont.ttf differ
diff --git a/site/fonts/fontawesome-webfont.woff b/site/fonts/fontawesome-webfont.woff
new file mode 100755
index 0000000..8c1748a
Binary files /dev/null and b/site/fonts/fontawesome-webfont.woff differ
diff --git a/site/img/article-footer.png b/site/img/article-footer.png
index 3f97403..d000cf0 100644
Binary files a/site/img/article-footer.png and b/site/img/article-footer.png differ
diff --git a/site/img/footer-arrow.png b/site/img/footer-arrow.png
index 048e37d..e06754b 100644
Binary files a/site/img/footer-arrow.png and b/site/img/footer-arrow.png differ
diff --git a/site/img/footer-logo.png b/site/img/footer-logo.png
index 210babb..721b856 100644
Binary files a/site/img/footer-logo.png and b/site/img/footer-logo.png differ
diff --git a/site/img/logo-2x.png b/site/img/logo-2x.png
index bc84a9e..28b9cd8 100644
Binary files a/site/img/logo-2x.png and b/site/img/logo-2x.png differ
diff --git a/site/img/logo-rss.png b/site/img/logo-rss.png
new file mode 100644
index 0000000..8a38383
Binary files /dev/null and b/site/img/logo-rss.png differ
diff --git a/site/img/octojekyll.png b/site/img/octojekyll.png
index dad6dbd..7c6d96d 100644
Binary files a/site/img/octojekyll.png and b/site/img/octojekyll.png differ
diff --git a/site/img/tube.png b/site/img/tube.png
deleted file mode 100644
index bb0ba9c..0000000
Binary files a/site/img/tube.png and /dev/null differ
diff --git a/site/img/tube1x.png b/site/img/tube1x.png
deleted file mode 100644
index 104c28b..0000000
Binary files a/site/img/tube1x.png and /dev/null differ
diff --git a/site/index.html b/site/index.html
index fb8e802..2d0a0d2 100644
--- a/site/index.html
+++ b/site/index.html
@@ -18,19 +18,19 @@ overview: true
       <p>
         No more databases, comment moderation, or pesky updates to install—just <em>your content</em>.
       </p>
-      <a href="/docs/usage/" class="">How Jekyll works →</a>
+      <a href="/docs/usage/">How Jekyll works →</a>
     </div>
     <div class="unit one-third">
       <h2>Static</h2>
       <p><a href="http://daringfireball.net/projects/markdown/">Markdown</a> (or <a href="http://textile.sitemonks.com/">Textile</a>), <a href="http://wiki.shopify.com/Liquid">Liquid</a>, HTML <span class="amp">&</span> CSS go in. Static sites come out ready for deployment.</p>
-      <a href="/docs/templates/" class="">Jekyll template guide →</a>
+      <a href="/docs/templates/">Jekyll template guide →</a>
     </div>
     <div class="unit one-third">
       <h2>Blog-aware</h2>
       <p>
         Permalinks, categories, pages, posts, and custom layouts are all first-class citizens here.
       </p>
-      <a href="/docs/migrations/" class="">Migrate your blog →</a>
+      <a href="/docs/migrations/">Migrate your blog →</a>
     </div>
     <div class="clear"></div>
   </div>
@@ -76,11 +76,11 @@ overview: true
     <div class="unit whole">
       <div class="grid pane">
         <div class="unit whole center-on-mobiles">
-          <img src="img/octojekyll.png" alt="Free Jekyll hosting on GitHub Pages">
+          <img src="img/octojekyll.png" width="300" height="251" alt="Free Jekyll hosting on GitHub Pages">
           <div class="pane-content">
             <h2 class="center-on-mobiles"><strong>Free hosting</strong> with GitHub Pages</h2>
             <p>Sick of dealing with hosting companies? <a href="http://pages.github.com/">GitHub Pages</a> are <em>powered by Jekyll</em>, so you can easily deploy your site using GitHub for free—<a href="https://help.github.com/articles/setting-up-a-custom-domain-with-pages">custom domain name</a> and all.</p>
-            <a href="http://pages.github.com/" class="">Learn more about GitHub Pages →</a>
+            <a href="http://pages.github.com/">Learn more about GitHub Pages →</a>
           </div>
         </div>
         <div class="clear"></div>
diff --git a/test/helper.rb b/test/helper.rb
index 5eb4193..2e67da0 100644
--- a/test/helper.rb
+++ b/test/helper.rb
@@ -1,11 +1,9 @@
-if RUBY_VERSION > '1.9'
-  require 'simplecov'
-  require 'simplecov-gem-adapter'
-  SimpleCov.start('gem')
+require 'simplecov'
+require 'simplecov-gem-adapter'
+SimpleCov.start('gem')
 
-  require 'coveralls'
-  Coveralls.wear_merged!
-end
+require 'coveralls'
+Coveralls.wear_merged!
 
 require 'rubygems'
 require 'test/unit'
@@ -19,7 +17,6 @@ require 'rdiscount'
 require 'kramdown'
 require 'redcarpet'
 
-require 'redgreen' if RUBY_VERSION < '1.9'
 require 'shoulda'
 require 'rr'
 
@@ -31,6 +28,17 @@ STDERR.reopen(test(?e, '/dev/null') ? '/dev/null' : 'NUL:')
 class Test::Unit::TestCase
   include RR::Adapters::TestUnit
 
+  def build_configs(overrides, base_hash = Jekyll::Configuration::DEFAULTS)
+    Utils.deep_merge_hashes(base_hash, overrides)
+  end
+
+  def site_configuration(overrides = {})
+    build_configs({
+      "source"      => source_dir,
+      "destination" => dest_dir
+    }, build_configs(overrides))
+  end
+
   def dest_dir(*subdirs)
     test_dir('dest', *subdirs)
   end
@@ -62,4 +70,14 @@ class Test::Unit::TestCase
   ensure
     $stdout = $old_stdout
   end
+
+  def capture_stderr
+    $old_stderr = $stderr
+    $stderr = StringIO.new
+    yield
+    $stderr.rewind
+    return $stderr.string
+  ensure
+    $stderr = $old_stderr
+  end
 end
diff --git a/test/source/+/%# +.md b/test/source/+/%# +.md
new file mode 100644
index 0000000..a850f4d
--- /dev/null
+++ b/test/source/+/%# +.md	
@@ -0,0 +1,6 @@
+---
+layout: default
+title : Page name with non-alphabetic character 
+---
+Line 1
+{{ page.title }}
diff --git a/test/source/+/foo.md b/test/source/+/foo.md
index cb4f8ce..30f9535 100644
--- a/test/source/+/foo.md
+++ b/test/source/+/foo.md
@@ -1,7 +1,7 @@
 ---
 layout: default
 title : Page inside +
-permalink: plus+in+url
+permalink: /+/plus+in+url
 ---
 Line 1
 {{ page.title }}
diff --git a/test/source/_drafts/draft-properties.text b/test/source/_drafts/draft-properties.text
new file mode 100644
index 0000000..da33d07
--- /dev/null
+++ b/test/source/_drafts/draft-properties.text
@@ -0,0 +1,11 @@
+---
+categories: foo bar baz
+foo: bar
+layout: default
+tags: ay bee cee
+title: Properties Draft
+---
+
+All the properties.
+
+Plus an excerpt.
diff --git a/test/source/_includes/include.html b/test/source/_includes/include.html
new file mode 100644
index 0000000..201a102
--- /dev/null
+++ b/test/source/_includes/include.html
@@ -0,0 +1 @@
+included
diff --git a/test/source/_includes/sig.markdown b/test/source/_includes/sig.markdown
index d280e8c..fbbf563 100644
--- a/test/source/_includes/sig.markdown
+++ b/test/source/_includes/sig.markdown
@@ -1,3 +1,3 @@
---
+---
 Tom Preston-Werner
-github.com/mojombo
\ No newline at end of file
+github.com/mojombo
diff --git a/test/source/_methods/_do_not_read_me.md b/test/source/_methods/_do_not_read_me.md
new file mode 100644
index 0000000..1b5ad07
--- /dev/null
+++ b/test/source/_methods/_do_not_read_me.md
@@ -0,0 +1,5 @@
+---
+title: The unreadable wonder
+---
+
+Don't read me, you fool! FILTER ME
diff --git a/test/source/_methods/configuration.md b/test/source/_methods/configuration.md
new file mode 100644
index 0000000..fd17980
--- /dev/null
+++ b/test/source/_methods/configuration.md
@@ -0,0 +1,8 @@
+---
+title: "Jekyll.configuration"
+whatever: foo.bar
+---
+
+Use `{{ page.title }}` to build a full configuration for use w/Jekyll.
+
+Whatever: {{ page.whatever }}
diff --git a/test/source/_methods/sanitized_path.md b/test/source/_methods/sanitized_path.md
new file mode 100644
index 0000000..8b4d767
--- /dev/null
+++ b/test/source/_methods/sanitized_path.md
@@ -0,0 +1,5 @@
+---
+title: "Jekyll.sanitized_path"
+---
+
+`{{ page.title }}` is used to make sure your path is in your source.
diff --git a/test/source/_methods/site/_dont_include_me_either.md b/test/source/_methods/site/_dont_include_me_either.md
new file mode 100644
index 0000000..6607961
--- /dev/null
+++ b/test/source/_methods/site/_dont_include_me_either.md
@@ -0,0 +1,5 @@
+---
+title: Don't Include Me Either
+---
+
+Don't include me either. FILTER ME PLZ
diff --git a/test/source/_methods/site/generate.md b/test/source/_methods/site/generate.md
new file mode 100644
index 0000000..1cab376
--- /dev/null
+++ b/test/source/_methods/site/generate.md
@@ -0,0 +1,6 @@
+---
+title: "Site#generate"
+layout: default
+---
+
+Run your generators! {{ page.layout }}
diff --git a/test/source/_methods/site/initialize.md b/test/source/_methods/site/initialize.md
new file mode 100644
index 0000000..9c23b96
--- /dev/null
+++ b/test/source/_methods/site/initialize.md
@@ -0,0 +1,5 @@
+---
+title: "Site#initialize"
+---
+
+Create dat site.
diff --git a/test/source/_methods/um_hi.md b/test/source/_methods/um_hi.md
new file mode 100644
index 0000000..1cab376
--- /dev/null
+++ b/test/source/_methods/um_hi.md
@@ -0,0 +1,6 @@
+---
+title: "Site#generate"
+layout: default
+---
+
+Run your generators! {{ page.layout }}
diff --git a/test/source/_posts/2011-04-12-md-extension.md b/test/source/_posts/2011-04-12-md-extension.md
index 163e913..2d2ae93 100644
--- a/test/source/_posts/2011-04-12-md-extension.md
+++ b/test/source/_posts/2011-04-12-md-extension.md
@@ -2,6 +2,6 @@
 date: 2011-04-12 13:07:09
 ---
 
-under default configuration, this post should get processed by the identity converter. By changing 
+under default configuration, this post should get processed by the identity converter. By changing
 textile extension or markdown extension configuration parameters, you should be able to associate
 it with either of those converters
\ No newline at end of file
diff --git a/test/source/_posts/2013-12-17-include-variable-filters.markdown b/test/source/_posts/2013-12-17-include-variable-filters.markdown
new file mode 100644
index 0000000..3d66e87
--- /dev/null
+++ b/test/source/_posts/2013-12-17-include-variable-filters.markdown
@@ -0,0 +1,21 @@
+---
+title: Post
+layout: post
+include1: include.html
+include2: include
+include3: INCLUDE
+include4: params
+---
+
+Liquid tests
+- 1 {% include {{ page.include1 }} %}
+- 2 {% include {{ page.include2 | append: '.html' }} %}
+- 3 {% include {{ page.include3 | downcase | append: '.html' }} %}
+
+Whitespace tests
+- 4 {% include {{page.include1}} %}
+- 5 {% include {{   page.include1}} %}
+- 6 {% include {{  page.include3   | downcase |   append:  '.html'}} %}
+
+Parameters test
+- 7 {% include {{ page.include4 | append: '.html' }} var1='foo' var2='bar' %}
diff --git a/test/source/_posts/2013-12-20-properties.text b/test/source/_posts/2013-12-20-properties.text
new file mode 100644
index 0000000..94ded59
--- /dev/null
+++ b/test/source/_posts/2013-12-20-properties.text
@@ -0,0 +1,11 @@
+---
+categories: foo bar baz
+foo: bar
+layout: default
+tags: ay bee cee
+title: Properties Post
+---
+
+All the properties.
+
+Plus an excerpt.
diff --git a/test/source/_posts/2014-03-03-yaml-with-dots.md b/test/source/_posts/2014-03-03-yaml-with-dots.md
new file mode 100644
index 0000000..09639b2
--- /dev/null
+++ b/test/source/_posts/2014-03-03-yaml-with-dots.md
@@ -0,0 +1,5 @@
+---
+title: Test Post Where YAML Ends in Dots
+...
+
+# Test
diff --git a/test/source/_posts/2014-03-22-escape-+ %20[].markdown b/test/source/_posts/2014-03-22-escape-+ %20[].markdown
new file mode 100644
index 0000000..abe120b
--- /dev/null
+++ b/test/source/_posts/2014-03-22-escape-+ %20[].markdown	
@@ -0,0 +1,6 @@
+---
+layout: default
+title: Plus space percent
+---
+
+Signs are nice
diff --git a/test/source/_sass/_grid.scss b/test/source/_sass/_grid.scss
new file mode 100644
index 0000000..606aaf2
--- /dev/null
+++ b/test/source/_sass/_grid.scss
@@ -0,0 +1 @@
+.half { width: 50%; }
\ No newline at end of file
diff --git a/test/source/css/main.scss b/test/source/css/main.scss
new file mode 100644
index 0000000..abc9ecd
--- /dev/null
+++ b/test/source/css/main.scss
@@ -0,0 +1,4 @@
+---
+---
+
+ at import "grid";
\ No newline at end of file
diff --git a/test/source/js/coffeescript.coffee b/test/source/js/coffeescript.coffee
new file mode 100644
index 0000000..e0e066b
--- /dev/null
+++ b/test/source/js/coffeescript.coffee
@@ -0,0 +1,10 @@
+---
+---
+
+$ ->
+  list   = [1, 2, 3, 4, 5]
+  square = (x) -> x * x
+  cube   = (x) -> square(x) * x
+  cubes  = (math.cube num for num in list)
+
+  alert "I knew it!" if elvis?
diff --git a/test/source/pgp.key b/test/source/pgp.key
new file mode 100644
index 0000000..f7f799d
--- /dev/null
+++ b/test/source/pgp.key
@@ -0,0 +1,2 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG/MacGPG2 v2.0.17 (Darwin)
diff --git a/test/source/properties.html b/test/source/properties.html
new file mode 100644
index 0000000..fd40c45
--- /dev/null
+++ b/test/source/properties.html
@@ -0,0 +1,8 @@
+---
+foo: bar
+layout: default
+permalink: /properties/
+title: Properties Page
+---
+
+All the properties.
diff --git a/test/source/static_files.html b/test/source/static_files.html
new file mode 100644
index 0000000..878b7eb
--- /dev/null
+++ b/test/source/static_files.html
@@ -0,0 +1,4 @@
+---
+---
+{% for file in site.static_files %}
+- {{ file.path }} last edited at {{ file.modified_time }} with extname {{ file.extname }}{% endfor %}
diff --git a/test/source/unpublished.html b/test/source/unpublished.html
new file mode 100644
index 0000000..265b606
--- /dev/null
+++ b/test/source/unpublished.html
@@ -0,0 +1,7 @@
+---
+layout: default
+title: Not published!
+published: false
+---
+
+This should *not* be published!
diff --git a/test/test_coffeescript.rb b/test/test_coffeescript.rb
new file mode 100644
index 0000000..91fd623
--- /dev/null
+++ b/test/test_coffeescript.rb
@@ -0,0 +1,49 @@
+require 'helper'
+
+class TestCoffeeScript < Test::Unit::TestCase
+  context "converting CoffeeScript" do
+    setup do
+      @site = Jekyll::Site.new(Jekyll.configuration({
+        "source" => source_dir,
+        "destination" => dest_dir
+      }))
+      @site.process
+      @test_coffeescript_file = dest_dir("js/coffeescript.js")
+      @js_output = <<-JS
+(function() {
+  $(function() {
+    var cube, cubes, list, num, square;
+    list = [1, 2, 3, 4, 5];
+    square = function(x) {
+      return x * x;
+    };
+    cube = function(x) {
+      return square(x) * x;
+    };
+    cubes = (function() {
+      var _i, _len, _results;
+      _results = [];
+      for (_i = 0, _len = list.length; _i < _len; _i++) {
+        num = list[_i];
+        _results.push(math.cube(num));
+      }
+      return _results;
+    })();
+    if (typeof elvis !== \"undefined\" && elvis !== null) {
+      return alert(\"I knew it!\");
+    }
+  });
+
+}).call(this);
+JS
+    end
+
+    should "write a JS file in place" do
+      assert File.exist?(@test_coffeescript_file), "Can't find the converted CoffeeScript file in the dest_dir."
+    end
+
+    should "produce JS" do
+      assert_equal @js_output, File.read(@test_coffeescript_file)
+    end
+  end
+end
diff --git a/test/test_collections.rb b/test/test_collections.rb
new file mode 100644
index 0000000..eb8a7e3
--- /dev/null
+++ b/test/test_collections.rb
@@ -0,0 +1,175 @@
+require 'helper'
+
+class TestCollections < Test::Unit::TestCase
+
+  def fixture_site(overrides = {})
+    Jekyll::Site.new(Jekyll.configuration(
+      overrides.merge({
+        "source"      => source_dir,
+        "destination" => dest_dir
+      })
+    ))
+  end
+
+  context "an evil collection" do
+    setup do
+      @collection = Jekyll::Collection.new(fixture_site, "../../etc/password")
+    end
+
+    should "sanitize the label name" do
+      assert_equal @collection.label, "etcpassword"
+    end
+
+    should "have a sanitized relative path name" do
+      assert_equal @collection.relative_directory, "_etcpassword"
+    end
+
+    should "have a sanitized full path" do
+      assert_equal @collection.directory, source_dir("_etcpassword")
+    end
+  end
+
+  context "a simple collection" do
+    setup do
+      @collection = Jekyll::Collection.new(fixture_site, "methods")
+    end
+
+    should "sanitize the label name" do
+      assert_equal @collection.label, "methods"
+    end
+
+    should "contain no docs when initialized" do
+      assert_empty @collection.docs
+    end
+
+    should "know its relative directory" do
+      assert_equal @collection.relative_directory, "_methods"
+    end
+
+    should "know the full path to itself on the filesystem" do
+      assert_equal @collection.directory, source_dir("_methods")
+    end
+
+    context "when turned into Liquid" do
+      should "have a label attribute" do
+        assert_equal @collection.to_liquid["label"], "methods"
+      end
+
+      should "have a docs attribute" do
+        assert_equal @collection.to_liquid["docs"], Array.new
+      end
+
+      should "have a directory attribute" do
+        assert_equal @collection.to_liquid["directory"], source_dir("_methods")
+      end
+
+      should "have a relative_directory attribute" do
+        assert_equal @collection.to_liquid["relative_directory"], "_methods"
+      end
+
+      should "have a output attribute" do
+        assert_equal @collection.to_liquid["output"], false
+      end
+    end
+
+    should "know whether it should be written or not" do
+      assert_equal @collection.write?, false
+      @collection.metadata['output'] = true
+      assert_equal @collection.write?, true
+      @collection.metadata.delete 'output'
+    end
+  end
+
+  context "with no collections specified" do
+    setup do
+      @site = fixture_site
+      @site.process
+    end
+
+    should "not contain any collections" do
+      assert_equal Hash.new, @site.collections
+    end
+  end
+
+  context "with a collection" do
+    setup do
+      @site = fixture_site({
+        "collections" => ["methods"]
+      })
+      @site.process
+      @collection = @site.collections["methods"]
+    end
+
+    should "create a Hash on Site with the label mapped to the instance of the Collection" do
+      assert @site.collections.is_a?(Hash)
+      assert_not_nil @site.collections["methods"]
+      assert @site.collections["methods"].is_a? Jekyll::Collection
+    end
+
+    should "collects docs in an array on the Collection object" do
+      assert @site.collections["methods"].docs.is_a? Array
+      @site.collections["methods"].docs.each do |doc|
+        assert doc.is_a? Jekyll::Document
+        assert_include %w[
+          _methods/configuration.md
+          _methods/sanitized_path.md
+          _methods/site/generate.md
+          _methods/site/initialize.md
+          _methods/um_hi.md
+        ], doc.relative_path
+      end
+    end
+
+    should "not include files which start with an underscore in the base collection directory" do
+      assert_not_include @collection.filtered_entries, "_do_not_read_me.md"
+    end
+
+    should "not include files which start with an underscore in a subdirectory" do
+      assert_not_include @collection.filtered_entries, "site/_dont_include_me_either.md"
+    end
+
+    should "not include the underscored files in the list of docs" do
+      assert_not_include @collection.docs.map(&:relative_path), "_methods/_do_not_read_me.md"
+      assert_not_include @collection.docs.map(&:relative_path), "_methods/site/_dont_include_me_either.md"
+    end
+  end
+
+  context "with a collection with metadata" do
+    setup do
+      @site = fixture_site({
+        "collections" => {
+          "methods" => {
+            "foo" => "bar",
+            "baz" => "whoo"
+          }
+        }
+      })
+      @site.process
+      @collection = @site.collections["methods"]
+    end
+
+    should "extract the configuration collection information as metadata" do
+      assert_equal @collection.metadata, {"foo" => "bar", "baz" => "whoo"}
+    end
+  end
+
+  context "in safe mode" do
+    setup do
+      @site = fixture_site({
+        "collections" => ["methods"],
+        "safe"        => true
+      })
+      @site.process
+      @collection = @site.collections["methods"]
+    end
+
+    should "not allow symlinks" do
+      assert_not_include @collection.filtered_entries, "um_hi.md"
+    end
+
+    should "not include the symlinked file in the list of docs" do
+      assert_not_include @collection.docs.map(&:relative_path), "_methods/um_hi.md"
+    end
+  end
+
+end
diff --git a/test/test_command.rb b/test/test_command.rb
index 860c0c3..ef5b04b 100644
--- a/test/test_command.rb
+++ b/test/test_command.rb
@@ -36,4 +36,21 @@ class TestCommand < Test::Unit::TestCase
       end
     end
   end
+  context "when calling .add_build_options" do
+    should "add common options" do
+      cmd = Object.new
+      mock(cmd).option.with_any_args.at_least(1)
+      Command.add_build_options(cmd)
+    end
+  end
+  context "when calling .process_site" do
+    context "when fatal error occurs" do
+      should "exit with non-zero error code" do
+        site = Object.new
+        stub(site).process { raise Jekyll::FatalException }
+        error = assert_raise(SystemExit) { Command.process_site(site) }
+        assert_not_equal 0, error.status
+      end
+    end
+  end
 end
diff --git a/test/test_configuration.rb b/test/test_configuration.rb
index d911b77..bfb37ad 100644
--- a/test/test_configuration.rb
+++ b/test/test_configuration.rb
@@ -4,14 +4,14 @@ class TestConfiguration < Test::Unit::TestCase
   context "#stringify_keys" do
     setup do
       @mixed_keys = Configuration[{
-        'markdown' => 'maruku',
+        'markdown' => 'kramdown',
         :permalink => 'date',
         'baseurl'  => '/',
         :include   => ['.htaccess'],
         :source    => './'
       }]
       @string_keys = Configuration[{
-        'markdown'  => 'maruku',
+        'markdown'  => 'kramdown',
         'permalink' => 'date',
         'baseurl'   => '/',
         'include'   => ['.htaccess'],
@@ -51,11 +51,12 @@ class TestConfiguration < Test::Unit::TestCase
   context "#backwards_compatibilize" do
     setup do
       @config = Configuration[{
-        "auto"    => true,
-        "watch"   => true,
-        "server"  => true,
-        "exclude" => "READ-ME.md, Gemfile,CONTRIBUTING.hello.markdown",
-        "include" => "STOP_THE_PRESSES.txt,.heloses, .git"
+        "auto"     => true,
+        "watch"    => true,
+        "server"   => true,
+        "exclude"  => "READ-ME.md, Gemfile,CONTRIBUTING.hello.markdown",
+        "include"  => "STOP_THE_PRESSES.txt,.heloses, .git",
+        "pygments" => true,
       }]
     end
     should "unset 'auto' and 'watch'" do
@@ -78,6 +79,11 @@ class TestConfiguration < Test::Unit::TestCase
       assert @config.backwards_compatibilize.has_key?("include")
       assert_equal @config.backwards_compatibilize["include"], %w[STOP_THE_PRESSES.txt .heloses .git]
     end
+    should "set highlighter to pygments" do
+      assert @config.has_key?("pygments")
+      assert !@config.backwards_compatibilize.has_key?("pygments")
+      assert_equal @config.backwards_compatibilize["highlighter"], "pygments"
+    end
   end
   context "#fix_common_issues" do
     setup do
@@ -100,31 +106,36 @@ class TestConfiguration < Test::Unit::TestCase
     end
 
     should "fire warning with no _config.yml" do
-      mock(YAML).safe_load_file(@path) { raise SystemCallError, "No such file or directory - #{@path}" }
+      mock(SafeYAML).load_file(@path) { raise SystemCallError, "No such file or directory - #{@path}" }
       mock($stderr).puts("Configuration file: none".yellow)
       assert_equal Jekyll::Configuration::DEFAULTS, Jekyll.configuration({})
     end
 
     should "load configuration as hash" do
-      mock(YAML).safe_load_file(@path) { Hash.new }
+      mock(SafeYAML).load_file(@path) { Hash.new }
       mock($stdout).puts("Configuration file: #{@path}")
       assert_equal Jekyll::Configuration::DEFAULTS, Jekyll.configuration({})
     end
 
     should "fire warning with bad config" do
-      mock(YAML).safe_load_file(@path) { Array.new }
+      mock(SafeYAML).load_file(@path) { Array.new }
       mock($stderr).puts(("WARNING: ".rjust(20) + "Error reading configuration. Using defaults (and options).").yellow)
       mock($stderr).puts("Configuration file: (INVALID) #{@path}".yellow)
       assert_equal Jekyll::Configuration::DEFAULTS, Jekyll.configuration({})
     end
 
     should "fire warning when user-specified config file isn't there" do
-      mock(YAML).safe_load_file(@user_config) { raise SystemCallError, "No such file or directory - #{@user_config}" }
+      mock(SafeYAML).load_file(@user_config) { raise SystemCallError, "No such file or directory - #{@user_config}" }
       mock($stderr).puts(("Fatal: ".rjust(20) + "The configuration file '#{@user_config}' could not be found.").red)
       assert_raises LoadError do
         Jekyll.configuration({'config' => [@user_config]})
       end
     end
+
+    should "not clobber YAML.load to the dismay of other libraries" do
+      assert_equal :foo, YAML.load(':foo')
+      # as opposed to: assert_equal ':foo', SafeYAML.load(':foo')
+    end
   end
   context "loading config from external file" do
     setup do
@@ -137,32 +148,32 @@ class TestConfiguration < Test::Unit::TestCase
     end
 
     should "load default config if no config_file is set" do
-      mock(YAML).safe_load_file(@paths[:default]) { Hash.new }
+      mock(SafeYAML).load_file(@paths[:default]) { Hash.new }
       mock($stdout).puts("Configuration file: #{@paths[:default]}")
       assert_equal Jekyll::Configuration::DEFAULTS, Jekyll.configuration({})
     end
 
     should "load different config if specified" do
-      mock(YAML).safe_load_file(@paths[:other]) { {"baseurl" => "http://wahoo.dev"} }
+      mock(SafeYAML).load_file(@paths[:other]) { {"baseurl" => "http://wahoo.dev"} }
       mock($stdout).puts("Configuration file: #{@paths[:other]}")
-      assert_equal Jekyll::Configuration::DEFAULTS.deep_merge({ "baseurl" => "http://wahoo.dev" }), Jekyll.configuration({ "config" => @paths[:other] })
+      assert_equal Utils.deep_merge_hashes(Jekyll::Configuration::DEFAULTS, { "baseurl" => "http://wahoo.dev" }), Jekyll.configuration({ "config" => @paths[:other] })
     end
 
     should "load default config if path passed is empty" do
-      mock(YAML).safe_load_file(@paths[:default]) { Hash.new }
+      mock(SafeYAML).load_file(@paths[:default]) { Hash.new }
       mock($stdout).puts("Configuration file: #{@paths[:default]}")
       assert_equal Jekyll::Configuration::DEFAULTS, Jekyll.configuration({ "config" => @paths[:empty] })
     end
 
     should "successfully load a TOML file" do
-      Jekyll.logger.log_level = Jekyll::Stevenson::WARN
+      Jekyll.logger.log_level = :warn
       assert_equal Jekyll::Configuration::DEFAULTS.merge({ "baseurl" => "/you-beautiful-blog-you", "title" => "My magnificent site, wut" }), Jekyll.configuration({ "config" => [@paths[:toml]] })
-      Jekyll.logger.log_level = Jekyll::Stevenson::INFO
+      Jekyll.logger.log_level = :info
     end
 
     should "load multiple config files" do
-      mock(YAML).safe_load_file(@paths[:default]) { Hash.new }
-      mock(YAML).safe_load_file(@paths[:other]) { Hash.new }
+      mock(SafeYAML).load_file(@paths[:default]) { Hash.new }
+      mock(SafeYAML).load_file(@paths[:other]) { Hash.new }
       mock(TOML).load_file(@paths[:toml]) { Hash.new }
       mock($stdout).puts("Configuration file: #{@paths[:default]}")
       mock($stdout).puts("Configuration file: #{@paths[:other]}")
@@ -171,11 +182,11 @@ class TestConfiguration < Test::Unit::TestCase
     end
 
     should "load multiple config files and last config should win" do
-      mock(YAML).safe_load_file(@paths[:default]) { {"baseurl" => "http://example.dev"} }
-      mock(YAML).safe_load_file(@paths[:other]) { {"baseurl" => "http://wahoo.dev"} }
+      mock(SafeYAML).load_file(@paths[:default]) { {"baseurl" => "http://example.dev"} }
+      mock(SafeYAML).load_file(@paths[:other]) { {"baseurl" => "http://wahoo.dev"} }
       mock($stdout).puts("Configuration file: #{@paths[:default]}")
       mock($stdout).puts("Configuration file: #{@paths[:other]}")
-      assert_equal Jekyll::Configuration::DEFAULTS.deep_merge({ "baseurl" => "http://wahoo.dev" }), Jekyll.configuration({ "config" => [@paths[:default], @paths[:other]] })
+      assert_equal Utils.deep_merge_hashes(Jekyll::Configuration::DEFAULTS, { "baseurl" => "http://wahoo.dev" }), Jekyll.configuration({ "config" => [@paths[:default], @paths[:other]] })
     end
   end
 end
diff --git a/test/test_convertible.rb b/test/test_convertible.rb
index 694c152..28f9995 100644
--- a/test/test_convertible.rb
+++ b/test/test_convertible.rb
@@ -21,7 +21,7 @@ class TestConvertible < Test::Unit::TestCase
 
     should "not parse if there is syntax error in front-matter" do
       name = 'broken_front_matter2.erb'
-      out = capture_stdout do
+      out = capture_stderr do
         ret = @convertible.read_yaml(@base, name)
         assert_equal({}, ret)
       end
@@ -30,22 +30,20 @@ class TestConvertible < Test::Unit::TestCase
     end
 
     should "not allow ruby objects in yaml" do
-      out = capture_stdout do
+      out = capture_stderr do
         @convertible.read_yaml(@base, 'exploit_front_matter.erb')
       end
       assert_no_match /undefined class\/module DoesNotExist/, out
     end
 
-    if RUBY_VERSION >= '1.9.2'
-      should "not parse if there is encoding error in file" do
-        name = 'broken_front_matter3.erb'
-        out = capture_stdout do
-          ret = @convertible.read_yaml(@base, name, :encoding => 'utf-8')
-          assert_equal({}, ret)
-        end
-        assert_match(/invalid byte sequence in UTF-8/, out)
-        assert_match(/#{File.join(@base, name)}/, out)
+    should "not parse if there is encoding error in file" do
+      name = 'broken_front_matter3.erb'
+      out = capture_stderr do
+        ret = @convertible.read_yaml(@base, name, :encoding => 'utf-8')
+        assert_equal({}, ret)
       end
+      assert_match(/invalid byte sequence in UTF-8/, out)
+      assert_match(/#{File.join(@base, name)}/, out)
     end
   end
 end
diff --git a/test/test_document.rb b/test/test_document.rb
new file mode 100644
index 0000000..794c211
--- /dev/null
+++ b/test/test_document.rb
@@ -0,0 +1,48 @@
+require 'helper'
+
+class TestDocument < Test::Unit::TestCase
+
+  context "a document in a collection" do
+    setup do
+      @site = Site.new(Jekyll.configuration({
+        "collections" => ["methods"],
+        "source"      => source_dir,
+        "destination" => dest_dir
+      }))
+      @site.process
+      @document = @site.collections["methods"].docs.first
+    end
+
+    should "know its relative path" do
+      assert_equal "_methods/configuration.md", @document.relative_path
+    end
+
+    should "knows its extname" do
+      assert_equal ".md", @document.extname
+    end
+
+    should "know its basename" do
+      assert_equal "configuration.md", @document.basename
+    end
+
+    should "allow the suffix to be specified for the basename" do
+      assert_equal "configuration", @document.basename(".*")
+    end
+
+    should "know whether its a yaml file" do
+      assert_equal false, @document.yaml_file?
+    end
+
+    should "know its data" do
+      assert_equal({
+        "title" => "Jekyll.configuration",
+        "whatever" => "foo.bar"
+      }, @document.data)
+    end
+
+  end
+
+  context " a document part of a rendered collection" do
+  end
+
+end
diff --git a/test/test_draft.rb b/test/test_draft.rb
new file mode 100644
index 0000000..b1b3d08
--- /dev/null
+++ b/test/test_draft.rb
@@ -0,0 +1,56 @@
+require 'helper'
+
+class TestDraft < Test::Unit::TestCase
+  def setup_draft(file)
+    Draft.new(@site, source_dir, '', file)
+  end
+
+  context "A Draft" do
+    setup do
+      clear_dest
+      stub(Jekyll).configuration { Jekyll::Configuration::DEFAULTS }
+      @site = Site.new(Jekyll.configuration)
+    end
+
+    should "ensure valid drafts are valid" do
+      assert Draft.valid?("2008-09-09-foo-bar.textile")
+      assert Draft.valid?("foo/bar/2008-09-09-foo-bar.textile")
+      assert Draft.valid?("lol2008-09-09-foo-bar.textile")
+
+      assert !Draft.valid?("blah")
+    end
+
+    should "make properties accessible through #[]" do
+      draft = setup_draft('draft-properties.text')
+      # ! need to touch the file! Or get its timestamp
+      date = File.mtime(File.join(source_dir, '_drafts', 'draft-properties.text'))
+      ymd = date.strftime("%Y/%m/%d")
+
+      attrs = {
+        categories: %w(foo bar baz),
+        content: "All the properties.\n\nPlus an excerpt.\n",
+        date: date,
+        dir: "/foo/bar/baz/#{ymd}",
+        excerpt: "All the properties.\n\n",
+        foo: 'bar',
+        id: "/foo/bar/baz/#{ymd}/draft-properties",
+        layout: 'default',
+        name: nil,
+        path: "_drafts/draft-properties.text",
+        permalink: nil,
+        published: nil,
+        tags: %w(ay bee cee),
+        title: 'Properties Draft',
+        url: "/foo/bar/baz/#{ymd}/draft-properties.html"
+      }
+
+      attrs.each do |attr, val|
+        attr_str = attr.to_s
+        result = draft[attr_str]
+        assert_equal val, result, "For <draft[\"#{attr_str}\"]>:"
+      end
+    end
+
+  end
+
+end
diff --git a/test/test_entry_filter.rb b/test/test_entry_filter.rb
index c295a57..e562277 100644
--- a/test/test_entry_filter.rb
+++ b/test/test_entry_filter.rb
@@ -18,13 +18,29 @@ class TestEntryFilter < Test::Unit::TestCase
     end
 
     should "filter entries with exclude" do
-      excludes = %w[README TODO]
-      files = %w[index.html site.css .htaccess]
+      excludes = %w[README TODO vendor/bundle]
+      files = %w[index.html site.css .htaccess vendor]
 
       @site.exclude = excludes + ["exclude*"]
       assert_equal files, @site.filter_entries(excludes + files + ["excludeA"])
     end
 
+    should "filter entries with exclude relative to site source" do
+      excludes = %w[README TODO css]
+      files = %w[index.html vendor/css .htaccess]
+
+      @site.exclude = excludes
+      assert_equal files, @site.filter_entries(excludes + files + ["css"])
+    end
+
+    should "filter excluded directory and contained files" do
+      excludes = %w[README TODO css]
+      files = %w[index.html .htaccess]
+
+      @site.exclude = excludes
+      assert_equal files, @site.filter_entries(excludes + files + ["css", "css/main.css", "css/vendor.css"])
+    end
+
     should "not filter entries within include" do
       includes = %w[_index.html .htaccess include*]
       files = %w[index.html _index.html .htaccess includeA]
@@ -71,4 +87,38 @@ class TestEntryFilter < Test::Unit::TestCase
       assert_not_equal [], site.static_files
     end
   end
+
+  context "#glob_include?" do
+    setup do
+      stub(Jekyll).configuration do
+        Jekyll::Configuration::DEFAULTS.merge({'source' => source_dir, 'destination' => dest_dir})
+      end
+      @site = Site.new(Jekyll.configuration)
+      @filter = EntryFilter.new(@site)
+    end
+
+    should "return false with no glob patterns" do
+      assert !@filter.glob_include?([], "a.txt")
+    end
+
+    should "return false with all not match path" do
+      data = ["a*", "b?"]
+      assert !@filter.glob_include?(data, "ca.txt")
+      assert !@filter.glob_include?(data, "ba.txt")
+    end
+
+    should "return true with match path" do
+      data = ["a*", "b?", "**/a*"]
+      assert @filter.glob_include?(data, "a.txt")
+      assert @filter.glob_include?(data, "ba")
+      assert @filter.glob_include?(data, "c/a/a.txt")
+      assert @filter.glob_include?(data, "c/a/b/a.txt")
+    end
+
+    should "match even if there is no leading slash" do
+      data = ['vendor/bundle']
+      assert @filter.glob_include?(data, '/vendor/bundle')
+      assert @filter.glob_include?(data, 'vendor/bundle')
+    end
+  end
 end
diff --git a/test/test_excerpt.rb b/test/test_excerpt.rb
index 410e9e7..ba5f0fe 100644
--- a/test/test_excerpt.rb
+++ b/test/test_excerpt.rb
@@ -35,6 +35,48 @@ class TestExcerpt < Test::Unit::TestCase
       @excerpt = @post.send :extract_excerpt
     end
 
+    context "#include(string)" do
+
+      setup do
+        @excerpt.output = "Here is a fake output stub"
+      end
+
+      should "return true only if an excerpt output contains a specified string" do
+        assert @excerpt.include?("fake output")
+        refute @excerpt.include?("real output")
+      end
+    end
+
+    context "#id" do
+      should "contain the UID for the post" do
+        assert_equal @excerpt.id, "#{@post.id}/#excerpt"
+      end
+      should "return a string" do
+        assert_same @post.id.class, String
+      end
+    end
+
+    context "#to_s" do
+      should "return its content if no output present" do
+        assert_equal @excerpt.content, @excerpt.to_s
+      end
+
+      should "return its output if output present" do
+        @excerpt.output = "Fake Output"
+        assert_equal @excerpt.output, @excerpt.to_s
+      end
+    end
+
+    context "#inspect" do
+      should "contain the excerpt id as a shorthand string identifier" do
+        assert_equal @excerpt.inspect, "<Excerpt: #{@excerpt.id}>"
+      end
+
+      should "return a string" do
+        assert_same @post.id.class, String
+      end
+    end
+
     context "#to_liquid" do
       should "contain the proper page data to mimick the post liquid" do
         assert_equal "Post Excerpt with Layout", @excerpt.to_liquid["title"]
@@ -66,7 +108,7 @@ class TestExcerpt < Test::Unit::TestCase
         end
 
         should "be the first paragraph of the page" do
-          assert_equal "<p>First paragraph with <a href=\"http://www.jekyllrb.com/\">link ref</a>.</p>", @extracted_excerpt.content
+          assert_equal "<p>First paragraph with <a href=\"http://www.jekyllrb.com/\">link ref</a>.</p>\n\n", @extracted_excerpt.content
         end
 
         should "link properly" do
diff --git a/test/test_filters.rb b/test/test_filters.rb
index 28e9612..2f54538 100644
--- a/test/test_filters.rb
+++ b/test/test_filters.rb
@@ -3,18 +3,24 @@ require 'helper'
 class TestFilters < Test::Unit::TestCase
   class JekyllFilter
     include Jekyll::Filters
+    attr_accessor :site, :context
 
-    def initialize
-      site = Jekyll::Site.new(Jekyll.configuration({}))
-      @context = Liquid::Context.new({}, {}, { :site => site })
+    def initialize(opts = {})
+      @site = Jekyll::Site.new(Jekyll.configuration(opts))
+      @context = Liquid::Context.new({}, {}, { :site => @site })
     end
   end
 
   context "filters" do
     setup do
-      @filter = JekyllFilter.new
+      @filter = JekyllFilter.new({"source" => source_dir, "destination" => dest_dir})
       @sample_time = Time.utc(2013, 03, 27, 11, 22, 33)
       @time_as_string = "September 11, 2001 12:46:30 -0000"
+      @array_of_objects = [
+        { "color" => "red",  "size" => "large"  },
+        { "color" => "red",  "size" => "medium" },
+        { "color" => "blue", "size" => "medium" }
+      ]
     end
 
     should "textilize with simple string" do
@@ -22,7 +28,7 @@ class TestFilters < Test::Unit::TestCase
     end
 
     should "markdownify with simple string" do
-      assert_equal "<p>something <strong>really</strong> simple</p>", @filter.markdownify("something **really** simple")
+      assert_equal "<p>something <strong>really</strong> simple</p>\n", @filter.markdownify("something **really** simple")
     end
 
     should "convert array to sentence string with no args" do
@@ -87,6 +93,10 @@ class TestFilters < Test::Unit::TestCase
       assert_equal "<code>command &lt;filename&gt;</code>", @filter.xml_escape("<code>command <filename></code>")
     end
 
+    should "not error when xml escaping nil" do
+      assert_equal "", @filter.xml_escape(nil)
+    end
+
     should "escape space as plus" do
       assert_equal "my+things", @filter.cgi_escape("my things")
     end
@@ -109,5 +119,63 @@ class TestFilters < Test::Unit::TestCase
         assert_equal "[{\"name\":\"Jack\"},{\"name\":\"Smith\"}]", @filter.jsonify([{:name => 'Jack'}, {:name => 'Smith'}])
       end
     end
+
+    context "group_by filter" do
+      should "successfully group array of Jekyll::Page's" do
+        @filter.site.process
+        grouping = @filter.group_by(@filter.site.pages, "layout")
+        grouping.each do |g|
+          assert ["default", "nil", ""].include?(g["name"]), "#{g['name']} isn't a valid grouping."
+          case g["name"]
+          when "default"
+            assert g["items"].is_a?(Array), "The list of grouped items for 'default' is not an Array."
+            assert_equal 5, g["items"].size
+          when "nil"
+            assert g["items"].is_a?(Array), "The list of grouped items for 'nil' is not an Array."
+            assert_equal 2, g["items"].size
+          when ""
+            assert g["items"].is_a?(Array), "The list of grouped items for '' is not an Array."
+            assert_equal 10, g["items"].size
+          end
+        end
+      end
+    end
+
+    context "where filter" do
+      should "return any input that is not an array" do
+        assert_equal Hash.new, @filter.where(Hash.new, nil, nil)
+        assert_equal "some string", @filter.where("some string", "la", "le")
+      end
+
+      should "filter objects appropriately" do
+        assert_equal 2, @filter.where(@array_of_objects, "color", "red").length
+      end
+    end
+
+    context "sort filter" do
+      should "return sorted numbers" do
+        assert_equal [1, 2, 2.2, 3], @filter.sort([3, 2.2, 2, 1])
+      end
+      should "return sorted strings" do
+        assert_equal ["10", "2"], @filter.sort(["10", "2"])
+        assert_equal [{"a" => "10"}, {"a" => "2"}], @filter.sort([{"a" => "10"}, {"a" => "2"}], "a")
+        assert_equal ["FOO", "Foo", "foo"], @filter.sort(["foo", "Foo", "FOO"])
+        assert_equal ["_foo", "foo", "foo_"], @filter.sort(["foo_", "_foo", "foo"])
+      end
+      should "return sorted by property array" do
+        assert_equal [{"a" => 1}, {"a" => 2}, {"a" => 3}, {"a" => 4}],
+          @filter.sort([{"a" => 4}, {"a" => 3}, {"a" => 1}, {"a" => 2}], "a")
+      end
+      should "return sorted by property array with nils first" do
+        ary = [{"a" => 2}, {"b" => 1}, {"a" => 1}]
+        assert_equal [{"b" => 1}, {"a" => 1}, {"a" => 2}], @filter.sort(ary, "a")
+        assert_equal @filter.sort(ary, "a"), @filter.sort(ary, "a", "first")
+      end
+      should "return sorted by property array with nils last" do
+        assert_equal [{"a" => 1}, {"a" => 2}, {"b" => 1}],
+          @filter.sort([{"a" => 2}, {"b" => 1}, {"a" => 1}], "a", "last")
+      end
+    end
+
   end
 end
diff --git a/test/test_generated_site.rb b/test/test_generated_site.rb
index 866f753..78a49a4 100644
--- a/test/test_generated_site.rb
+++ b/test/test_generated_site.rb
@@ -14,7 +14,7 @@ class TestGeneratedSite < Test::Unit::TestCase
     end
 
     should "ensure post count is as expected" do
-      assert_equal 37, @site.posts.size
+      assert_equal 41, @site.posts.size
     end
 
     should "insert site.posts into the index" do
@@ -32,13 +32,27 @@ class TestGeneratedSite < Test::Unit::TestCase
       assert_equal "published.html", published.first
     end
 
+    should "hide unpublished page" do
+      assert !File.exist?(dest_dir('/unpublished.html'))
+    end
+
     should "not copy _posts directory" do
       assert !File.exist?(dest_dir('_posts'))
     end
 
     should "process other static files and generate correct permalinks" do
-      assert File.exists?(dest_dir('/about/index.html'))
-      assert File.exists?(dest_dir('/contacts.html'))
+      assert File.exist?(dest_dir('/about/index.html'))
+      assert File.exist?(dest_dir('/contacts.html'))
+    end
+
+    should "print a nice list of static files" do
+      expected_output = Regexp.new <<-OUTPUT
+- /css/screen.css last edited at \\d+ with extname .css
+- /pgp.key last edited at \\d+ with extname .key
+- /products.yml last edited at \\d+ with extname .yml
+- /symlink-test/symlinked-dir/screen.css last edited at \\d+ with extname .css
+OUTPUT
+      assert_match expected_output, File.read(dest_dir('static_files.html'))
     end
   end
 
diff --git a/test/test_kramdown.rb b/test/test_kramdown.rb
index 1d4c09f..4bfe725 100644
--- a/test/test_kramdown.rb
+++ b/test/test_kramdown.rb
@@ -35,7 +35,7 @@ class TestKramdown < Test::Unit::TestCase
       assert_match /<p>(“|“)Pit(’|’)hy(”|”)<\/p>/, @markdown.convert(%{"Pit'hy"}).strip
 
       override = { 'kramdown' => { 'smart_quotes' => 'lsaquo,rsaquo,laquo,raquo' } }
-      markdown = Converters::Markdown.new(@config.deep_merge(override))
+      markdown = Converters::Markdown.new(Utils.deep_merge_hashes(@config, override))
       assert_match /<p>(«|«)Pit(›|›)hy(»|»)<\/p>/, markdown.convert(%{"Pit'hy"}).strip
     end
 
diff --git a/test/test_layout_reader.rb b/test/test_layout_reader.rb
new file mode 100644
index 0000000..ff979c2
--- /dev/null
+++ b/test/test_layout_reader.rb
@@ -0,0 +1,34 @@
+require 'helper'
+
+class TestLayoutReader < Test::Unit::TestCase
+  context "reading layouts" do
+    setup do
+      stub(Jekyll).configuration do
+        Jekyll::Configuration::DEFAULTS.merge({'source' => source_dir, 'destination' => dest_dir})
+      end
+      @site = Site.new(Jekyll.configuration)
+    end
+
+    should "read layouts" do
+      layouts = LayoutReader.new(@site).read
+      assert_equal ["default", "simple", "post/simple"].sort, layouts.keys.sort
+    end
+
+    context "when no _layouts directory exists in CWD" do
+      should "know to use the layout directory relative to the site source" do
+        assert_equal LayoutReader.new(@site).layout_directory, source_dir("_layouts")
+      end
+    end
+
+    context "when a _layouts directory exists in CWD" do
+      setup do
+        stub(File).directory? { true }
+        stub(Dir).pwd { source_dir("blah") }
+      end
+
+      should "know to use the layout directory relative to CWD" do
+        assert_equal LayoutReader.new(@site).layout_directory, source_dir("blah/_layouts")
+      end
+    end
+  end
+end
diff --git a/test/test_liquid_extensions.rb b/test/test_liquid_extensions.rb
new file mode 100644
index 0000000..2395a8d
--- /dev/null
+++ b/test/test_liquid_extensions.rb
@@ -0,0 +1,31 @@
+require 'helper'
+
+class TestLiquidExtensions < Test::Unit::TestCase
+
+  context "looking up a variable in a Liquid context" do
+    class SayHi < Liquid::Tag
+      include Jekyll::LiquidExtensions
+
+      def initialize(tag_name, markup, tokens)
+        @markup = markup.strip
+      end
+
+      def render(context)
+        "hi #{lookup_variable(context, @markup)}"
+      end
+    end
+    Liquid::Template.register_tag('say_hi', SayHi)
+    setup do
+      @template = Liquid::Template.parse("{% say_hi page.name %}") # Parses and compiles the template
+    end
+
+    should "extract the var properly" do
+      assert_equal @template.render({'page' => {'name' => 'tobi'}}), 'hi tobi'
+    end
+
+    should "return the variable name if the value isn't there" do
+      assert_equal @template.render({'page' => {'title' => 'tobi'}}), 'hi page.name'
+    end
+  end
+
+end
diff --git a/test/test_new_command.rb b/test/test_new_command.rb
index bc9e658..bc58bd2 100644
--- a/test/test_new_command.rb
+++ b/test/test_new_command.rb
@@ -24,14 +24,14 @@ class TestNewCommand < Test::Unit::TestCase
     end
 
     should 'create a new directory' do
-      assert !File.exists?(@full_path)
+      assert !File.exist?(@full_path)
       capture_stdout { Jekyll::Commands::New.process(@args) }
-      assert File.exists?(@full_path)
+      assert File.exist?(@full_path)
     end
 
     should 'display a success message' do
       output = capture_stdout { Jekyll::Commands::New.process(@args) }
-      success_message = "New jekyll site installed in #{@full_path}.\n"
+      success_message = "New jekyll site installed in #{@full_path}. \n"
       assert_equal success_message, output
     end
 
@@ -83,9 +83,9 @@ class TestNewCommand < Test::Unit::TestCase
     end
 
     should 'create a new directory' do
-      assert !File.exists?(@site_name_with_spaces)
+      assert !File.exist?(@site_name_with_spaces)
       capture_stdout { Jekyll::Commands::New.process(@multiple_args) }
-      assert File.exists?(@site_name_with_spaces)
+      assert File.exist?(@site_name_with_spaces)
     end
   end
 
diff --git a/test/test_page.rb b/test/test_page.rb
index 9829b00..b34b511 100644
--- a/test/test_page.rb
+++ b/test/test_page.rb
@@ -25,6 +25,16 @@ class TestPage < Test::Unit::TestCase
         assert_equal "/contacts.html", @page.url
       end
 
+      should "not published when published yaml is false" do
+        @page = setup_page("unpublished.html")
+        assert_equal false, @page.published?
+      end
+
+      should "create url with non-alphabetic characters" do
+        @page = setup_page('+', '%# +.md')
+        assert_equal "/+/%25%23%20+.html", @page.url
+      end
+
       context "in a directory hierarchy" do
         should "create url based on filename" do
           @page = setup_page('/contacts', 'bar.html')
@@ -47,6 +57,29 @@ class TestPage < Test::Unit::TestCase
         assert_equal "deal.with.dots", @page.basename
       end
 
+      should "make properties accessible through #[]" do
+        page = setup_page('properties.html')
+        attrs = {
+          content: "All the properties.\n",
+          dir: "/properties/",
+          excerpt: nil,
+          foo: 'bar',
+          layout: 'default',
+          name: "properties.html",
+          path: "properties.html",
+          permalink: '/properties/',
+          published: nil,
+          title: 'Properties Page',
+          url: "/properties/"
+        }
+
+        attrs.each do |attr, val|
+          attr_str = attr.to_s
+          result = page[attr_str]
+          assert_equal val, result, "For <page[\"#{attr_str}\"]>:"
+        end
+      end
+
       context "with pretty url style" do
         setup do
           @site.permalink_style = :pretty
@@ -134,7 +167,7 @@ class TestPage < Test::Unit::TestCase
         page.write(dest_dir)
 
         assert File.directory?(dest_dir)
-        assert File.exists?(File.join(dest_dir, 'contacts.html'))
+        assert File.exist?(File.join(dest_dir, 'contacts.html'))
       end
 
       should "write even when the folder name is plus and permalink has +" do
@@ -143,7 +176,16 @@ class TestPage < Test::Unit::TestCase
         page.write(dest_dir)
 
         assert File.directory?(dest_dir)
-        assert File.exists?(File.join(dest_dir, '+', 'plus+in+url'))
+        assert File.exist?(File.join(dest_dir, '+', 'plus+in+url'))
+      end
+
+      should "write even when permalink has '%# +'" do
+        page = setup_page('+', '%# +.md')
+        do_render(page)
+        page.write(dest_dir)
+
+        assert File.directory?(dest_dir)
+        assert File.exist?(File.join(dest_dir, '+', '%# +.html'))
       end
 
       should "write properly without html extension" do
@@ -153,7 +195,7 @@ class TestPage < Test::Unit::TestCase
         page.write(dest_dir)
 
         assert File.directory?(dest_dir)
-        assert File.exists?(File.join(dest_dir, 'contacts', 'index.html'))
+        assert File.exist?(File.join(dest_dir, 'contacts', 'index.html'))
       end
 
       should "write properly with extension different from html" do
@@ -165,7 +207,7 @@ class TestPage < Test::Unit::TestCase
         assert_equal("/sitemap.xml", page.url)
         assert_nil(page.url[/\.html$/])
         assert File.directory?(dest_dir)
-        assert File.exists?(File.join(dest_dir,'sitemap.xml'))
+        assert File.exist?(File.join(dest_dir,'sitemap.xml'))
       end
 
       should "write dotfiles properly" do
@@ -174,7 +216,7 @@ class TestPage < Test::Unit::TestCase
         page.write(dest_dir)
 
         assert File.directory?(dest_dir)
-        assert File.exists?(File.join(dest_dir, '.htaccess'))
+        assert File.exist?(File.join(dest_dir, '.htaccess'))
       end
 
       context "in a directory hierarchy" do
@@ -184,7 +226,7 @@ class TestPage < Test::Unit::TestCase
           page.write(dest_dir)
 
           assert File.directory?(dest_dir)
-          assert File.exists?(File.join(dest_dir, 'contacts', 'index.html'))
+          assert File.exist?(File.join(dest_dir, 'contacts', 'index.html'))
         end
 
         should "write properly" do
@@ -193,7 +235,7 @@ class TestPage < Test::Unit::TestCase
           page.write(dest_dir)
 
           assert File.directory?(dest_dir)
-          assert File.exists?(File.join(dest_dir, 'contacts', 'bar.html'))
+          assert File.exist?(File.join(dest_dir, 'contacts', 'bar.html'))
         end
 
         should "write properly without html extension" do
@@ -203,7 +245,7 @@ class TestPage < Test::Unit::TestCase
           page.write(dest_dir)
 
           assert File.directory?(dest_dir)
-          assert File.exists?(File.join(dest_dir, 'contacts', 'bar', 'index.html'))
+          assert File.exist?(File.join(dest_dir, 'contacts', 'bar', 'index.html'))
         end
       end
     end
diff --git a/test/test_pager.rb b/test/test_pager.rb
index b066b9a..976925f 100644
--- a/test/test_pager.rb
+++ b/test/test_pager.rb
@@ -3,12 +3,14 @@ require 'helper'
 class TestPager < Test::Unit::TestCase
 
   def build_site(config = {})
-    base = Jekyll::Configuration::DEFAULTS.deep_merge({
+    base = build_configs({
       'source'      => source_dir,
       'destination' => dest_dir,
       'paginate'    => 1
     })
-    site = Jekyll::Site.new(base.deep_merge(config))
+    site = Jekyll::Site.new(site_configuration(
+      {"paginate" => 1}.merge(config)
+    ))
     site.process
     site
   end
diff --git a/test/test_post.rb b/test/test_post.rb
index 2e7a32c..9f963d0 100644
--- a/test/test_post.rb
+++ b/test/test_post.rb
@@ -25,6 +25,34 @@ class TestPost < Test::Unit::TestCase
       assert !Post.valid?("blah")
     end
 
+    should "make properties accessible through #[]" do
+      post = setup_post('2013-12-20-properties.text')
+
+      attrs = {
+        categories: %w(foo bar baz),
+        content: "All the properties.\n\nPlus an excerpt.\n",
+        date: Time.new(2013, 12, 20),
+        dir: "/foo/bar/baz/2013/12/20",
+        excerpt: "All the properties.\n\n",
+        foo: 'bar',
+        id: "/foo/bar/baz/2013/12/20/properties",
+        layout: 'default',
+        name: nil,
+        path: "_posts/2013-12-20-properties.text",
+        permalink: nil,
+        published: nil,
+        tags: %w(ay bee cee),
+        title: 'Properties Post',
+        url: "/foo/bar/baz/2013/12/20/properties.html"
+      }
+
+      attrs.each do |attr, val|
+        attr_str = attr.to_s
+        result = post[attr_str]
+        assert_equal val, result, "For <post[\"#{attr_str}\"]>:"
+      end
+    end
+
     context "processing posts" do
       setup do
         @post = Post.allocate
@@ -58,13 +86,20 @@ class TestPost < Test::Unit::TestCase
         end
       end
 
-      should "CGI escape urls" do
+      should "escape urls" do
         @post.categories = []
         @post.process("2009-03-12-hash-#1.markdown")
         assert_equal "/2009/03/12/hash-%231.html", @post.url
         assert_equal "/2009/03/12/hash-#1", @post.id
       end
 
+      should "escape urls with non-alphabetic characters" do
+        @post.categories = []
+        @post.process("2014-03-22-escape-+ %20[].markdown")
+        assert_equal "/2014/03/22/escape-+%20%2520%5B%5D.html", @post.url
+        assert_equal "/2014/03/22/escape-+ %20[]", @post.id
+      end
+
       should "respect permalink in yaml front matter" do
         file = "2008-12-03-permalinked-post.textile"
         @post.process(file)
@@ -99,6 +134,18 @@ class TestPost < Test::Unit::TestCase
         end
       end
 
+      context "with three dots ending YAML header" do
+        setup do
+          @real_file = "2014-03-03-yaml-with-dots.md"
+        end
+        should "should read the YAML header" do
+          @post.read_yaml(@source, @real_file)
+
+          assert_equal({"title" => "Test Post Where YAML Ends in Dots"},
+                       @post.data)
+        end
+      end
+
       context "with embedded triple dash" do
         setup do
           @real_file = "2010-01-08-triple-dash.markdown"
@@ -295,7 +342,7 @@ class TestPost < Test::Unit::TestCase
         end
 
         should "return rendered HTML" do
-          assert_equal "<p>First paragraph with <a href=\"http://www.jekyllrb.com/\">link ref</a>.</p>",
+          assert_equal "<p>First paragraph with <a href=\"http://www.jekyllrb.com/\">link ref</a>.</p>\n\n",
                        @post.excerpt
         end
 
@@ -368,16 +415,6 @@ class TestPost < Test::Unit::TestCase
     end
 
     context "initializing posts" do
-      should "publish when published yaml is no specified" do
-        post = setup_post("2008-02-02-published.textile")
-        assert_equal true, post.published
-      end
-
-      should "not published when published yaml is false" do
-        post = setup_post("2008-02-02-not-published.textile")
-        assert_equal false, post.published
-      end
-
       should "recognize date in yaml" do
         post = setup_post("2010-01-09-date-override.textile")
         do_render(post)
@@ -490,7 +527,27 @@ class TestPost < Test::Unit::TestCase
           post.write(dest_dir)
 
           assert File.directory?(dest_dir)
-          assert File.exists?(File.join(dest_dir, '2008', '10', '18', 'foo-bar.html'))
+          assert File.exist?(File.join(dest_dir, '2008', '10', '18', 'foo-bar.html'))
+        end
+
+        should "write properly when url has hash" do
+          post = setup_post("2009-03-12-hash-#1.markdown")
+          do_render(post)
+          post.write(dest_dir)
+
+          assert File.directory?(dest_dir)
+          assert File.exist?(File.join(dest_dir, '2009', '03', '12',
+                                        'hash-#1.html'))
+        end
+
+        should "write properly when url has space" do
+          post = setup_post("2014-03-22-escape-+ %20[].markdown")
+          do_render(post)
+          post.write(dest_dir)
+
+          assert File.directory?(dest_dir)
+          assert File.exist?(File.join(dest_dir, '2014', '03', '22',
+                                        'escape-+ %20[].html'))
         end
 
         should "write properly without html extension" do
@@ -500,7 +557,7 @@ class TestPost < Test::Unit::TestCase
           post.write(dest_dir)
 
           assert File.directory?(dest_dir)
-          assert File.exists?(File.join(dest_dir, 'foo-bar', 'index.html'))
+          assert File.exist?(File.join(dest_dir, 'foo-bar', 'index.html'))
         end
 
         should "insert data" do
@@ -515,7 +572,7 @@ class TestPost < Test::Unit::TestCase
           post.site.source = File.join(File.dirname(__FILE__), 'source')
           do_render(post)
 
-          assert_equal "<<< <hr />\n<p>Tom Preston-Werner github.com/mojombo</p>\n\n<p>This <em>is</em> cool</p> >>>", post.output
+          assert_equal "<<< <hr />\n<p>Tom Preston-Werner\ngithub.com/mojombo</p>\n\n<p>This <em>is</em> cool</p>\n >>>", post.output
         end
 
         should "render date specified in front matter properly" do
diff --git a/test/test_redcarpet.rb b/test/test_redcarpet.rb
index c6e8b92..ebf3b18 100644
--- a/test/test_redcarpet.rb
+++ b/test/test_redcarpet.rb
@@ -28,11 +28,11 @@ class TestRedcarpet < Test::Unit::TestCase
 
     context "with pygments enabled" do
       setup do
-        @markdown = Converters::Markdown.new @config.merge({ 'pygments' => true })
+        @markdown = Converters::Markdown.new @config.merge({ 'highlighter' => 'pygments' })
       end
 
       should "render fenced code blocks with syntax highlighting" do
-        assert_equal "<div class=\"highlight\"><pre><code class=\"ruby language-ruby\" data-lang=\"ruby\"><span class=\"nb\">puts</span> <span class=\"s2\">"Hello world"</span>\n</code></pre></div>", @markdown.convert(
+        assert_equal "<div class=\"highlight\"><pre><code class=\"language-ruby\" data-lang=\"ruby\"><span class=\"nb\">puts</span> <span class=\"s2\">"Hello world"</span>\n</code></pre></div>", @markdown.convert(
           <<-EOS
 ```ruby
 puts "Hello world"
@@ -42,13 +42,29 @@ puts "Hello world"
       end
     end
 
-    context "with pygments disabled" do
+    context "with rouge enabled" do
       setup do
-        @markdown = Converters::Markdown.new @config.merge({ 'pygments' => false })
+        @markdown = Converters::Markdown.new @config.merge({ 'highlighter' => 'rouge' })
+      end
+
+      should "render fenced code blocks with syntax highlighting" do
+        assert_equal "<div class=\"highlight\"><pre><code class=\"language-ruby\" data-lang=\"ruby\"><span class=\"nb\">puts</span> <span class=\"s2\">\"Hello world\"</span>\n</code></pre></div>", @markdown.convert(
+          <<-EOS
+```ruby
+puts "Hello world"
+```
+          EOS
+        ).strip
+      end
+    end
+
+    context "without any highlighter" do
+      setup do
+        @markdown = Converters::Markdown.new @config.merge({ 'highlighter' => nil })
       end
 
       should "render fenced code blocks without syntax highlighting" do
-        assert_equal "<div class=\"highlight\"><pre><code class=\"ruby language-ruby\" data-lang=\"ruby\">puts "Hello world"\n</code></pre></div>", @markdown.convert(
+        assert_equal "<div class=\"highlight\"><pre><code class=\"language-ruby\" data-lang=\"ruby\">puts "Hello world"\n</code></pre></div>", @markdown.convert(
           <<-EOS
 ```ruby
 puts "Hello world"
diff --git a/test/test_sass.rb b/test/test_sass.rb
new file mode 100644
index 0000000..102815a
--- /dev/null
+++ b/test/test_sass.rb
@@ -0,0 +1,26 @@
+require 'helper'
+
+class TestSass < Test::Unit::TestCase
+  context "importing partials" do
+    setup do
+      @site = Jekyll::Site.new(Jekyll.configuration({
+        "source" => source_dir,
+        "destination" => dest_dir
+      }))
+      @site.process
+      @test_css_file = dest_dir("css/main.css")
+    end
+
+    should "import SCSS partial" do
+      assert_equal ".half {\n  width: 50%; }\n", File.read(@test_css_file)
+    end
+
+    should "register the SCSS converter" do
+      assert !!@site.getConverterImpl(Jekyll::Converters::Scss), "SCSS converter implementation should exist."
+    end
+
+    should "register the Sass converter" do
+      assert !!@site.getConverterImpl(Jekyll::Converters::Sass), "Sass converter implementation should exist."
+    end
+  end
+end
diff --git a/test/test_site.rb b/test/test_site.rb
index 35359a2..c5d7859 100644
--- a/test/test_site.rb
+++ b/test/test_site.rb
@@ -154,9 +154,30 @@ class TestSite < Test::Unit::TestCase
       assert_equal @site.generators.sort_by(&:class).map{|g|g.class.priority}, @site.generators.map{|g|g.class.priority}
     end
 
-    should "read layouts" do
-      @site.read_layouts
-      assert_equal ["default", "simple", "post/simple"].sort, @site.layouts.keys.sort
+    should "sort pages alphabetically" do
+      stub.proxy(Dir).entries { |entries| entries.reverse }
+      @site.process
+      # files in symlinked directories may appear twice
+      sorted_pages = %w(
+        %#\ +.md
+        .htaccess
+        about.html
+        bar.html
+        coffeescript.coffee
+        contacts.html
+        deal.with.dots.html
+        exploit.md
+        foo.md
+        index.html
+        index.html
+        main.scss
+        main.scss
+        properties.html
+        sitemap.xml
+        static_files.html
+        symlinked-file
+      )
+      assert_equal sorted_pages, @site.pages.map(&:name)
     end
 
     should "read posts" do
@@ -166,6 +187,24 @@ class TestSite < Test::Unit::TestCase
       assert_equal posts.size - @num_invalid_posts, @site.posts.size
     end
 
+    should "read pages with yaml front matter" do
+      abs_path = File.expand_path("about.html", @site.source)
+      assert_equal true, @site.send(:has_yaml_header?, abs_path)
+    end
+
+    should "enforce a strict 3-dash limit on the start of the YAML front-matter" do
+      abs_path = File.expand_path("pgp.key", @site.source)
+      assert_equal false, @site.send(:has_yaml_header?, abs_path)
+    end
+
+    should "expose jekyll version to site payload" do
+      assert_equal Jekyll::VERSION, @site.site_payload['jekyll']['version']
+    end
+
+    should "expose list of static files to site payload" do
+      assert_equal @site.static_files, @site.site_payload['site']['static_files']
+    end
+
     should "deploy payload" do
       clear_dest
       @site.process
@@ -176,7 +215,7 @@ class TestSite < Test::Unit::TestCase
 
       assert_equal posts.size - @num_invalid_posts, @site.posts.size
       assert_equal categories, @site.categories.keys.sort
-      assert_equal 4, @site.categories['foo'].size
+      assert_equal 5, @site.categories['foo'].size
     end
 
     context 'error handling' do
@@ -255,6 +294,52 @@ class TestSite < Test::Unit::TestCase
       end
     end
 
+    context 'using a non-default markdown processor in the configuration' do
+      should 'use the non-default markdown processor' do
+        class Jekyll::Converters::Markdown::CustomMarkdown
+          def initialize(*args)
+            @args = args
+          end
+
+          def convert(*args)
+            ""
+          end
+        end
+
+        custom_processor = "CustomMarkdown"
+        s = Site.new(Jekyll.configuration.merge({ 'markdown' => custom_processor }))
+        assert_nothing_raised do
+          s.process
+        end
+
+        # Do some cleanup, we don't like straggling stuff's.
+        Jekyll::Converters::Markdown.send(:remove_const, :CustomMarkdown)
+      end
+
+      should 'ignore, if there are any bad characters in the class name' do
+        module Jekyll::Converters::Markdown::Custom
+          class Markdown
+            def initialize(*args)
+              @args = args
+            end
+
+            def convert(*args)
+              ""
+            end
+          end
+        end
+
+        bad_processor = "Custom::Markdown"
+        s = Site.new(Jekyll.configuration.merge({ 'markdown' => bad_processor }))
+        assert_raise Jekyll::FatalException do
+          s.process
+        end
+
+        # Do some cleanup, we don't like straggling stuff's.
+        Jekyll::Converters::Markdown.send(:remove_const, :Custom)
+      end
+    end
+
     context 'with an invalid markdown processor in the configuration' do
       should 'not throw an error at initialization time' do
         bad_processor = 'not a processor name'
@@ -277,7 +362,7 @@ class TestSite < Test::Unit::TestCase
         site = Site.new(Jekyll.configuration)
         site.process
 
-        file_content = YAML.safe_load_file(File.join(source_dir, '_data', 'members.yaml'))
+        file_content = SafeYAML.load_file(File.join(source_dir, '_data', 'members.yaml'))
 
         assert_equal site.data['members'], file_content
         assert_equal site.site_payload['site']['data']['members'], file_content
@@ -287,7 +372,7 @@ class TestSite < Test::Unit::TestCase
         site = Site.new(Jekyll.configuration)
         site.process
 
-        file_content = YAML.safe_load_file(File.join(source_dir, '_data', 'languages.yml'))
+        file_content = SafeYAML.load_file(File.join(source_dir, '_data', 'languages.yml'))
 
         assert_equal site.data['languages'], file_content
         assert_equal site.site_payload['site']['data']['languages'], file_content
@@ -297,7 +382,7 @@ class TestSite < Test::Unit::TestCase
         site = Site.new(Jekyll.configuration.merge({'safe' => false}))
         site.process
 
-        file_content = YAML.safe_load_file(File.join(source_dir, '_data', 'products.yml'))
+        file_content = SafeYAML.load_file(File.join(source_dir, '_data', 'products.yml'))
 
         assert_equal site.data['products'], file_content
         assert_equal site.site_payload['site']['data']['products'], file_content
@@ -311,23 +396,6 @@ class TestSite < Test::Unit::TestCase
         assert_nil site.site_payload['site']['data']['products']
       end
 
-      should "load symlink directory in unsafe mode" do
-        site = Site.new(Jekyll.configuration.merge({'safe' => false, 'data_source' => File.join('symlink-test', '_data')}))
-        site.process
-
-        assert_not_nil site.data['products']
-        assert_not_nil site.data['languages']
-        assert_not_nil site.data['members']
-      end
-
-      should "not load symlink directory in safe mode" do
-        site = Site.new(Jekyll.configuration.merge({'safe' => true, 'data_source' => File.join('symlink-test', '_data')}))
-        site.process
-
-        assert_nil site.data['products']
-        assert_nil site.data['languages']
-        assert_nil site.data['members']
-      end
     end
   end
 end
diff --git a/test/test_tags.rb b/test/test_tags.rb
index bda7a80..97c82b9 100644
--- a/test/test_tags.rb
+++ b/test/test_tags.rb
@@ -6,7 +6,9 @@ class TestTags < Test::Unit::TestCase
 
   def create_post(content, override = {}, converter_class = Jekyll::Converters::Markdown)
     stub(Jekyll).configuration do
-      Jekyll::Configuration::DEFAULTS.deep_merge({'pygments' => true}).deep_merge(override)
+      site_configuration({
+        "highlighter" => "pygments"
+      }.merge(override))
     end
     site = Site.new(Jekyll.configuration)
 
@@ -16,8 +18,8 @@ class TestTags < Test::Unit::TestCase
 
     info = { :filters => [Jekyll::Filters], :registers => { :site => site } }
     @converter = site.converters.find { |c| c.class == converter_class }
-    payload = { "pygments_prefix" => @converter.pygments_prefix,
-                "pygments_suffix" => @converter.pygments_suffix }
+    payload = { "highlighter_prefix" => @converter.highlighter_prefix,
+                "highlighter_suffix" => @converter.highlighter_suffix }
 
     @result = Liquid::Template.parse(content).render!(payload, info)
     @result = @converter.convert(@result)
@@ -31,8 +33,12 @@ title: This is a test
 
 This document results in a markdown error with maruku
 
-{% highlight text %}#{code}{% endhighlight %}
-{% highlight text linenos %}#{code}{% endhighlight %}
+{% highlight text %}
+#{code}
+{% endhighlight %}
+{% highlight text linenos %}
+#{code}
+{% endhighlight %}
 CONTENT
     create_post(content, override)
   end
@@ -54,21 +60,21 @@ CONTENT
   end
 
   context "initialized tag" do
-    should "work" do
+    should "set the correct options" do
       tag = Jekyll::Tags::HighlightBlock.new('highlight', 'ruby ', ["test", "{% endhighlight %}", "\n"])
       assert_equal({}, tag.instance_variable_get(:@options))
 
       tag = Jekyll::Tags::HighlightBlock.new('highlight', 'ruby linenos ', ["test", "{% endhighlight %}", "\n"])
-      assert_equal({ 'linenos' => 'inline' }, tag.instance_variable_get(:@options))
+      assert_equal({ :linenos => 'inline' }, tag.instance_variable_get(:@options))
 
       tag = Jekyll::Tags::HighlightBlock.new('highlight', 'ruby linenos=table ', ["test", "{% endhighlight %}", "\n"])
-      assert_equal({ 'linenos' => 'table' }, tag.instance_variable_get(:@options))
+      assert_equal({ :linenos => 'table' }, tag.instance_variable_get(:@options))
 
       tag = Jekyll::Tags::HighlightBlock.new('highlight', 'ruby linenos=table nowrap', ["test", "{% endhighlight %}", "\n"])
-      assert_equal({ 'linenos' => 'table', 'nowrap' => true }, tag.instance_variable_get(:@options))
+      assert_equal({ :linenos => 'table', :nowrap => true }, tag.instance_variable_get(:@options))
 
       tag = Jekyll::Tags::HighlightBlock.new('highlight', 'ruby linenos=table cssclass=hl', ["test", "{% endhighlight %}", "\n"])
-      assert_equal({ 'cssclass' => 'hl', 'linenos' => 'table' }, tag.instance_variable_get(:@options))
+      assert_equal({ :cssclass => 'hl', :linenos => 'table' }, tag.instance_variable_get(:@options))
 
       tag = Jekyll::Tags::HighlightBlock.new('highlight', 'Ruby ', ["test", "{% endhighlight %}", "\n"])
       assert_equal "ruby", tag.instance_variable_get(:@lang), "lexers should be case insensitive"
@@ -85,11 +91,11 @@ CONTENT
     end
 
     should "render markdown with pygments" do
-      assert_match %{<pre><code class='text'>test\n</code></pre>}, @result
+      assert_match %{<pre><code class="text">test</code></pre>}, @result
     end
 
     should "render markdown with pygments with line numbers" do
-      assert_match %{<pre><code class='text'><span class='lineno'>1</span> test\n</code></pre>}, @result
+      assert_match %{<pre><code class="text"><span class="lineno">1</span> test</code></pre>}, @result
     end
   end
 
@@ -99,7 +105,7 @@ CONTENT
     end
 
     should "not embed the file" do
-      assert_match %{<pre><code class='text'>./jekyll.gemspec\n</code></pre>}, @result
+      assert_match %{<pre><code class="text">./jekyll.gemspec</code></pre>}, @result
     end
   end
 
@@ -109,7 +115,7 @@ CONTENT
     end
 
     should "render markdown with pygments line handling" do
-      assert_match %{<pre><code class='text'>Æ\n</code></pre>}, @result
+      assert_match %{<pre><code class="text">Æ</code></pre>}, @result
     end
   end
 
@@ -237,6 +243,22 @@ CONTENT
     end
   end
 
+  context "simple page with invalid post name linking" do
+    should "cause an error" do
+      content = <<CONTENT
+---
+title: Invalid post name linking
+---
+
+{% post_url abc2008-11-21-complex %}
+CONTENT
+
+      assert_raise ArgumentError do
+        create_post(content, {'permalink' => 'pretty', 'source' => source_dir, 'destination' => dest_dir, 'read_posts' => true})
+      end
+    end
+  end
+
   context "gist tag" do
     context "simple" do
       setup do
@@ -252,7 +274,7 @@ CONTENT
       end
 
       should "write script tag" do
-        assert_match "<script src='https://gist.github.com/#{@gist}.js'><![CDATA[\s]]></script>", @result
+        assert_match "<script src=\"https://gist.github.com/#{@gist}.js\">\s</script>", @result
       end
     end
 
@@ -272,7 +294,7 @@ CONTENT
         end
 
         should "write script tag with specific file in gist" do
-          assert_match "<script src='https://gist.github.com/#{@gist}.js?file=#{@filename}'><![CDATA[\s]]></script>", @result
+          assert_match "<script src=\"https://gist.github.com/#{@gist}.js?file=#{@filename}\">\s</script>", @result
         end
       end
 
@@ -308,7 +330,7 @@ CONTENT
       end
 
       should "write script tag with specific file in gist" do
-        assert_match "<script src='https://gist.github.com/#{@gist}.js?file=#{@filename}'><![CDATA[\s]]></script>", @result
+        assert_match "<script src=\"https://gist.github.com/#{@gist}.js?file=#{@filename}\">\s</script>", @result
       end
     end
 
@@ -397,11 +419,11 @@ CONTENT
       end
 
       should "correctly output include variable" do
-        assert_match "<span id='include-param'>value</span>", @result.strip
+        assert_match "<span id=\"include-param\">value</span>", @result.strip
       end
 
       should "ignore parameters if unused" do
-        assert_match "<hr />\n<p>Tom Preston-Werner github.com/mojombo</p>\n", @result
+        assert_match "<hr />\n<p>Tom Preston-Werner\ngithub.com/mojombo</p>\n", @result
       end
     end
 
@@ -449,7 +471,7 @@ CONTENT
       end
 
       should "not include previously used parameters" do
-        assert_match "<span id='include-param' />", @result
+        assert_match "<span id=\"include-param\"></span>", @result
       end
     end
 
@@ -466,7 +488,7 @@ CONTENT
       end
 
       should "include file with empty parameters" do
-        assert_match "<span id='include-param' />", @result
+        assert_match "<span id=\"include-param\"></span>", @result
       end
     end
 
@@ -483,7 +505,77 @@ CONTENT
       end
 
       should "include file with empty parameters within if statement" do
-        assert_match "<span id='include-param' />", @result
+        assert_match "<span id=\"include-param\"></span>", @result
+      end
+    end
+
+    context "with fenced code blocks with backticks" do
+
+      setup do
+        content = <<CONTENT
+```ruby
+puts "Hello world"
+```
+CONTENT
+        create_post(content, {
+          'markdown' => 'maruku',
+          'maruku' => {'fenced_code_blocks' => true}}
+        )
+      end
+
+      # todo: if #112 is merged into maruku, update to remove the newlines inside code block
+      should "render fenced code blocks" do
+        assert_match %r{<pre class=\"ruby\"><code class=\"ruby\">\nputs "Hello world"\n</code></pre>}, @result.strip
+      end
+    end
+
+    context "include missing file" do
+      setup do
+        @content = <<CONTENT
+---
+title: missing file
+---
+
+{% include missing.html %}
+CONTENT
+      end
+
+      should "raise error relative to source directory" do
+        exception = assert_raise IOError do
+          create_post(@content, {'permalink' => 'pretty', 'source' => source_dir, 'destination' => dest_dir, 'read_posts' => true})
+        end
+        assert_equal 'Included file \'_includes/missing.html\' not found', exception.message
+      end
+    end
+
+    context "include tag with variable and liquid filters" do
+      setup do
+        stub(Jekyll).configuration do
+          site_configuration({'pygments' => true})
+        end
+
+        site = Site.new(Jekyll.configuration)
+        post = Post.new(site, source_dir, '', "2013-12-17-include-variable-filters.markdown")
+        layouts = { "default" => Layout.new(site, source_dir('_layouts'), "simple.html")}
+        post.render(layouts, {"site" => {"posts" => []}})
+        @content = post.content
+      end
+
+      should "include file as variable with liquid filters" do
+        assert_match %r{1 included}, @content
+        assert_match %r{2 included}, @content
+        assert_match %r{3 included}, @content
+      end
+
+      should "include file as variable and liquid filters with arbitrary whitespace" do
+        assert_match %r{4 included}, @content
+        assert_match %r{5 included}, @content
+        assert_match %r{6 included}, @content
+      end
+
+      should "include file as variable and filters with additional parameters" do
+        assert_match '<li>var1 = foo</li>', @content
+        assert_match '<li>var2 = bar</li>', @content
       end
     end
   end
diff --git a/test/test_core_ext.rb b/test/test_utils.rb
similarity index 53%
rename from test/test_core_ext.rb
rename to test/test_utils.rb
index 0b79f33..829ba2d 100644
--- a/test/test_core_ext.rb
+++ b/test/test_utils.rb
@@ -1,88 +1,67 @@
 require 'helper'
 
-class TestCoreExt < Test::Unit::TestCase
+class TestUtils < Test::Unit::TestCase
   context "hash" do
 
     context "pluralized_array" do
 
       should "return empty array with no values" do
         data = {}
-        assert_equal [], data.pluralized_array('tag', 'tags')
+        assert_equal [], Utils.pluralized_array_from_hash(data, 'tag', 'tags')
       end
 
       should "return empty array with no matching values" do
         data = { 'foo' => 'bar' }
-        assert_equal [], data.pluralized_array('tag', 'tags')
+        assert_equal [], Utils.pluralized_array_from_hash(data, 'tag', 'tags')
       end
 
       should "return empty array with matching nil singular" do
         data = { 'foo' => 'bar', 'tag' => nil, 'tags' => ['dog', 'cat'] }
-        assert_equal [], data.pluralized_array('tag', 'tags')
+        assert_equal [], Utils.pluralized_array_from_hash(data, 'tag', 'tags')
       end
 
       should "return single value array with matching singular" do
         data = { 'foo' => 'bar', 'tag' => 'dog', 'tags' => ['dog', 'cat'] }
-        assert_equal ['dog'], data.pluralized_array('tag', 'tags')
+        assert_equal ['dog'], Utils.pluralized_array_from_hash(data, 'tag', 'tags')
       end
 
       should "return single value array with matching singular with spaces" do
         data = { 'foo' => 'bar', 'tag' => 'dog cat', 'tags' => ['dog', 'cat'] }
-        assert_equal ['dog cat'], data.pluralized_array('tag', 'tags')
+        assert_equal ['dog cat'], Utils.pluralized_array_from_hash(data, 'tag', 'tags')
       end
 
       should "return empty array with matching nil plural" do
         data = { 'foo' => 'bar', 'tags' => nil }
-        assert_equal [], data.pluralized_array('tag', 'tags')
+        assert_equal [], Utils.pluralized_array_from_hash(data, 'tag', 'tags')
       end
 
       should "return empty array with matching empty array" do
         data = { 'foo' => 'bar', 'tags' => [] }
-        assert_equal [], data.pluralized_array('tag', 'tags')
+        assert_equal [], Utils.pluralized_array_from_hash(data, 'tag', 'tags')
       end
 
       should "return single value array with matching plural with single string value" do
         data = { 'foo' => 'bar', 'tags' => 'dog' }
-        assert_equal ['dog'], data.pluralized_array('tag', 'tags')
+        assert_equal ['dog'], Utils.pluralized_array_from_hash(data, 'tag', 'tags')
       end
 
       should "return multiple value array with matching plural with single string value with spaces" do
         data = { 'foo' => 'bar', 'tags' => 'dog cat' }
-        assert_equal ['dog', 'cat'], data.pluralized_array('tag', 'tags')
+        assert_equal ['dog', 'cat'], Utils.pluralized_array_from_hash(data, 'tag', 'tags')
       end
 
       should "return single value array with matching plural with single value array" do
         data = { 'foo' => 'bar', 'tags' => ['dog'] }
-        assert_equal ['dog'], data.pluralized_array('tag', 'tags')
+        assert_equal ['dog'], Utils.pluralized_array_from_hash(data, 'tag', 'tags')
       end
 
       should "return multiple value array with matching plural with multiple value array" do
         data = { 'foo' => 'bar', 'tags' => ['dog', 'cat'] }
-        assert_equal ['dog', 'cat'], data.pluralized_array('tag', 'tags')
+        assert_equal ['dog', 'cat'], Utils.pluralized_array_from_hash(data, 'tag', 'tags')
       end
 
     end
 
   end
 
-  context "enumerable" do
-    context "glob_include?" do
-      should "return false with no glob patterns" do
-        assert ![].glob_include?("a.txt")
-      end
-
-      should "return false with all not match path" do
-        data = ["a*", "b?"]
-        assert !data.glob_include?("ca.txt")
-        assert !data.glob_include?("ba.txt")
-      end
-
-      should "return true with match path" do
-        data = ["a*", "b?", "**/a*"]
-        assert data.glob_include?("a.txt")
-        assert data.glob_include?("ba")
-        assert data.glob_include?("c/a/a.txt")
-        assert data.glob_include?("c/a/b/a.txt")
-      end
-    end
-  end
 end

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-ruby-extras/jekyll.git



More information about the Pkg-ruby-extras-commits mailing list