You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fluo.apache.org by gi...@apache.org on 2020/08/14 00:14:34 UTC

[fluo-website] branch asf-staging updated: Automatic Site Publish by Buildbot

This is an automated email from the ASF dual-hosted git repository.

git-site-role pushed a commit to branch asf-staging
in repository https://gitbox.apache.org/repos/asf/fluo-website.git


The following commit(s) were added to refs/heads/asf-staging by this push:
     new 5c3ebc0  Automatic Site Publish by Buildbot
5c3ebc0 is described below

commit 5c3ebc0117f72a95a236ac46690552b61d3800d2
Author: buildbot <us...@infra.apache.org>
AuthorDate: Fri Aug 14 00:14:30 2020 +0000

    Automatic Site Publish by Buildbot
---
 output/.htaccess                                   |    3 +
 output/1.0.0-alpha-1-release-notes/index.html      |   11 +
 output/1.0.0-alpha-1-release/index.html            |   11 +
 output/1.0.0-beta-1-release-notes/index.html       |   11 +
 output/1.0.0-beta-1-release/index.html             |   11 +
 output/1.0.0-beta-2-release-notes/index.html       |   11 +
 output/1.0.0-beta-2-release/index.html             |   11 +
 output/CONTRIBUTING.md                             |   97 +
 output/LICENSE                                     |  202 ++
 output/README.md                                   |   95 +
 output/api/archive/index.html                      |  157 ++
 output/api/index.html                              |  161 ++
 output/apidocs/archive/index.html                  |   11 +
 output/apidocs/fluo-recipes/index.html             |   11 +
 output/apidocs/fluo/index.html                     |   11 +
 output/apidocs/index.html                          |   11 +
 output/assets/css/style.css                        | 2883 ++++++++++++++++++++
 output/beta-2-pre-release-stress-test/index.html   |   11 +
 .../2014/12/30/stress-test-long-run/index.html     |  289 ++
 .../05/22/fluo-talk-at-accumulo-summit/index.html  |  150 +
 .../22/beta-2-pre-release-stress-test/index.html   |  200 ++
 .../blog/2016/01/11/webindex-long-run/index.html   |  344 +++
 .../blog/2016/05/17/webindex-long-run-2/index.html |  439 +++
 .../2016/06/02/fluo-moving-to-apache/index.html    |  155 ++
 output/blog/2016/11/10/immutable-bytes/index.html  |  326 +++
 output/blog/2016/12/22/spark-load/index.html       |  365 +++
 .../blog/2017/01/10/accumulo-summit-17/index.html  |  154 ++
 .../index.html                                     |  158 ++
 output/blog/2019/09/30/scan-executors/index.html   |  202 ++
 output/blog/index.html                             |   11 +
 output/contactus/index.html                        |  212 ++
 output/css/fluo.css                                |  236 ++
 output/doap/fluo-recipes.rdf                       |   72 +
 output/doap/fluo-yarn.rdf                          |   53 +
 output/doap/fluo.rdf                               |   71 +
 output/docs/1.0.0-alpha-1/index.html               |   11 +
 output/docs/1.0.0-beta-1/index.html                |   11 +
 output/docs/1.0.0-beta-2/index.html                |   11 +
 output/docs/archive/index.html                     |  158 ++
 .../docs/fluo-recipes/1.0.0-beta-1/cfm/index.html  |  381 +++
 .../1.0.0-beta-1/export-queue/index.html           |  427 +++
 output/docs/fluo-recipes/1.0.0-beta-1/index.html   |  170 ++
 .../1.0.0-beta-1/recording-tx/index.html           |  211 ++
 .../1.0.0-beta-1/serialization/index.html          |  214 ++
 .../1.0.0-beta-1/table-optimization/index.html     |  203 ++
 .../fluo-recipes/1.0.0-beta-1/transient/index.html |  206 ++
 .../1.0.0-beta-2/accumulo-export/index.html        |  203 ++
 .../docs/fluo-recipes/1.0.0-beta-2/cfm/index.html  |  381 +++
 .../1.0.0-beta-2/export-queue/index.html           |  428 +++
 output/docs/fluo-recipes/1.0.0-beta-2/index.html   |  222 ++
 .../1.0.0-beta-2/recording-tx/index.html           |  211 ++
 .../1.0.0-beta-2/row-hasher/index.html             |  251 ++
 .../1.0.0-beta-2/serialization/index.html          |  214 ++
 .../1.0.0-beta-2/table-optimization/index.html     |  205 ++
 .../fluo-recipes/1.0.0-beta-2/testing/index.html   |  158 ++
 .../fluo-recipes/1.0.0-beta-2/transient/index.html |  206 ++
 .../accumulo-export-queue/index.html               |  241 ++
 .../fluo-recipes/1.0.0-incubating/cfm/index.html   |  388 +++
 .../1.0.0-incubating/export-queue/index.html       |  431 +++
 .../docs/fluo-recipes/1.0.0-incubating/index.html  |  228 ++
 .../1.0.0-incubating/recording-tx/index.html       |  209 ++
 .../1.0.0-incubating/row-hasher/index.html         |  259 ++
 .../1.0.0-incubating/serialization/index.html      |  212 ++
 .../1.0.0-incubating/table-optimization/index.html |  202 ++
 .../1.0.0-incubating/testing/index.html            |  156 ++
 .../1.0.0-incubating/transient/index.html          |  219 ++
 .../accumulo-export-queue/index.html               |  245 ++
 .../1.1.0-incubating/combine-queue/index.html      |  352 +++
 .../1.1.0-incubating/export-queue/index.html       |  446 +++
 .../docs/fluo-recipes/1.1.0-incubating/index.html  |  232 ++
 .../1.1.0-incubating/recording-tx/index.html       |  209 ++
 .../1.1.0-incubating/row-hasher/index.html         |  259 ++
 .../1.1.0-incubating/serialization/index.html      |  212 ++
 .../fluo-recipes/1.1.0-incubating/spark/index.html |  157 ++
 .../1.1.0-incubating/table-optimization/index.html |  202 ++
 .../1.1.0-incubating/testing/index.html            |  156 ++
 .../1.1.0-incubating/transient/index.html          |  219 ++
 .../fluo-recipes/1.2/getting-started/overview.html |  316 +++
 output/docs/fluo-recipes/1.2/index.html            |   11 +
 .../fluo-recipes/1.2/recipes/accumulo-export.html  |  351 +++
 .../fluo-recipes/1.2/recipes/combine-queue.html    |  458 ++++
 .../fluo-recipes/1.2/recipes/export-queue.html     |  553 ++++
 .../fluo-recipes/1.2/recipes/recording-tx.html     |  318 +++
 .../docs/fluo-recipes/1.2/recipes/row-hasher.html  |  365 +++
 .../docs/fluo-recipes/1.2/tools/serialization.html |  319 +++
 output/docs/fluo-recipes/1.2/tools/spark.html      |  264 ++
 .../fluo-recipes/1.2/tools/table-optimization.html |  310 +++
 output/docs/fluo-recipes/1.2/tools/testing.html    |  264 ++
 output/docs/fluo-recipes/1.2/tools/transient.html  |  327 +++
 output/docs/fluo-recipes/index.html                |   11 +
 output/docs/fluo/1.0.0-alpha-1/index.html          |  278 ++
 output/docs/fluo/1.0.0-alpha-1/stress/index.html   |  202 ++
 .../docs/fluo/1.0.0-beta-1/applications/index.html |  297 ++
 .../docs/fluo/1.0.0-beta-1/architecture/index.html |  190 ++
 .../docs/fluo/1.0.0-beta-1/contributing/index.html |  169 ++
 output/docs/fluo/1.0.0-beta-1/index.html           |  182 ++
 output/docs/fluo/1.0.0-beta-1/metrics/index.html   |  298 ++
 .../fluo/1.0.0-beta-1/mini-fluo-setup/index.html   |  290 ++
 .../fluo/1.0.0-beta-1/prod-fluo-setup/index.html   |  356 +++
 .../1.0.0-beta-1/resources/fluo-architecture.png   |  Bin 0 -> 61085 bytes
 .../docs/fluo/1.0.0-beta-2/applications/index.html |  327 +++
 .../docs/fluo/1.0.0-beta-2/architecture/index.html |  190 ++
 .../docs/fluo/1.0.0-beta-2/contributing/index.html |  169 ++
 output/docs/fluo/1.0.0-beta-2/grafana/index.html   |  224 ++
 output/docs/fluo/1.0.0-beta-2/index.html           |  182 ++
 output/docs/fluo/1.0.0-beta-2/metrics/index.html   |  281 ++
 .../fluo/1.0.0-beta-2/mini-fluo-setup/index.html   |  290 ++
 .../fluo/1.0.0-beta-2/prod-fluo-setup/index.html   |  356 +++
 .../1.0.0-beta-2/resources/fluo-architecture.png   |  Bin 0 -> 61085 bytes
 .../fluo/1.0.0-incubating/applications/index.html  |  318 +++
 .../fluo/1.0.0-incubating/architecture/index.html  |  190 ++
 .../fluo/1.0.0-incubating/contributing/index.html  |  172 ++
 .../docs/fluo/1.0.0-incubating/grafana/index.html  |  225 ++
 output/docs/fluo/1.0.0-incubating/index.html       |  183 ++
 .../docs/fluo/1.0.0-incubating/install/index.html  |  395 +++
 .../docs/fluo/1.0.0-incubating/metrics/index.html  |  295 ++
 .../resources/fluo-architecture.png                |  Bin 0 -> 61085 bytes
 .../fluo/1.1.0-incubating/applications/index.html  |  362 +++
 .../fluo/1.1.0-incubating/architecture/index.html  |  190 ++
 .../fluo/1.1.0-incubating/contributing/index.html  |  172 ++
 .../docs/fluo/1.1.0-incubating/grafana/index.html  |  225 ++
 output/docs/fluo/1.1.0-incubating/index.html       |  184 ++
 .../docs/fluo/1.1.0-incubating/install/index.html  |  427 +++
 .../docs/fluo/1.1.0-incubating/metrics/index.html  |  295 ++
 .../resources/fluo-architecture.png                |  Bin 0 -> 61085 bytes
 .../docs/fluo/1.2/administration/initialize.html   |  322 +++
 .../1.2/administration/manage-applications.html    |  358 +++
 output/docs/fluo/1.2/administration/metrics.html   |  466 ++++
 .../1.2/administration/run-fluo-in-docker.html     |  392 +++
 .../fluo/1.2/administration/run-fluo-in-yarn.html  |  377 +++
 .../1.2/administration/run-fluo-processes.html     |  277 ++
 .../fluo/1.2/administration/troubleshooting.html   |  288 ++
 .../1.2/getting-started/create-application.html    |  354 +++
 output/docs/fluo/1.2/getting-started/design.html   |  284 ++
 .../fluo/1.2/getting-started/install-fluo.html     |  401 +++
 .../docs/fluo/1.2/getting-started/quick-start.html |  258 ++
 output/docs/fluo/1.2/index.html                    |   11 +
 output/docs/fluo/index.html                        |   11 +
 output/docs/index.html                             |  161 ++
 output/download/index.html                         |   11 +
 output/feed.xml                                    | 1278 +++++++++
 output/fluo-talk-at-accumulo-summit/index.html     |   11 +
 output/getinvolved/index.html                      |   11 +
 output/how-to-contribute/index.html                |  269 ++
 output/index.html                                  |  232 ++
 output/js/search.js                                |   48 +
 output/news/index.html                             |  336 +++
 output/people/index.html                           |  329 +++
 output/poweredby/index.html                        |  169 ++
 output/pre-asf-download/index.html                 |  151 +
 output/pre-asf-release/index.html                  |  161 ++
 output/redirects.json                              |    1 +
 output/related-projects/index.html                 |  169 ++
 output/release-notes/1.0.0-alpha-1/index.html      |   11 +
 output/release-notes/fluo-1.0.0-beta-1/index.html  |   11 +
 output/release-notes/fluo-1.0.0-beta-2/index.html  |   11 +
 output/release-process/index.html                  |  404 +++
 output/release/fluo-1.0.0-alpha-1/index.html       |  407 +++
 output/release/fluo-1.0.0-beta-1/index.html        |  285 ++
 output/release/fluo-1.0.0-beta-2/index.html        |  281 ++
 output/release/fluo-1.0.0-incubating/index.html    |  260 ++
 output/release/fluo-1.1.0-incubating/index.html    |  313 +++
 output/release/fluo-1.2.0/index.html               |  326 +++
 .../release/fluo-recipes-1.0.0-beta-1/index.html   |  159 ++
 .../release/fluo-recipes-1.0.0-beta-2/index.html   |  159 ++
 .../fluo-recipes-1.0.0-incubating/index.html       |  189 ++
 .../fluo-recipes-1.1.0-incubating/index.html       |  397 +++
 output/release/fluo-recipes-1.2.0/index.html       |  184 ++
 output/release/fluo-yarn-1.0.0/index.html          |  184 ++
 output/release/index.html                          |   11 +
 output/releases/index.html                         |  203 ++
 output/resources/blog/stress_1/accumulo-site.xml   |  157 ++
 .../blog/stress_1/all-workers-queue-sizes-2.png    |  Bin 0 -> 105534 bytes
 output/resources/blog/stress_1/committed-1.png     |  Bin 0 -> 34043 bytes
 output/resources/blog/stress_1/committed-2.png     |  Bin 0 -> 26753 bytes
 output/resources/blog/stress_1/fluo.properties     |  114 +
 output/resources/blog/stress_1/queue-1.png         |  Bin 0 -> 19871 bytes
 output/resources/blog/stress_1/queue-2.png         |  Bin 0 -> 17038 bytes
 output/resources/blog/stress_1/table_settings.txt  |   49 +
 output/resources/blog/stress_3/grafana-1.png       |  Bin 0 -> 156471 bytes
 output/resources/blog/stress_3/grafana-2.png       |  Bin 0 -> 58085 bytes
 .../blog/webindex_run_201601/grafana-1.png         |  Bin 0 -> 117955 bytes
 .../blog/webindex_run_201605/wilr2-committing.png  |  Bin 0 -> 24108 bytes
 .../blog/webindex_run_201605/wilr2-cpu.png         |  Bin 0 -> 91926 bytes
 .../blog/webindex_run_201605/wilr2-erps.png        |  Bin 0 -> 56251 bytes
 .../blog/webindex_run_201605/wilr2-esps.png        |  Bin 0 -> 67269 bytes
 .../blog/webindex_run_201605/wilr2-lockwait.png    |  Bin 0 -> 46906 bytes
 .../blog/webindex_run_201605/wilr2-memory.png      |  Bin 0 -> 49674 bytes
 .../blog/webindex_run_201605/wilr2-tps.png         |  Bin 0 -> 41849 bytes
 output/resources/docs/fluo-architecture.odg        |  Bin 0 -> 16603 bytes
 output/resources/docs/fluo-architecture.png        |  Bin 0 -> 64127 bytes
 output/resources/docs/fluo-metrics-1.png           |  Bin 0 -> 187870 bytes
 output/resources/docs/fluo-metrics-2.png           |  Bin 0 -> 80266 bytes
 output/resources/docs/fluo-metrics-3.png           |  Bin 0 -> 33018 bytes
 output/resources/favicon.png                       |  Bin 0 -> 658 bytes
 output/resources/feather.png                       |  Bin 0 -> 1609 bytes
 output/resources/fluo-logo-dark.png                |  Bin 0 -> 4262 bytes
 output/resources/fluo-logo.png                     |  Bin 0 -> 1896 bytes
 output/resources/release/1.0.0-beta-1/queued.png   |  Bin 0 -> 23034 bytes
 output/resources/release/1.0.0-beta-1/rate.png     |  Bin 0 -> 25764 bytes
 output/resources/tour/RowLocking.png               |  Bin 0 -> 59627 bytes
 output/search/index.html                           |  168 ++
 output/search_data.json                            |  357 +++
 output/stress-test-long-run/index.html             |   11 +
 output/tour/application-configuration/index.html   |  290 ++
 output/tour/architecture/index.html                |  168 ++
 output/tour/basic-read-write/index.html            |  201 ++
 output/tour/collision-code/index.html              |  201 ++
 output/tour/collisions/index.html                  |  181 ++
 output/tour/data-model/index.html                  |  196 ++
 output/tour/data-pojos/index.html                  |  178 ++
 output/tour/exercise-1/index.html                  |  783 ++++++
 output/tour/index.html                             |  250 ++
 output/tour/loader-executer/index.html             |  181 ++
 output/tour/mem-self-ntfy-code/index.html          |  276 ++
 output/tour/mem-self-ntfy/index.html               |  186 ++
 output/tour/multi-get/index.html                   |  297 ++
 output/tour/observer_example/index.html            |  246 ++
 output/tour/observers/index.html                   |  189 ++
 output/tour/read-lock-code/index.html              |  226 ++
 output/tour/read-lock/index.html                   |  192 ++
 output/tour/recipes/index.html                     |  164 ++
 output/tour/row-locking/index.html                 |  262 ++
 output/tour/scanning-code/index.html               |  234 ++
 output/tour/scanning/index.html                    |  198 ++
 output/tour/snapshot-isolation-code/index.html     |  200 ++
 output/tour/snapshot-isolation/index.html          |  183 ++
 output/tour/tx-logging/index.html                  |  203 ++
 output/tour/weak-code/index.html                   |  233 ++
 output/tour/weak-notifications/index.html          |  192 ++
 output/tour/write-skew-code/index.html             |  204 ++
 output/tour/write-skew/index.html                  |  195 ++
 output/tour/writing-code/index.html                |  184 ++
 output/webindex-long-run/index.html                |   11 +
 234 files changed, 47144 insertions(+)

diff --git a/output/.htaccess b/output/.htaccess
new file mode 100644
index 0000000..0f1face
--- /dev/null
+++ b/output/.htaccess
@@ -0,0 +1,3 @@
+RewriteEngine On
+RewriteCond %{HTTPS} !=on
+RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
diff --git a/output/1.0.0-alpha-1-release-notes/index.html b/output/1.0.0-alpha-1-release-notes/index.html
new file mode 100644
index 0000000..a072edb
--- /dev/null
+++ b/output/1.0.0-alpha-1-release-notes/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en-US">
+  <meta charset="utf-8">
+  <title>Redirecting&hellip;</title>
+  <link rel="canonical" href="https://fluo.apache.org//release/fluo-1.0.0-alpha-1/">
+  <script>location="https://fluo.apache.org//release/fluo-1.0.0-alpha-1/"</script>
+  <meta http-equiv="refresh" content="0; url=https://fluo.apache.org//release/fluo-1.0.0-alpha-1/">
+  <meta name="robots" content="noindex">
+  <h1>Redirecting&hellip;</h1>
+  <a href="https://fluo.apache.org//release/fluo-1.0.0-alpha-1/">Click here if you are not redirected.</a>
+</html>
diff --git a/output/1.0.0-alpha-1-release/index.html b/output/1.0.0-alpha-1-release/index.html
new file mode 100644
index 0000000..a072edb
--- /dev/null
+++ b/output/1.0.0-alpha-1-release/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en-US">
+  <meta charset="utf-8">
+  <title>Redirecting&hellip;</title>
+  <link rel="canonical" href="https://fluo.apache.org//release/fluo-1.0.0-alpha-1/">
+  <script>location="https://fluo.apache.org//release/fluo-1.0.0-alpha-1/"</script>
+  <meta http-equiv="refresh" content="0; url=https://fluo.apache.org//release/fluo-1.0.0-alpha-1/">
+  <meta name="robots" content="noindex">
+  <h1>Redirecting&hellip;</h1>
+  <a href="https://fluo.apache.org//release/fluo-1.0.0-alpha-1/">Click here if you are not redirected.</a>
+</html>
diff --git a/output/1.0.0-beta-1-release-notes/index.html b/output/1.0.0-beta-1-release-notes/index.html
new file mode 100644
index 0000000..c829bf7
--- /dev/null
+++ b/output/1.0.0-beta-1-release-notes/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en-US">
+  <meta charset="utf-8">
+  <title>Redirecting&hellip;</title>
+  <link rel="canonical" href="https://fluo.apache.org//release/fluo-1.0.0-beta-1/">
+  <script>location="https://fluo.apache.org//release/fluo-1.0.0-beta-1/"</script>
+  <meta http-equiv="refresh" content="0; url=https://fluo.apache.org//release/fluo-1.0.0-beta-1/">
+  <meta name="robots" content="noindex">
+  <h1>Redirecting&hellip;</h1>
+  <a href="https://fluo.apache.org//release/fluo-1.0.0-beta-1/">Click here if you are not redirected.</a>
+</html>
diff --git a/output/1.0.0-beta-1-release/index.html b/output/1.0.0-beta-1-release/index.html
new file mode 100644
index 0000000..c829bf7
--- /dev/null
+++ b/output/1.0.0-beta-1-release/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en-US">
+  <meta charset="utf-8">
+  <title>Redirecting&hellip;</title>
+  <link rel="canonical" href="https://fluo.apache.org//release/fluo-1.0.0-beta-1/">
+  <script>location="https://fluo.apache.org//release/fluo-1.0.0-beta-1/"</script>
+  <meta http-equiv="refresh" content="0; url=https://fluo.apache.org//release/fluo-1.0.0-beta-1/">
+  <meta name="robots" content="noindex">
+  <h1>Redirecting&hellip;</h1>
+  <a href="https://fluo.apache.org//release/fluo-1.0.0-beta-1/">Click here if you are not redirected.</a>
+</html>
diff --git a/output/1.0.0-beta-2-release-notes/index.html b/output/1.0.0-beta-2-release-notes/index.html
new file mode 100644
index 0000000..2ff87dc
--- /dev/null
+++ b/output/1.0.0-beta-2-release-notes/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en-US">
+  <meta charset="utf-8">
+  <title>Redirecting&hellip;</title>
+  <link rel="canonical" href="https://fluo.apache.org//release/fluo-1.0.0-beta-2/">
+  <script>location="https://fluo.apache.org//release/fluo-1.0.0-beta-2/"</script>
+  <meta http-equiv="refresh" content="0; url=https://fluo.apache.org//release/fluo-1.0.0-beta-2/">
+  <meta name="robots" content="noindex">
+  <h1>Redirecting&hellip;</h1>
+  <a href="https://fluo.apache.org//release/fluo-1.0.0-beta-2/">Click here if you are not redirected.</a>
+</html>
diff --git a/output/1.0.0-beta-2-release/index.html b/output/1.0.0-beta-2-release/index.html
new file mode 100644
index 0000000..2ff87dc
--- /dev/null
+++ b/output/1.0.0-beta-2-release/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en-US">
+  <meta charset="utf-8">
+  <title>Redirecting&hellip;</title>
+  <link rel="canonical" href="https://fluo.apache.org//release/fluo-1.0.0-beta-2/">
+  <script>location="https://fluo.apache.org//release/fluo-1.0.0-beta-2/"</script>
+  <meta http-equiv="refresh" content="0; url=https://fluo.apache.org//release/fluo-1.0.0-beta-2/">
+  <meta name="robots" content="noindex">
+  <h1>Redirecting&hellip;</h1>
+  <a href="https://fluo.apache.org//release/fluo-1.0.0-beta-2/">Click here if you are not redirected.</a>
+</html>
diff --git a/output/CONTRIBUTING.md b/output/CONTRIBUTING.md
new file mode 100644
index 0000000..4e025de
--- /dev/null
+++ b/output/CONTRIBUTING.md
@@ -0,0 +1,97 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+
+# Contributing to Fluo Website
+
+Contributions to the website can be made by submitting pull requests to this repo.  Checkout [How to
+Contribute][contribute] on for general instructions on contributing to Fluo projects.
+
+## Local Builds for Testing
+
+### Setting up Your Jekyll/Bundler Environment
+
+Ruby and RubyGems are required to use Jekyll and Bundler, so first make sure
+you have those on your machine.
+
+If you are using an OS packaged version of Ruby, you may also need to install
+the ruby-dev (Ubuntu) or ruby-devel (Fedora) package as well to build any
+native code for gems that are installed later. Installing these will also
+ensure your system's RubyGems package is installed. Depending on your OS, you
+may also need other packages to install/build gems, such as ruby-full, make,
+gcc, nodejs, build-essentials, or patch.
+
+Once Ruby, RubyGems, and any necessary native tools are installed, you are
+ready to install [Bundler] to manage the remaining RubyGem dependencies.
+Bundler is included in Ruby 2.6 and later as a default gem, so installing it
+may not be needed.
+
+Because we use [Bundler] to install specific versions of gems, it is not
+recommended to use an OS packaged version of gems other than what comes
+built-in. If you are using an OS packaged version of Ruby, it is __strongly__
+recommended to avoid `sudo` when installing additional gems, in order to avoid
+conflicting with your system's package-managed installation. Instead, you can
+specify a `GEM_HOME` directory for installing gems locally in your home
+directory. You can do this in your `$HOME/.bashrc` file or other appropriate
+place for your environment:
+
+```bash
+# in .bashrc
+export GEM_HOME=$HOME/.gem/ruby
+```
+
+With Ruby installed on your machine, you can install [Bundler] using the
+command below:
+
+```bash
+# not necessary in Ruby >2.6, since it is a default gem since 2.6
+gem install bundler
+```
+
+Next, use [Bundler] to install [Jekyll] and other dependencies needed to run
+the website (this command assumes your current working directory is your clone
+of this repository with the `main` branch checked out, because that's where
+the Gemfile dependency list exists).
+
+```bash
+bundle install
+```
+
+### Testing with the Built-in Jekyll Webserver
+
+The command to serve the site contents using Jekyll's built-in webserver is as
+follows (this webserver may behave differently than apache.org's servers).
+
+```bash
+bundle exec jekyll serve -w
+```
+
+You do __NOT__ need to execute a `bundle exec jekyll build` command first, as
+the `serve` command is sufficient to both build the site and serve its
+contents. By default, it will also try to re-build any pages you change while
+running the webserver, which can be quite useful if trying to get some CSS or
+HTML styled "just right".
+
+Jekyll will print a local URL where the site can be viewed (usually,
+[http://0.0.0.0:4000/](http://0.0.0.0:4000/)).
+
+
+[Bundler]: https://bundler.io/
+[Jekyll]: https://jekyllrb.com/
+[contribute]: https://fluo.apache.org/how-to-contribute/
+[kramdown]: https://kramdown.gettalong.org/
+[production]: https://fluo.apache.org
+[staging]: https://fluo.staged.apache.org
diff --git a/output/LICENSE b/output/LICENSE
new file mode 100644
index 0000000..e06d208
--- /dev/null
+++ b/output/LICENSE
@@ -0,0 +1,202 @@
+Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "{}"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright {yyyy} {name of copyright owner}
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
diff --git a/output/README.md b/output/README.md
new file mode 100644
index 0000000..d106058
--- /dev/null
+++ b/output/README.md
@@ -0,0 +1,95 @@
+# Apache Fluo website
+
+Code powering the Apache Fluo website ([https://fluo.apache.org][production]).
+[Contributing](CONTRIBUTING.md) describes how to test locally.
+
+## Update website for new release
+
+Below are the steps required to update the Fluo project website for a new release
+of Fluo or Fluo Recipes.  The steps below assume you are releasing Fluo 1.2.0. For
+a Fluo Recipes release, replace any reference to `fluo` with `recipes`.
+
+1. Confirm that Javadocs for the release are hosted externally
+
+2. Modify `_config.yml` for the new release:
+
+    * Set `latest_fluo_release` to `1.2.0`
+    * Verify default values (i.e Javadoc & GitHub URLs) set for `fluo-1-2` collection
+
+3. Remove the "Future release" warning from the Fluo docs layout in `_layouts/fluo-1.2.html`
+
+4. Add link to 1.2 documentation in `docs/index.md`.
+
+5. Add link to 1.2 javadocs in `pages/api.md`.
+
+6. If a post exists for the release in `_posts/release`, update the date and remove `draft: true`
+   from the post to publish it.  Otherwise, create a post with release notes and resources to announce
+   the release.
+
+## Create documentation for next release
+
+Below are steps to create documentation for the next release of Fluo or Fluo Recipes. The
+directions below are for creating Fluo 1.3 docs from 1.2 docs.  For Fluo Recipes documentation,
+replace any reference to `fluo` with `recipes`.
+
+1. Create the Fluo 1.3 docs from the 1.2 docs
+
+        cp -r _fluo-1-2 _fluo-1-3
+
+2. Create a `fluo-1.3.html` layout and update any collection references in it to `fluo-1-3`.
+   You should also add a warning banner to notify users that it's for a future release.
+
+        cp _layouts/fluo-1.2.html _layouts/fluo-1.3.html
+        vim _layout/fluo-1.3.html
+
+3. Update `_config.yml` by adding a `fluo-1-3` collection and setting default values for it.
+   You may want to keep 1.2 values for github & javadocs until 1.3 is released.
+   
+## Publishing
+
+### Automatic Staging
+
+Changes pushed to our `main` branch will automatically trigger [Jekyll] to
+build our site from that branch and push the result to our `asf-staging`
+branch, where they will be served on [our default staging site][staging].
+
+### Publishing Staging to Production
+
+First, add our repository as a remote in your local clone, if you haven't
+already done so (these commands assume the name of that remote is 'upstream').
+
+Example:
+
+```bash
+git clone https://github.com/<yourusername>/fluo-website
+cd fluo-website
+git remote add upstream https://github.com/apache/fluo-website
+```
+
+Next, publish the staging site to production by updating the `asf-site` branch
+to match the contents in the `asf-staging` branch:
+
+```bash
+# Step 0: stay in main branch; you never need to switch
+git checkout main
+
+# Step 1: update your upstream remote
+git remote update upstream
+
+# Step 2: push upstream/asf-staging to upstream/asf-site
+# run next command with --dry-run first to see what it will do without making changes
+git push upstream upstream/asf-staging:asf-site
+```
+
+Note that Step 3 should always be a fast-forward merge. That is, there should
+never be any reason to force-push it if everything is done correctly. If extra
+commits are ever added to `asf-site` that are not present in `asf-staging`,
+then those branches will need to be sync'd back up in order to continue
+avoiding force pushes.
+
+The final site can be viewed [here][production].
+
+
+[Jekyll]: https://jekyllrb.com/
+[production]: https://fluo.apache.org
+[staging]: https://fluo.staged.apache.org
diff --git a/output/api/archive/index.html b/output/api/archive/index.html
new file mode 100644
index 0000000..b2820e4
--- /dev/null
+++ b/output/api/archive/index.html
@@ -0,0 +1,157 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+
+    <link href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/cosmo/bootstrap.min.css" rel="stylesheet" integrity="sha384-h21C2fcDk/eFsW9sC9h0dhokq5pDinLNklTKoxIZRUn3+hvmgQSffLLQ4G4l2eEr" crossorigin="anonymous">
+    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
+    <link rel="stylesheet" href="/css/fluo.css">
+    <link rel="canonical" href="https://fluo.apache.org//api/archive/">
+    <link rel="icon" type="image/png" href="/resources/favicon.png">
+    
+    <title>Pre-ASF API Archive | Apache Fluo</title>
+
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
+    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+    <!-- Place your <script> tags here. -->
+
+<script>window.twttr = (function(d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0],
+    t = window.twttr || {};
+  if (d.getElementById(id)) return t;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "https://platform.twitter.com/widgets.js";
+  fjs.parentNode.insertBefore(js, fjs);
+
+  t._e = [];
+  t.ready = function(f) {
+    t._e.push(f);
+  };
+
+  return t;
+}(document, "script", "twitter-wjs"));</script>
+
+  </head>
+  <body style="padding-top: 100px">
+    <nav id="fluo-nav" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <div class="navbar-toggle-wrapper visible-xs">
+            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".js-navbar-collapse">
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+            </button>
+          </div>
+          <a href="/" class="navbar-brand"><img id="fluo-img" height="40px" src="/resources/fluo-logo-dark.png" alt="Apache Fluo"></a>
+        </div>
+        <div class="collapse navbar-collapse js-navbar-collapse" style="margin-top: 20px">
+          <ul class="navbar-nav nav">
+            <li><a href="/releases/">Releases</a></li>
+            <li><a href="/tour/">Tour</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Docs<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/docs/fluo/1.2/">Fluo</a></li>
+                <li><a href="/docs/fluo-recipes/1.2/">Fluo Recipes</a></li>
+              </ul>
+            </li>
+            <li><a href="/api/">API</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Community<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/contactus/">Contact Us</a></li>
+                <li><a href="/news/">News Archive</a></li>
+                <li><a href="/people/">People</a></li>
+                <li><a href="/related-projects/">Related Projects</a></li>
+                <li><a href="/poweredby/">Powered By</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Contributing<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/how-to-contribute/">How To Contribute</a></li>
+                <li><a href="/release-process/">Release Process</a></li>
+              </ul>
+            </li>
+            <li><a href="/search/">Search</a></li>
+          </ul>
+          <ul class="navbar-nav nav navbar-right">
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#"><img alt="Apache Software Foundation" src="https://www.apache.org/images/feather-small.png" width="70"/><span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="https://www.apache.org">Apache Homepage</a></li>
+                <li><a href="https://www.apache.org/licenses/">License</a></li>
+                <li><a href="https://www.apache.org/foundation/sponsorship">Sponsorship</i></a></li>
+                <li><a href="https://www.apache.org/security">Security</a></li>
+                <li><a href="https://www.apache.org/foundation/thanks">Thanks</a></li>
+                <li><a href="https://www.apache.org/foundation/policies/conduct">Code of Conduct</a></li>
+                <li><a href="https://www.apache.org/events/current-event.html">Current Event</a></li>
+              </ul>
+            </li>
+          </ul>
+        </div>
+      </div>
+    </nav>
+    <div class="container">
+      <div class="row">
+          <div class="col-sm-12">
+            <div class="page">
+
+  <header class="post-header">
+    <h2 class="post-title">Pre-ASF API Archive</h2>
+  </header>
+
+  <article id="page-content">
+    <div class="alert alert-danger" role="alert">Please note - This page links to Javadocs for non-ASF releases of Fluo.  These releases were made before Apache Fluo became an ASF project and are not endorsed by the ASF.</div>
+
+<h4 id="fluo-api-documentation-before-apache">Fluo API documentation (before Apache)</h4>
+
+<ul>
+  <li><a href="https://javadoc.io/doc/io.fluo/fluo-api/1.0.0-beta-2/" target="_blank">1.0.0-beta-2</a> - January 12, 2016</li>
+  <li><a href="https://javadoc.io/doc/io.fluo/fluo-api/1.0.0-beta-1/" target="_blank">1.0.0-beta-1</a> - June 9, 2015</li>
+  <li><a href="https://javadoc.io/doc/io.fluo/fluo-api/1.0.0-alpha-1/" target="_blank">1.0.0-alpha-1</a> - October 2, 2014</li>
+</ul>
+
+<h4 id="fluo-recipes-api-documentation-before-apache">Fluo Recipes API documentation (before Apache)</h4>
+
+<ul>
+  <li>1.0.0-beta-2: <a href="https://javadoc.io/doc/io.fluo/fluo-recipes-core/1.0.0-beta-2/" target="_blank">core</a>, <a href="https://javadoc.io/doc/io.fluo/fluo-recipes-accumulo/1.0.0-beta-2/" target="_blank">accumulo</a>, <a href="https://javadoc.io/doc/io.fluo/fluo-recipes-kryo/1.0.0-beta-2/" target="_blank">kryo</a>, <a href="https://javadoc.io/doc/io.fluo/fluo-recipes-spark/1.0.0-beta-2/" target="_blank">spark</a>, <a href="https://javadoc.io/doc/io.fluo/fluo-recipes-test/1.0.0-be [...]
+  <li>1.0.0-beta-1: <a href="https://javadoc.io/doc/io.fluo/fluo-recipes-core/1.0.0-beta-1/" target="_blank">core</a>, <a href="https://javadoc.io/doc/io.fluo/fluo-recipes-accumulo/1.0.0-beta-1/" target="_blank">accumulo</a> - January 13, 2016</li>
+</ul>
+
+  </article>
+
+</div>
+
+          </div>
+      </div>
+      <div class="row">
+        <div class="col-sm-12 center-block">
+          <footer>
+            <hr/>
+            <p>
+            <a href="https://www.apache.org/foundation/contributing"><img
+              src="https://www.apache.org/images/SupportApache-small.png"
+              id="asf-logo" height="100" alt="Apache"/></a>
+            </p>
+            <p>
+            Copyright &copy; 2020 <a
+              href="https://www.apache.org">The&nbsp;Apache&nbsp;Software&nbsp;Foundation</a>.
+            Licensed under the <a
+              href="https://www.apache.org/licenses/">Apache&nbsp;License,&nbsp;Version&nbsp;2.0</a>
+            </p>
+            <p>
+            Apache®, the names of Apache projects and their logos, and the multicolor feather
+            logo are registered trademarks or trademarks of The Apache Software Foundation
+            in the United States and/or other countries.
+            </p>
+          </footer>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>
diff --git a/output/api/index.html b/output/api/index.html
new file mode 100644
index 0000000..bf4681d
--- /dev/null
+++ b/output/api/index.html
@@ -0,0 +1,161 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+
+    <link href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/cosmo/bootstrap.min.css" rel="stylesheet" integrity="sha384-h21C2fcDk/eFsW9sC9h0dhokq5pDinLNklTKoxIZRUn3+hvmgQSffLLQ4G4l2eEr" crossorigin="anonymous">
+    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
+    <link rel="stylesheet" href="/css/fluo.css">
+    <link rel="canonical" href="https://fluo.apache.org//api/">
+    <link rel="icon" type="image/png" href="/resources/favicon.png">
+    
+    <title>API | Apache Fluo</title>
+
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
+    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+    <!-- Place your <script> tags here. -->
+
+<script>window.twttr = (function(d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0],
+    t = window.twttr || {};
+  if (d.getElementById(id)) return t;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "https://platform.twitter.com/widgets.js";
+  fjs.parentNode.insertBefore(js, fjs);
+
+  t._e = [];
+  t.ready = function(f) {
+    t._e.push(f);
+  };
+
+  return t;
+}(document, "script", "twitter-wjs"));</script>
+
+  </head>
+  <body style="padding-top: 100px">
+    <nav id="fluo-nav" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <div class="navbar-toggle-wrapper visible-xs">
+            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".js-navbar-collapse">
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+            </button>
+          </div>
+          <a href="/" class="navbar-brand"><img id="fluo-img" height="40px" src="/resources/fluo-logo-dark.png" alt="Apache Fluo"></a>
+        </div>
+        <div class="collapse navbar-collapse js-navbar-collapse" style="margin-top: 20px">
+          <ul class="navbar-nav nav">
+            <li><a href="/releases/">Releases</a></li>
+            <li><a href="/tour/">Tour</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Docs<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/docs/fluo/1.2/">Fluo</a></li>
+                <li><a href="/docs/fluo-recipes/1.2/">Fluo Recipes</a></li>
+              </ul>
+            </li>
+            <li><a href="/api/">API</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Community<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/contactus/">Contact Us</a></li>
+                <li><a href="/news/">News Archive</a></li>
+                <li><a href="/people/">People</a></li>
+                <li><a href="/related-projects/">Related Projects</a></li>
+                <li><a href="/poweredby/">Powered By</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Contributing<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/how-to-contribute/">How To Contribute</a></li>
+                <li><a href="/release-process/">Release Process</a></li>
+              </ul>
+            </li>
+            <li><a href="/search/">Search</a></li>
+          </ul>
+          <ul class="navbar-nav nav navbar-right">
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#"><img alt="Apache Software Foundation" src="https://www.apache.org/images/feather-small.png" width="70"/><span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="https://www.apache.org">Apache Homepage</a></li>
+                <li><a href="https://www.apache.org/licenses/">License</a></li>
+                <li><a href="https://www.apache.org/foundation/sponsorship">Sponsorship</i></a></li>
+                <li><a href="https://www.apache.org/security">Security</a></li>
+                <li><a href="https://www.apache.org/foundation/thanks">Thanks</a></li>
+                <li><a href="https://www.apache.org/foundation/policies/conduct">Code of Conduct</a></li>
+                <li><a href="https://www.apache.org/events/current-event.html">Current Event</a></li>
+              </ul>
+            </li>
+          </ul>
+        </div>
+      </div>
+    </nav>
+    <div class="container">
+      <div class="row">
+          <div class="col-sm-12">
+            <div class="page">
+
+  <header class="post-header">
+    <h2 class="post-title">API</h2>
+  </header>
+
+  <article id="page-content">
+    <p><a href="https://github.com/apache/fluo">Apache Fluo</a> and <a href="https://github.com/apache/fluo-recipes">Apache Fluo Recipes</a> have separate API as they are different repositories with their own release cycle.</p>
+
+<h4 id="apache-fluo-api">Apache Fluo API</h4>
+
+<ul>
+  <li><a href="https://javadoc.io/doc/org.apache.fluo/fluo-api/1.2.0/" target="_blank">1.2.0</a> - February 26, 2018</li>
+  <li><a href="https://javadoc.io/doc/org.apache.fluo/fluo-api/1.1.0-incubating/" target="_blank">1.1.0-incubating</a> - June 12, 2017</li>
+  <li><a href="https://javadoc.io/doc/org.apache.fluo/fluo-api/1.0.0-incubating/" target="_blank">1.0.0-incubating</a> - October 14, 2016</li>
+</ul>
+
+<h4 id="apache-fluo-recipes-api">Apache Fluo Recipes API</h4>
+
+<ul>
+  <li>1.2.0: <a href="https://javadoc.io/doc/org.apache.fluo/fluo-recipes-core/1.2.0/" target="_blank">core</a>, <a href="https://javadoc.io/doc/org.apache.fluo/fluo-recipes-accumulo/1.2.0/" target="_blank">accumulo</a>, <a href="https://javadoc.io/doc/org.apache.fluo/fluo-recipes-kryo/1.2.0/" target="_blank">kryo</a>, <a href="https://javadoc.io/doc/org.apache.fluo/fluo-recipes-spark/1.2.0/" target="_blank">spark</a>, <a href="https://javadoc.io/doc/org.apache.fluo/fluo-recipes-test/1.2 [...]
+  <li>1.1.0-incubating: <a href="https://javadoc.io/doc/org.apache.fluo/fluo-recipes-core/1.1.0-incubating/" target="_blank">core</a>, <a href="https://javadoc.io/doc/org.apache.fluo/fluo-recipes-accumulo/1.1.0-incubating/" target="_blank">accumulo</a>, <a href="https://javadoc.io/doc/org.apache.fluo/fluo-recipes-kryo/1.1.0-incubating/" target="_blank">kryo</a>, <a href="https://javadoc.io/doc/org.apache.fluo/fluo-recipes-spark/1.1.0-incubating/" target="_blank">spark</a>, <a href="https [...]
+  <li>1.0.0-incubating: <a href="https://javadoc.io/doc/org.apache.fluo/fluo-recipes-core/1.0.0-incubating/" target="_blank">core</a>, <a href="https://javadoc.io/doc/org.apache.fluo/fluo-recipes-accumulo/1.0.0-incubating/" target="_blank">accumulo</a>, <a href="https://javadoc.io/doc/org.apache.fluo/fluo-recipes-kryo/1.0.0-incubating/" target="_blank">kryo</a>, <a href="https://javadoc.io/doc/org.apache.fluo/fluo-recipes-spark/1.0.0-incubating/" target="_blank">spark</a>, <a href="https [...]
+</ul>
+
+<p>API for releases before joining Apache have been <a href="/api/archive">archived</a>.</p>
+
+
+  </article>
+
+</div>
+
+          </div>
+      </div>
+      <div class="row">
+        <div class="col-sm-12 center-block">
+          <footer>
+            <hr/>
+            <p>
+            <a href="https://www.apache.org/foundation/contributing"><img
+              src="https://www.apache.org/images/SupportApache-small.png"
+              id="asf-logo" height="100" alt="Apache"/></a>
+            </p>
+            <p>
+            Copyright &copy; 2020 <a
+              href="https://www.apache.org">The&nbsp;Apache&nbsp;Software&nbsp;Foundation</a>.
+            Licensed under the <a
+              href="https://www.apache.org/licenses/">Apache&nbsp;License,&nbsp;Version&nbsp;2.0</a>
+            </p>
+            <p>
+            Apache®, the names of Apache projects and their logos, and the multicolor feather
+            logo are registered trademarks or trademarks of The Apache Software Foundation
+            in the United States and/or other countries.
+            </p>
+          </footer>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>
diff --git a/output/apidocs/archive/index.html b/output/apidocs/archive/index.html
new file mode 100644
index 0000000..3c0924f
--- /dev/null
+++ b/output/apidocs/archive/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en-US">
+  <meta charset="utf-8">
+  <title>Redirecting&hellip;</title>
+  <link rel="canonical" href="https://fluo.apache.org//api/archive/">
+  <script>location="https://fluo.apache.org//api/archive/"</script>
+  <meta http-equiv="refresh" content="0; url=https://fluo.apache.org//api/archive/">
+  <meta name="robots" content="noindex">
+  <h1>Redirecting&hellip;</h1>
+  <a href="https://fluo.apache.org//api/archive/">Click here if you are not redirected.</a>
+</html>
diff --git a/output/apidocs/fluo-recipes/index.html b/output/apidocs/fluo-recipes/index.html
new file mode 100644
index 0000000..b505519
--- /dev/null
+++ b/output/apidocs/fluo-recipes/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en-US">
+  <meta charset="utf-8">
+  <title>Redirecting&hellip;</title>
+  <link rel="canonical" href="https://fluo.apache.org//api/">
+  <script>location="https://fluo.apache.org//api/"</script>
+  <meta http-equiv="refresh" content="0; url=https://fluo.apache.org//api/">
+  <meta name="robots" content="noindex">
+  <h1>Redirecting&hellip;</h1>
+  <a href="https://fluo.apache.org//api/">Click here if you are not redirected.</a>
+</html>
diff --git a/output/apidocs/fluo/index.html b/output/apidocs/fluo/index.html
new file mode 100644
index 0000000..b505519
--- /dev/null
+++ b/output/apidocs/fluo/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en-US">
+  <meta charset="utf-8">
+  <title>Redirecting&hellip;</title>
+  <link rel="canonical" href="https://fluo.apache.org//api/">
+  <script>location="https://fluo.apache.org//api/"</script>
+  <meta http-equiv="refresh" content="0; url=https://fluo.apache.org//api/">
+  <meta name="robots" content="noindex">
+  <h1>Redirecting&hellip;</h1>
+  <a href="https://fluo.apache.org//api/">Click here if you are not redirected.</a>
+</html>
diff --git a/output/apidocs/index.html b/output/apidocs/index.html
new file mode 100644
index 0000000..b505519
--- /dev/null
+++ b/output/apidocs/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en-US">
+  <meta charset="utf-8">
+  <title>Redirecting&hellip;</title>
+  <link rel="canonical" href="https://fluo.apache.org//api/">
+  <script>location="https://fluo.apache.org//api/"</script>
+  <meta http-equiv="refresh" content="0; url=https://fluo.apache.org//api/">
+  <meta name="robots" content="noindex">
+  <h1>Redirecting&hellip;</h1>
+  <a href="https://fluo.apache.org//api/">Click here if you are not redirected.</a>
+</html>
diff --git a/output/assets/css/style.css b/output/assets/css/style.css
new file mode 100644
index 0000000..bc2033b
--- /dev/null
+++ b/output/assets/css/style.css
@@ -0,0 +1,2883 @@
+/*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */
+/** 1. Change the default font family in all browsers (opinionated). 2. Prevent adjustments of font size after orientation changes in IE and iOS. */
+html { font-family: sans-serif; /* 1 */ -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */ }
+
+/** Remove the margin in all browsers (opinionated). */
+body { margin: 0; }
+
+/* HTML5 display definitions ========================================================================== */
+/** Add the correct display in IE 9-. 1. Add the correct display in Edge, IE, and Firefox. 2. Add the correct display in IE. */
+article, aside, details, figcaption, figure, footer, header, main, menu, nav, section { /* 1 */ display: block; }
+
+summary { display: list-item; }
+
+/** Add the correct display in IE 9-. */
+audio, canvas, progress, video { display: inline-block; }
+
+/** Add the correct display in iOS 4-7. */
+audio:not([controls]) { display: none; height: 0; }
+
+/** Add the correct vertical alignment in Chrome, Firefox, and Opera. */
+progress { vertical-align: baseline; }
+
+/** Add the correct display in IE 10-. 1. Add the correct display in IE. */
+template, [hidden] { display: none !important; }
+
+/* Links ========================================================================== */
+/** Remove the gray background on active links in IE 10. */
+a { background-color: transparent; /* 1 */ }
+
+/** Remove the outline on focused links when they are also active or hovered in all browsers (opinionated). */
+a:active, a:hover { outline-width: 0; }
+
+/* Text-level semantics ========================================================================== */
+/** 1. Remove the bottom border in Firefox 39-. 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. */
+abbr[title] { border-bottom: none; /* 1 */ text-decoration: underline; /* 2 */ text-decoration: underline dotted; /* 2 */ }
+
+/** Prevent the duplicate application of `bolder` by the next rule in Safari 6. */
+b, strong { font-weight: inherit; }
+
+/** Add the correct font weight in Chrome, Edge, and Safari. */
+b, strong { font-weight: bolder; }
+
+/** Add the correct font style in Android 4.3-. */
+dfn { font-style: italic; }
+
+/** Correct the font size and margin on `h1` elements within `section` and `article` contexts in Chrome, Firefox, and Safari. */
+h1 { font-size: 2em; margin: 0.67em 0; }
+
+/** Add the correct background and color in IE 9-. */
+mark { background-color: #ff0; color: #000; }
+
+/** Add the correct font size in all browsers. */
+small { font-size: 80%; }
+
+/** Prevent `sub` and `sup` elements from affecting the line height in all browsers. */
+sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
+
+sub { bottom: -0.25em; }
+
+sup { top: -0.5em; }
+
+/* Embedded content ========================================================================== */
+/** Remove the border on images inside links in IE 10-. */
+img { border-style: none; }
+
+/** Hide the overflow in IE. */
+svg:not(:root) { overflow: hidden; }
+
+/* Grouping content ========================================================================== */
+/** 1. Correct the inheritance and scaling of font size in all browsers. 2. Correct the odd `em` font sizing in all browsers. */
+code, kbd, pre, samp { font-family: monospace, monospace; /* 1 */ font-size: 1em; /* 2 */ }
+
+/** Add the correct margin in IE 8. */
+figure { margin: 1em 40px; }
+
+/** 1. Add the correct box sizing in Firefox. 2. Show the overflow in Edge and IE. */
+hr { box-sizing: content-box; /* 1 */ height: 0; /* 1 */ overflow: visible; /* 2 */ }
+
+/* Forms ========================================================================== */
+/** 1. Change font properties to `inherit` in all browsers (opinionated). 2. Remove the margin in Firefox and Safari. */
+button, input, select, textarea { font: inherit; /* 1 */ margin: 0; /* 2 */ }
+
+/** Restore the font weight unset by the previous rule. */
+optgroup { font-weight: bold; }
+
+/** Show the overflow in IE. 1. Show the overflow in Edge. */
+button, input { /* 1 */ overflow: visible; }
+
+/** Remove the inheritance of text transform in Edge, Firefox, and IE. 1. Remove the inheritance of text transform in Firefox. */
+button, select { /* 1 */ text-transform: none; }
+
+/** 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` controls in Android 4. 2. Correct the inability to style clickable types in iOS and Safari. */
+button, html [type="button"], [type="reset"], [type="submit"] { -webkit-appearance: button; /* 2 */ }
+
+/** Remove the inner border and padding in Firefox. */
+button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { border-style: none; padding: 0; }
+
+/** Restore the focus styles unset by the previous rule. */
+button:-moz-focusring, [type="button"]:-moz-focusring, [type="reset"]:-moz-focusring, [type="submit"]:-moz-focusring { outline: 1px dotted ButtonText; }
+
+/** Change the border, margin, and padding in all browsers (opinionated). */
+fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; }
+
+/** 1. Correct the text wrapping in Edge and IE. 2. Correct the color inheritance from `fieldset` elements in IE. 3. Remove the padding so developers are not caught out when they zero out `fieldset` elements in all browsers. */
+legend { box-sizing: border-box; /* 1 */ color: inherit; /* 2 */ display: table; /* 1 */ max-width: 100%; /* 1 */ padding: 0; /* 3 */ white-space: normal; /* 1 */ }
+
+/** Remove the default vertical scrollbar in IE. */
+textarea { overflow: auto; }
+
+/** 1. Add the correct box sizing in IE 10-. 2. Remove the padding in IE 10-. */
+[type="checkbox"], [type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ }
+
+/** Correct the cursor style of increment and decrement buttons in Chrome. */
+[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { height: auto; }
+
+/** 1. Correct the odd appearance in Chrome and Safari. 2. Correct the outline style in Safari. */
+[type="search"] { -webkit-appearance: textfield; /* 1 */ outline-offset: -2px; /* 2 */ }
+
+/** Remove the inner padding and cancel buttons in Chrome and Safari on OS X. */
+[type="search"]::-webkit-search-cancel-button, [type="search"]::-webkit-search-decoration { -webkit-appearance: none; }
+
+/** Correct the text style of placeholders in Chrome, Edge, and Safari. */
+::-webkit-input-placeholder { color: inherit; opacity: 0.54; }
+
+/** 1. Correct the inability to style clickable types in iOS and Safari. 2. Change font properties to `inherit` in Safari. */
+::-webkit-file-upload-button { -webkit-appearance: button; /* 1 */ font: inherit; /* 2 */ }
+
+* { box-sizing: border-box; }
+
+input, select, textarea, button { font-family: inherit; font-size: inherit; line-height: inherit; }
+
+body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 14px; line-height: 1.5; color: #24292e; background-color: #fff; }
+
+a { color: #0366d6; text-decoration: none; }
+a:hover { text-decoration: underline; }
+
+b, strong { font-weight: 600; }
+
+hr, .rule { height: 0; margin: 15px 0; overflow: hidden; background: transparent; border: 0; border-bottom: 1px solid #dfe2e5; }
+hr::before, .rule::before { display: table; content: ""; }
+hr::after, .rule::after { display: table; clear: both; content: ""; }
+
+table { border-spacing: 0; border-collapse: collapse; }
+
+td, th { padding: 0; }
+
+button { cursor: pointer; border-radius: 0; }
+
+[hidden][hidden] { display: none !important; }
+
+details summary { cursor: pointer; }
+details:not([open]) > *:not(summary) { display: none !important; }
+
+h1, h2, h3, h4, h5, h6 { margin-top: 0; margin-bottom: 0; }
+
+h1 { font-size: 32px; font-weight: 600; }
+
+h2 { font-size: 24px; font-weight: 600; }
+
+h3 { font-size: 20px; font-weight: 600; }
+
+h4 { font-size: 16px; font-weight: 600; }
+
+h5 { font-size: 14px; font-weight: 600; }
+
+h6 { font-size: 12px; font-weight: 600; }
+
+p { margin-top: 0; margin-bottom: 10px; }
+
+small { font-size: 90%; }
+
+blockquote { margin: 0; }
+
+ul, ol { padding-left: 0; margin-top: 0; margin-bottom: 0; }
+
+ol ol, ul ol { list-style-type: lower-roman; }
+
+ul ul ol, ul ol ol, ol ul ol, ol ol ol { list-style-type: lower-alpha; }
+
+dd { margin-left: 0; }
+
+tt, code { font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 12px; }
+
+pre { margin-top: 0; margin-bottom: 0; font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 12px; }
+
+.octicon { vertical-align: text-bottom; }
+
+/* Fade in an element */
+.anim-fade-in { animation-name: fade-in; animation-duration: 1s; animation-timing-function: ease-in-out; }
+.anim-fade-in.fast { animation-duration: 300ms; }
+
+@keyframes fade-in { 0% { opacity: 0; }
+  100% { opacity: 1; } }
+/* Fade out an element */
+.anim-fade-out { animation-name: fade-out; animation-duration: 1s; animation-timing-function: ease-out; }
+.anim-fade-out.fast { animation-duration: 0.3s; }
+
+@keyframes fade-out { 0% { opacity: 1; }
+  100% { opacity: 0; } }
+/* Fade in and slide up an element */
+.anim-fade-up { opacity: 0; animation-name: fade-up; animation-duration: 0.3s; animation-fill-mode: forwards; animation-timing-function: ease-out; animation-delay: 1s; }
+
+@keyframes fade-up { 0% { opacity: 0.8; transform: translateY(100%); }
+  100% { opacity: 1; transform: translateY(0); } }
+/* Fade an element out and slide down */
+.anim-fade-down { animation-name: fade-down; animation-duration: 0.3s; animation-fill-mode: forwards; animation-timing-function: ease-in; }
+
+@keyframes fade-down { 0% { opacity: 1; transform: translateY(0); }
+  100% { opacity: 0.5; transform: translateY(100%); } }
+/* Grow an element width from 0 to 100% */
+.anim-grow-x { width: 0%; animation-name: grow-x; animation-duration: 0.3s; animation-fill-mode: forwards; animation-timing-function: ease; animation-delay: 0.5s; }
+
+@keyframes grow-x { to { width: 100%; } }
+/* Shrink an element from 100% to 0% */
+.anim-shrink-x { animation-name: shrink-x; animation-duration: 0.3s; animation-fill-mode: forwards; animation-timing-function: ease-in-out; animation-delay: 0.5s; }
+
+@keyframes shrink-x { to { width: 0%; } }
+/* Fade in an element and scale it fast */
+.anim-scale-in { animation-name: scale-in; animation-duration: 0.15s; animation-timing-function: cubic-bezier(0.2, 0, 0.13, 1.5); }
+
+@keyframes scale-in { 0% { opacity: 0; transform: scale(0.5); }
+  100% { opacity: 1; transform: scale(1); } }
+/* Pulse an element's opacity */
+.anim-pulse { animation-name: pulse; animation-duration: 2s; animation-timing-function: linear; animation-iteration-count: infinite; }
+
+@keyframes pulse { 0% { opacity: 0.3; }
+  10% { opacity: 1; }
+  100% { opacity: 0.3; } }
+/* Pulse in an element */
+.anim-pulse-in { animation-name: pulse-in; animation-duration: 0.5s; }
+
+@keyframes pulse-in { 0% { transform: scale3d(1, 1, 1); }
+  50% { transform: scale3d(1.1, 1.1, 1.1); }
+  100% { transform: scale3d(1, 1, 1); } }
+/* Increase scale of an element on hover */
+.hover-grow { transition: transform 0.3s; backface-visibility: hidden; }
+.hover-grow:hover { transform: scale(1.025); }
+
+/* Add a gray border on all sides */
+.border { border: 1px #e1e4e8 solid !important; }
+
+/* Add a gray border to the left and right */
+.border-y { border-top: 1px #e1e4e8 solid !important; border-bottom: 1px #e1e4e8 solid !important; }
+
+/* Remove borders from all sides */
+.border-0 { border: 0 !important; }
+
+.border-dashed { border-style: dashed !important; }
+
+/* Use with .border to turn the border blue */
+.border-blue { border-color: #0366d6 !important; }
+
+/* Use with .border to turn the border blue-light */
+.border-blue-light { border-color: #c8e1ff !important; }
+
+/* Use with .border to turn the border green */
+.border-green { border-color: #34d058 !important; }
+
+/* Use with .border to turn the border green light */
+.border-green-light { border-color: #a2cbac !important; }
+
+/* Use with .border to turn the border red */
+.border-red { border-color: #d73a49 !important; }
+
+/* Use with .border to turn the border red-light */
+.border-red-light { border-color: #cea0a5 !important; }
+
+/* Use with .border to turn the border purple */
+.border-purple { border-color: #6f42c1 !important; }
+
+/* Use with .border to turn the border yellow */
+.border-yellow { border-color: #d9d0a5 !important; }
+
+/* Use with .border to turn the border gray-light */
+.border-gray-light { border-color: #eaecef !important; }
+
+/* Use with .border to turn the border gray-dark */
+.border-gray-dark { border-color: #d1d5da !important; }
+
+/* Use with .border to turn the border rgba black 0.15 */
+.border-black-fade { border-color: rgba(27, 31, 35, 0.15) !important; }
+
+/* Add a gray border */
+/* Add a gray border to the top */
+.border-top { border-top: 1px #e1e4e8 solid !important; }
+
+/* Add a gray border to the right */
+.border-right { border-right: 1px #e1e4e8 solid !important; }
+
+/* Add a gray border to the bottom */
+.border-bottom { border-bottom: 1px #e1e4e8 solid !important; }
+
+/* Add a gray border to the left */
+.border-left { border-left: 1px #e1e4e8 solid !important; }
+
+/* Remove the top border */
+.border-top-0 { border-top: 0 !important; }
+
+/* Remove the right border */
+.border-right-0 { border-right: 0 !important; }
+
+/* Remove the bottom border */
+.border-bottom-0 { border-bottom: 0 !important; }
+
+/* Remove the left border */
+.border-left-0 { border-left: 0 !important; }
+
+/* Remove the border-radius */
+.rounded-0 { border-radius: 0 !important; }
+
+/* Add a border-radius to all corners */
+.rounded-1 { border-radius: 3px !important; }
+
+/* Add a 2x border-radius to all corners */
+.rounded-2 { border-radius: 6px !important; }
+
+.rounded-top-0 { border-top-left-radius: 0 !important; border-top-right-radius: 0 !important; }
+
+.rounded-top-1 { border-top-left-radius: 3px !important; border-top-right-radius: 3px !important; }
+
+.rounded-top-2 { border-top-left-radius: 6px !important; border-top-right-radius: 6px !important; }
+
+.rounded-right-0 { border-top-right-radius: 0 !important; border-bottom-right-radius: 0 !important; }
+
+.rounded-right-1 { border-top-right-radius: 3px !important; border-bottom-right-radius: 3px !important; }
+
+.rounded-right-2 { border-top-right-radius: 6px !important; border-bottom-right-radius: 6px !important; }
+
+.rounded-bottom-0 { border-bottom-right-radius: 0 !important; border-bottom-left-radius: 0 !important; }
+
+.rounded-bottom-1 { border-bottom-right-radius: 3px !important; border-bottom-left-radius: 3px !important; }
+
+.rounded-bottom-2 { border-bottom-right-radius: 6px !important; border-bottom-left-radius: 6px !important; }
+
+.rounded-left-0 { border-bottom-left-radius: 0 !important; border-top-left-radius: 0 !important; }
+
+.rounded-left-1 { border-bottom-left-radius: 3px !important; border-top-left-radius: 3px !important; }
+
+.rounded-left-2 { border-bottom-left-radius: 6px !important; border-top-left-radius: 6px !important; }
+
+@media (min-width: 544px) { /* Add a gray border */
+  /* Add a gray border to the top */
+  .border-sm-top { border-top: 1px #e1e4e8 solid !important; }
+  /* Add a gray border to the right */
+  .border-sm-right { border-right: 1px #e1e4e8 solid !important; }
+  /* Add a gray border to the bottom */
+  .border-sm-bottom { border-bottom: 1px #e1e4e8 solid !important; }
+  /* Add a gray border to the left */
+  .border-sm-left { border-left: 1px #e1e4e8 solid !important; }
+  /* Remove the top border */
+  .border-sm-top-0 { border-top: 0 !important; }
+  /* Remove the right border */
+  .border-sm-right-0 { border-right: 0 !important; }
+  /* Remove the bottom border */
+  .border-sm-bottom-0 { border-bottom: 0 !important; }
+  /* Remove the left border */
+  .border-sm-left-0 { border-left: 0 !important; }
+  /* Remove the border-radius */
+  .rounded-sm-0 { border-radius: 0 !important; }
+  /* Add a border-radius to all corners */
+  .rounded-sm-1 { border-radius: 3px !important; }
+  /* Add a 2x border-radius to all corners */
+  .rounded-sm-2 { border-radius: 6px !important; }
+  .rounded-sm-top-0 { border-top-left-radius: 0 !important; border-top-right-radius: 0 !important; }
+  .rounded-sm-top-1 { border-top-left-radius: 3px !important; border-top-right-radius: 3px !important; }
+  .rounded-sm-top-2 { border-top-left-radius: 6px !important; border-top-right-radius: 6px !important; }
+  .rounded-sm-right-0 { border-top-right-radius: 0 !important; border-bottom-right-radius: 0 !important; }
+  .rounded-sm-right-1 { border-top-right-radius: 3px !important; border-bottom-right-radius: 3px !important; }
+  .rounded-sm-right-2 { border-top-right-radius: 6px !important; border-bottom-right-radius: 6px !important; }
+  .rounded-sm-bottom-0 { border-bottom-right-radius: 0 !important; border-bottom-left-radius: 0 !important; }
+  .rounded-sm-bottom-1 { border-bottom-right-radius: 3px !important; border-bottom-left-radius: 3px !important; }
+  .rounded-sm-bottom-2 { border-bottom-right-radius: 6px !important; border-bottom-left-radius: 6px !important; }
+  .rounded-sm-left-0 { border-bottom-left-radius: 0 !important; border-top-left-radius: 0 !important; }
+  .rounded-sm-left-1 { border-bottom-left-radius: 3px !important; border-top-left-radius: 3px !important; }
+  .rounded-sm-left-2 { border-bottom-left-radius: 6px !important; border-top-left-radius: 6px !important; } }
+@media (min-width: 768px) { /* Add a gray border */
+  /* Add a gray border to the top */
+  .border-md-top { border-top: 1px #e1e4e8 solid !important; }
+  /* Add a gray border to the right */
+  .border-md-right { border-right: 1px #e1e4e8 solid !important; }
+  /* Add a gray border to the bottom */
+  .border-md-bottom { border-bottom: 1px #e1e4e8 solid !important; }
+  /* Add a gray border to the left */
+  .border-md-left { border-left: 1px #e1e4e8 solid !important; }
+  /* Remove the top border */
+  .border-md-top-0 { border-top: 0 !important; }
+  /* Remove the right border */
+  .border-md-right-0 { border-right: 0 !important; }
+  /* Remove the bottom border */
+  .border-md-bottom-0 { border-bottom: 0 !important; }
+  /* Remove the left border */
+  .border-md-left-0 { border-left: 0 !important; }
+  /* Remove the border-radius */
+  .rounded-md-0 { border-radius: 0 !important; }
+  /* Add a border-radius to all corners */
+  .rounded-md-1 { border-radius: 3px !important; }
+  /* Add a 2x border-radius to all corners */
+  .rounded-md-2 { border-radius: 6px !important; }
+  .rounded-md-top-0 { border-top-left-radius: 0 !important; border-top-right-radius: 0 !important; }
+  .rounded-md-top-1 { border-top-left-radius: 3px !important; border-top-right-radius: 3px !important; }
+  .rounded-md-top-2 { border-top-left-radius: 6px !important; border-top-right-radius: 6px !important; }
+  .rounded-md-right-0 { border-top-right-radius: 0 !important; border-bottom-right-radius: 0 !important; }
+  .rounded-md-right-1 { border-top-right-radius: 3px !important; border-bottom-right-radius: 3px !important; }
+  .rounded-md-right-2 { border-top-right-radius: 6px !important; border-bottom-right-radius: 6px !important; }
+  .rounded-md-bottom-0 { border-bottom-right-radius: 0 !important; border-bottom-left-radius: 0 !important; }
+  .rounded-md-bottom-1 { border-bottom-right-radius: 3px !important; border-bottom-left-radius: 3px !important; }
+  .rounded-md-bottom-2 { border-bottom-right-radius: 6px !important; border-bottom-left-radius: 6px !important; }
+  .rounded-md-left-0 { border-bottom-left-radius: 0 !important; border-top-left-radius: 0 !important; }
+  .rounded-md-left-1 { border-bottom-left-radius: 3px !important; border-top-left-radius: 3px !important; }
+  .rounded-md-left-2 { border-bottom-left-radius: 6px !important; border-top-left-radius: 6px !important; } }
+@media (min-width: 1012px) { /* Add a gray border */
+  /* Add a gray border to the top */
+  .border-lg-top { border-top: 1px #e1e4e8 solid !important; }
+  /* Add a gray border to the right */
+  .border-lg-right { border-right: 1px #e1e4e8 solid !important; }
+  /* Add a gray border to the bottom */
+  .border-lg-bottom { border-bottom: 1px #e1e4e8 solid !important; }
+  /* Add a gray border to the left */
+  .border-lg-left { border-left: 1px #e1e4e8 solid !important; }
+  /* Remove the top border */
+  .border-lg-top-0 { border-top: 0 !important; }
+  /* Remove the right border */
+  .border-lg-right-0 { border-right: 0 !important; }
+  /* Remove the bottom border */
+  .border-lg-bottom-0 { border-bottom: 0 !important; }
+  /* Remove the left border */
+  .border-lg-left-0 { border-left: 0 !important; }
+  /* Remove the border-radius */
+  .rounded-lg-0 { border-radius: 0 !important; }
+  /* Add a border-radius to all corners */
+  .rounded-lg-1 { border-radius: 3px !important; }
+  /* Add a 2x border-radius to all corners */
+  .rounded-lg-2 { border-radius: 6px !important; }
+  .rounded-lg-top-0 { border-top-left-radius: 0 !important; border-top-right-radius: 0 !important; }
+  .rounded-lg-top-1 { border-top-left-radius: 3px !important; border-top-right-radius: 3px !important; }
+  .rounded-lg-top-2 { border-top-left-radius: 6px !important; border-top-right-radius: 6px !important; }
+  .rounded-lg-right-0 { border-top-right-radius: 0 !important; border-bottom-right-radius: 0 !important; }
+  .rounded-lg-right-1 { border-top-right-radius: 3px !important; border-bottom-right-radius: 3px !important; }
+  .rounded-lg-right-2 { border-top-right-radius: 6px !important; border-bottom-right-radius: 6px !important; }
+  .rounded-lg-bottom-0 { border-bottom-right-radius: 0 !important; border-bottom-left-radius: 0 !important; }
+  .rounded-lg-bottom-1 { border-bottom-right-radius: 3px !important; border-bottom-left-radius: 3px !important; }
+  .rounded-lg-bottom-2 { border-bottom-right-radius: 6px !important; border-bottom-left-radius: 6px !important; }
+  .rounded-lg-left-0 { border-bottom-left-radius: 0 !important; border-top-left-radius: 0 !important; }
+  .rounded-lg-left-1 { border-bottom-left-radius: 3px !important; border-top-left-radius: 3px !important; }
+  .rounded-lg-left-2 { border-bottom-left-radius: 6px !important; border-top-left-radius: 6px !important; } }
+@media (min-width: 1280px) { /* Add a gray border */
+  /* Add a gray border to the top */
+  .border-xl-top { border-top: 1px #e1e4e8 solid !important; }
+  /* Add a gray border to the right */
+  .border-xl-right { border-right: 1px #e1e4e8 solid !important; }
+  /* Add a gray border to the bottom */
+  .border-xl-bottom { border-bottom: 1px #e1e4e8 solid !important; }
+  /* Add a gray border to the left */
+  .border-xl-left { border-left: 1px #e1e4e8 solid !important; }
+  /* Remove the top border */
+  .border-xl-top-0 { border-top: 0 !important; }
+  /* Remove the right border */
+  .border-xl-right-0 { border-right: 0 !important; }
+  /* Remove the bottom border */
+  .border-xl-bottom-0 { border-bottom: 0 !important; }
+  /* Remove the left border */
+  .border-xl-left-0 { border-left: 0 !important; }
+  /* Remove the border-radius */
+  .rounded-xl-0 { border-radius: 0 !important; }
+  /* Add a border-radius to all corners */
+  .rounded-xl-1 { border-radius: 3px !important; }
+  /* Add a 2x border-radius to all corners */
+  .rounded-xl-2 { border-radius: 6px !important; }
+  .rounded-xl-top-0 { border-top-left-radius: 0 !important; border-top-right-radius: 0 !important; }
+  .rounded-xl-top-1 { border-top-left-radius: 3px !important; border-top-right-radius: 3px !important; }
+  .rounded-xl-top-2 { border-top-left-radius: 6px !important; border-top-right-radius: 6px !important; }
+  .rounded-xl-right-0 { border-top-right-radius: 0 !important; border-bottom-right-radius: 0 !important; }
+  .rounded-xl-right-1 { border-top-right-radius: 3px !important; border-bottom-right-radius: 3px !important; }
+  .rounded-xl-right-2 { border-top-right-radius: 6px !important; border-bottom-right-radius: 6px !important; }
+  .rounded-xl-bottom-0 { border-bottom-right-radius: 0 !important; border-bottom-left-radius: 0 !important; }
+  .rounded-xl-bottom-1 { border-bottom-right-radius: 3px !important; border-bottom-left-radius: 3px !important; }
+  .rounded-xl-bottom-2 { border-bottom-right-radius: 6px !important; border-bottom-left-radius: 6px !important; }
+  .rounded-xl-left-0 { border-bottom-left-radius: 0 !important; border-top-left-radius: 0 !important; }
+  .rounded-xl-left-1 { border-bottom-left-radius: 3px !important; border-top-left-radius: 3px !important; }
+  .rounded-xl-left-2 { border-bottom-left-radius: 6px !important; border-top-left-radius: 6px !important; } }
+/* Add a 50% border-radius to make something into a circle */
+.circle { border-radius: 50% !important; }
+
+.box-shadow { box-shadow: 0 1px 1px rgba(27, 31, 35, 0.1) !important; }
+
+.box-shadow-medium { box-shadow: 0 1px 5px rgba(27, 31, 35, 0.15) !important; }
+
+.box-shadow-large { box-shadow: 0 1px 15px rgba(27, 31, 35, 0.15) !important; }
+
+.box-shadow-extra-large { box-shadow: 0 10px 50px rgba(27, 31, 35, 0.07) !important; }
+
+.box-shadow-none { box-shadow: none !important; }
+
+/* Set the background to $bg-white */
+.bg-white { background-color: #fff !important; }
+
+/* Set the background to $bg-blue */
+.bg-blue { background-color: #0366d6 !important; }
+
+/* Set the background to $bg-blue-light */
+.bg-blue-light { background-color: #f1f8ff !important; }
+
+/* Set the background to $bg-gray-dark */
+.bg-gray-dark { background-color: #24292e !important; }
+
+/* Set the background to $bg-gray */
+.bg-gray { background-color: #f6f8fa !important; }
+
+/* Set the background to $bg-gray-light */
+.bg-gray-light { background-color: #fafbfc !important; }
+
+/* Set the background to $bg-green */
+.bg-green { background-color: #28a745 !important; }
+
+/* Set the background to $bg-green-light */
+.bg-green-light { background-color: #dcffe4 !important; }
+
+/* Set the background to $bg-red */
+.bg-red { background-color: #d73a49 !important; }
+
+/* Set the background to $bg-red-light */
+.bg-red-light { background-color: #ffdce0 !important; }
+
+/* Set the background to $bg-yellow */
+.bg-yellow { background-color: #ffd33d !important; }
+
+/* Set the background to $bg-yellow-light */
+.bg-yellow-light { background-color: #fff5b1 !important; }
+
+/* Set the background to $bg-purple */
+.bg-purple { background-color: #6f42c1 !important; }
+
+/* Set the background to $bg-purple-light */
+.bg-purple-light { background-color: #f5f0ff !important; }
+
+.bg-shade-gradient { background-image: linear-gradient(180deg, rgba(27, 31, 35, 0.065), rgba(27, 31, 35, 0)) !important; background-repeat: no-repeat !important; background-size: 100% 200px !important; }
+
+/* Set the text color to $text-blue */
+.text-blue { color: #0366d6 !important; }
+
+/* Set the text color to $text-red */
+.text-red { color: #cb2431 !important; }
+
+/* Set the text color to $text-gray-light */
+.text-gray-light { color: #6a737d !important; }
+
+/* Set the text color to $text-gray */
+.text-gray { color: #586069 !important; }
+
+/* Set the text color to $text-gray-dark */
+.text-gray-dark { color: #24292e !important; }
+
+/* Set the text color to $text-green */
+.text-green { color: #28a745 !important; }
+
+/* Set the text color to $text-orange */
+.text-orange { color: #a04100 !important; }
+
+/* Set the text color to $text-orange-light */
+.text-orange-light { color: #e36209 !important; }
+
+/* Set the text color to $text-purple */
+.text-purple { color: #6f42c1 !important; }
+
+/* Set the text color to $text-white */
+.text-white { color: #fff !important; }
+
+/* Set the text color to inherit */
+.text-inherit { color: inherit !important; }
+
+.text-pending { color: #b08800 !important; }
+
+.bg-pending { color: #dbab09 !important; }
+
+.link-gray { color: #586069 !important; }
+.link-gray:hover { color: #0366d6 !important; }
+
+.link-gray-dark { color: #24292e !important; }
+.link-gray-dark:hover { color: #0366d6 !important; }
+
+/* Set the link color to $text-blue on hover Useful when you want only part of a link to turn blue on hover */
+.link-hover-blue:hover { color: #0366d6 !important; }
+
+/* Make a link $text-gray, then $text-blue on hover and removes the underline */
+.muted-link { color: #586069 !important; }
+.muted-link:hover { color: #0366d6 !important; text-decoration: none; }
+
+.details-overlay[open] > summary::before { position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 80; display: block; cursor: default; content: " "; background: transparent; }
+
+.details-overlay-dark[open] > summary::before { z-index: 99; background: rgba(27, 31, 35, 0.5); }
+
+.flex-row { flex-direction: row !important; }
+
+.flex-row-reverse { flex-direction: row-reverse !important; }
+
+.flex-column { flex-direction: column !important; }
+
+.flex-wrap { flex-wrap: wrap !important; }
+
+.flex-nowrap { flex-wrap: nowrap !important; }
+
+.flex-justify-start { justify-content: flex-start !important; }
+
+.flex-justify-end { justify-content: flex-end !important; }
+
+.flex-justify-center { justify-content: center !important; }
+
+.flex-justify-between { justify-content: space-between !important; }
+
+.flex-justify-around { justify-content: space-around !important; }
+
+.flex-items-start { align-items: flex-start !important; }
+
+.flex-items-end { align-items: flex-end !important; }
+
+.flex-items-center { align-items: center !important; }
+
+.flex-items-baseline { align-items: baseline !important; }
+
+.flex-items-stretch { align-items: stretch !important; }
+
+.flex-content-start { align-content: flex-start !important; }
+
+.flex-content-end { align-content: flex-end !important; }
+
+.flex-content-center { align-content: center !important; }
+
+.flex-content-between { align-content: space-between !important; }
+
+.flex-content-around { align-content: space-around !important; }
+
+.flex-content-stretch { align-content: stretch !important; }
+
+.flex-auto { flex: 1 1 auto !important; }
+
+.flex-shrink-0 { flex-shrink: 0 !important; }
+
+.flex-self-auto { align-self: auto !important; }
+
+.flex-self-start { align-self: flex-start !important; }
+
+.flex-self-end { align-self: flex-end !important; }
+
+.flex-self-center { align-self: center !important; }
+
+.flex-self-baseline { align-self: baseline !important; }
+
+.flex-self-stretch { align-self: stretch !important; }
+
+.flex-item-equal { flex-grow: 1; flex-basis: 0; }
+
+@media (min-width: 544px) { .flex-sm-row { flex-direction: row !important; }
+  .flex-sm-row-reverse { flex-direction: row-reverse !important; }
+  .flex-sm-column { flex-direction: column !important; }
+  .flex-sm-wrap { flex-wrap: wrap !important; }
+  .flex-sm-nowrap { flex-wrap: nowrap !important; }
+  .flex-sm-justify-start { justify-content: flex-start !important; }
+  .flex-sm-justify-end { justify-content: flex-end !important; }
+  .flex-sm-justify-center { justify-content: center !important; }
+  .flex-sm-justify-between { justify-content: space-between !important; }
+  .flex-sm-justify-around { justify-content: space-around !important; }
+  .flex-sm-items-start { align-items: flex-start !important; }
+  .flex-sm-items-end { align-items: flex-end !important; }
+  .flex-sm-items-center { align-items: center !important; }
+  .flex-sm-items-baseline { align-items: baseline !important; }
+  .flex-sm-items-stretch { align-items: stretch !important; }
+  .flex-sm-content-start { align-content: flex-start !important; }
+  .flex-sm-content-end { align-content: flex-end !important; }
+  .flex-sm-content-center { align-content: center !important; }
+  .flex-sm-content-between { align-content: space-between !important; }
+  .flex-sm-content-around { align-content: space-around !important; }
+  .flex-sm-content-stretch { align-content: stretch !important; }
+  .flex-sm-auto { flex: 1 1 auto !important; }
+  .flex-sm-shrink-0 { flex-shrink: 0 !important; }
+  .flex-sm-self-auto { align-self: auto !important; }
+  .flex-sm-self-start { align-self: flex-start !important; }
+  .flex-sm-self-end { align-self: flex-end !important; }
+  .flex-sm-self-center { align-self: center !important; }
+  .flex-sm-self-baseline { align-self: baseline !important; }
+  .flex-sm-self-stretch { align-self: stretch !important; }
+  .flex-sm-item-equal { flex-grow: 1; flex-basis: 0; } }
+@media (min-width: 768px) { .flex-md-row { flex-direction: row !important; }
+  .flex-md-row-reverse { flex-direction: row-reverse !important; }
+  .flex-md-column { flex-direction: column !important; }
+  .flex-md-wrap { flex-wrap: wrap !important; }
+  .flex-md-nowrap { flex-wrap: nowrap !important; }
+  .flex-md-justify-start { justify-content: flex-start !important; }
+  .flex-md-justify-end { justify-content: flex-end !important; }
+  .flex-md-justify-center { justify-content: center !important; }
+  .flex-md-justify-between { justify-content: space-between !important; }
+  .flex-md-justify-around { justify-content: space-around !important; }
+  .flex-md-items-start { align-items: flex-start !important; }
+  .flex-md-items-end { align-items: flex-end !important; }
+  .flex-md-items-center { align-items: center !important; }
+  .flex-md-items-baseline { align-items: baseline !important; }
+  .flex-md-items-stretch { align-items: stretch !important; }
+  .flex-md-content-start { align-content: flex-start !important; }
+  .flex-md-content-end { align-content: flex-end !important; }
+  .flex-md-content-center { align-content: center !important; }
+  .flex-md-content-between { align-content: space-between !important; }
+  .flex-md-content-around { align-content: space-around !important; }
+  .flex-md-content-stretch { align-content: stretch !important; }
+  .flex-md-auto { flex: 1 1 auto !important; }
+  .flex-md-shrink-0 { flex-shrink: 0 !important; }
+  .flex-md-self-auto { align-self: auto !important; }
+  .flex-md-self-start { align-self: flex-start !important; }
+  .flex-md-self-end { align-self: flex-end !important; }
+  .flex-md-self-center { align-self: center !important; }
+  .flex-md-self-baseline { align-self: baseline !important; }
+  .flex-md-self-stretch { align-self: stretch !important; }
+  .flex-md-item-equal { flex-grow: 1; flex-basis: 0; } }
+@media (min-width: 1012px) { .flex-lg-row { flex-direction: row !important; }
+  .flex-lg-row-reverse { flex-direction: row-reverse !important; }
+  .flex-lg-column { flex-direction: column !important; }
+  .flex-lg-wrap { flex-wrap: wrap !important; }
+  .flex-lg-nowrap { flex-wrap: nowrap !important; }
+  .flex-lg-justify-start { justify-content: flex-start !important; }
+  .flex-lg-justify-end { justify-content: flex-end !important; }
+  .flex-lg-justify-center { justify-content: center !important; }
+  .flex-lg-justify-between { justify-content: space-between !important; }
+  .flex-lg-justify-around { justify-content: space-around !important; }
+  .flex-lg-items-start { align-items: flex-start !important; }
+  .flex-lg-items-end { align-items: flex-end !important; }
+  .flex-lg-items-center { align-items: center !important; }
+  .flex-lg-items-baseline { align-items: baseline !important; }
+  .flex-lg-items-stretch { align-items: stretch !important; }
+  .flex-lg-content-start { align-content: flex-start !important; }
+  .flex-lg-content-end { align-content: flex-end !important; }
+  .flex-lg-content-center { align-content: center !important; }
+  .flex-lg-content-between { align-content: space-between !important; }
+  .flex-lg-content-around { align-content: space-around !important; }
+  .flex-lg-content-stretch { align-content: stretch !important; }
+  .flex-lg-auto { flex: 1 1 auto !important; }
+  .flex-lg-shrink-0 { flex-shrink: 0 !important; }
+  .flex-lg-self-auto { align-self: auto !important; }
+  .flex-lg-self-start { align-self: flex-start !important; }
+  .flex-lg-self-end { align-self: flex-end !important; }
+  .flex-lg-self-center { align-self: center !important; }
+  .flex-lg-self-baseline { align-self: baseline !important; }
+  .flex-lg-self-stretch { align-self: stretch !important; }
+  .flex-lg-item-equal { flex-grow: 1; flex-basis: 0; } }
+@media (min-width: 1280px) { .flex-xl-row { flex-direction: row !important; }
+  .flex-xl-row-reverse { flex-direction: row-reverse !important; }
+  .flex-xl-column { flex-direction: column !important; }
+  .flex-xl-wrap { flex-wrap: wrap !important; }
+  .flex-xl-nowrap { flex-wrap: nowrap !important; }
+  .flex-xl-justify-start { justify-content: flex-start !important; }
+  .flex-xl-justify-end { justify-content: flex-end !important; }
+  .flex-xl-justify-center { justify-content: center !important; }
+  .flex-xl-justify-between { justify-content: space-between !important; }
+  .flex-xl-justify-around { justify-content: space-around !important; }
+  .flex-xl-items-start { align-items: flex-start !important; }
+  .flex-xl-items-end { align-items: flex-end !important; }
+  .flex-xl-items-center { align-items: center !important; }
+  .flex-xl-items-baseline { align-items: baseline !important; }
+  .flex-xl-items-stretch { align-items: stretch !important; }
+  .flex-xl-content-start { align-content: flex-start !important; }
+  .flex-xl-content-end { align-content: flex-end !important; }
+  .flex-xl-content-center { align-content: center !important; }
+  .flex-xl-content-between { align-content: space-between !important; }
+  .flex-xl-content-around { align-content: space-around !important; }
+  .flex-xl-content-stretch { align-content: stretch !important; }
+  .flex-xl-auto { flex: 1 1 auto !important; }
+  .flex-xl-shrink-0 { flex-shrink: 0 !important; }
+  .flex-xl-self-auto { align-self: auto !important; }
+  .flex-xl-self-start { align-self: flex-start !important; }
+  .flex-xl-self-end { align-self: flex-end !important; }
+  .flex-xl-self-center { align-self: center !important; }
+  .flex-xl-self-baseline { align-self: baseline !important; }
+  .flex-xl-self-stretch { align-self: stretch !important; }
+  .flex-xl-item-equal { flex-grow: 1; flex-basis: 0; } }
+/* Set position to static */
+.position-static { position: static !important; }
+
+/* Set position to relative */
+.position-relative { position: relative !important; }
+
+/* Set position to absolute */
+.position-absolute { position: absolute !important; }
+
+/* Set position to fixed */
+.position-fixed { position: fixed !important; }
+
+/* Set top 0 */
+.top-0 { top: 0 !important; }
+
+/* Set right 0 */
+.right-0 { right: 0 !important; }
+
+/* Set bottom 0 */
+.bottom-0 { bottom: 0 !important; }
+
+/* Set left 0 */
+.left-0 { left: 0 !important; }
+
+/* Vertical align middle */
+.v-align-middle { vertical-align: middle !important; }
+
+/* Vertical align top */
+.v-align-top { vertical-align: top !important; }
+
+/* Vertical align bottom */
+.v-align-bottom { vertical-align: bottom !important; }
+
+/* Vertical align to the top of the text */
+.v-align-text-top { vertical-align: text-top !important; }
+
+/* Vertical align to the bottom of the text */
+.v-align-text-bottom { vertical-align: text-bottom !important; }
+
+/* Vertical align to the parent's baseline */
+.v-align-baseline { vertical-align: baseline !important; }
+
+/* Set the overflow hidden */
+.overflow-hidden { overflow: hidden !important; }
+
+/* Set the overflow scroll */
+.overflow-scroll { overflow: scroll !important; }
+
+/* Set the overflow auto */
+.overflow-auto { overflow: auto !important; }
+
+/* Clear floats around the element */
+.clearfix::before { display: table; content: ""; }
+.clearfix::after { display: table; clear: both; content: ""; }
+
+/* Float to the left */
+.float-left { float: left !important; }
+
+/* Float to the right */
+.float-right { float: right !important; }
+
+/* No float */
+.float-none { float: none !important; }
+
+@media (min-width: 544px) { /* Float to the left */
+  .float-sm-left { float: left !important; }
+  /* Float to the right */
+  .float-sm-right { float: right !important; }
+  /* No float */
+  .float-sm-none { float: none !important; } }
+@media (min-width: 768px) { /* Float to the left */
+  .float-md-left { float: left !important; }
+  /* Float to the right */
+  .float-md-right { float: right !important; }
+  /* No float */
+  .float-md-none { float: none !important; } }
+@media (min-width: 1012px) { /* Float to the left */
+  .float-lg-left { float: left !important; }
+  /* Float to the right */
+  .float-lg-right { float: right !important; }
+  /* No float */
+  .float-lg-none { float: none !important; } }
+@media (min-width: 1280px) { /* Float to the left */
+  .float-xl-left { float: left !important; }
+  /* Float to the right */
+  .float-xl-right { float: right !important; }
+  /* No float */
+  .float-xl-none { float: none !important; } }
+/* Max width 100% */
+.width-fit { max-width: 100% !important; }
+
+/* Set the width to 100% */
+.width-full { width: 100% !important; }
+
+/* Max height 100% */
+.height-fit { max-height: 100% !important; }
+
+/* Set the height to 100% */
+.height-full { height: 100% !important; }
+
+/* Remove min-width from element */
+.min-width-0 { min-width: 0 !important; }
+
+/* Set the direction to rtl */
+.direction-rtl { direction: rtl !important; }
+
+/* Set the direction to ltr */
+.direction-ltr { direction: ltr !important; }
+
+@media (min-width: 544px) { /* Set the direction to rtl */
+  .direction-sm-rtl { direction: rtl !important; }
+  /* Set the direction to ltr */
+  .direction-sm-ltr { direction: ltr !important; } }
+@media (min-width: 768px) { /* Set the direction to rtl */
+  .direction-md-rtl { direction: rtl !important; }
+  /* Set the direction to ltr */
+  .direction-md-ltr { direction: ltr !important; } }
+@media (min-width: 1012px) { /* Set the direction to rtl */
+  .direction-lg-rtl { direction: rtl !important; }
+  /* Set the direction to ltr */
+  .direction-lg-ltr { direction: ltr !important; } }
+@media (min-width: 1280px) { /* Set the direction to rtl */
+  .direction-xl-rtl { direction: rtl !important; }
+  /* Set the direction to ltr */
+  .direction-xl-ltr { direction: ltr !important; } }
+/* Set a $size margin to all sides at $breakpoint */
+.m-0 { margin: 0 !important; }
+
+/* Set a $size margin on the top at $breakpoint */
+.mt-0 { margin-top: 0 !important; }
+
+/* Set a $size margin on the right at $breakpoint */
+.mr-0 { margin-right: 0 !important; }
+
+/* Set a $size margin on the bottom at $breakpoint */
+.mb-0 { margin-bottom: 0 !important; }
+
+/* Set a $size margin on the left at $breakpoint */
+.ml-0 { margin-left: 0 !important; }
+
+/* Set a $size margin on the left & right at $breakpoint */
+.mx-0 { margin-right: 0 !important; margin-left: 0 !important; }
+
+/* Set a $size margin on the top & bottom at $breakpoint */
+.my-0 { margin-top: 0 !important; margin-bottom: 0 !important; }
+
+/* Set a $size margin to all sides at $breakpoint */
+.m-1 { margin: 4px !important; }
+
+/* Set a $size margin on the top at $breakpoint */
+.mt-1 { margin-top: 4px !important; }
+
+/* Set a $size margin on the right at $breakpoint */
+.mr-1 { margin-right: 4px !important; }
+
+/* Set a $size margin on the bottom at $breakpoint */
+.mb-1 { margin-bottom: 4px !important; }
+
+/* Set a $size margin on the left at $breakpoint */
+.ml-1 { margin-left: 4px !important; }
+
+/* Set a negative $size margin on top at $breakpoint */
+.mt-n1 { margin-top: -4px !important; }
+
+/* Set a negative $size margin on the right at $breakpoint */
+.mr-n1 { margin-right: -4px !important; }
+
+/* Set a negative $size margin on the bottom at $breakpoint */
+.mb-n1 { margin-bottom: -4px !important; }
+
+/* Set a negative $size margin on the left at $breakpoint */
+.ml-n1 { margin-left: -4px !important; }
+
+/* Set a $size margin on the left & right at $breakpoint */
+.mx-1 { margin-right: 4px !important; margin-left: 4px !important; }
+
+/* Set a $size margin on the top & bottom at $breakpoint */
+.my-1 { margin-top: 4px !important; margin-bottom: 4px !important; }
+
+/* Set a $size margin to all sides at $breakpoint */
+.m-2 { margin: 8px !important; }
+
+/* Set a $size margin on the top at $breakpoint */
+.mt-2 { margin-top: 8px !important; }
+
+/* Set a $size margin on the right at $breakpoint */
+.mr-2 { margin-right: 8px !important; }
+
+/* Set a $size margin on the bottom at $breakpoint */
+.mb-2 { margin-bottom: 8px !important; }
+
+/* Set a $size margin on the left at $breakpoint */
+.ml-2 { margin-left: 8px !important; }
+
+/* Set a negative $size margin on top at $breakpoint */
+.mt-n2 { margin-top: -8px !important; }
+
+/* Set a negative $size margin on the right at $breakpoint */
+.mr-n2 { margin-right: -8px !important; }
+
+/* Set a negative $size margin on the bottom at $breakpoint */
+.mb-n2 { margin-bottom: -8px !important; }
+
+/* Set a negative $size margin on the left at $breakpoint */
+.ml-n2 { margin-left: -8px !important; }
+
+/* Set a $size margin on the left & right at $breakpoint */
+.mx-2 { margin-right: 8px !important; margin-left: 8px !important; }
+
+/* Set a $size margin on the top & bottom at $breakpoint */
+.my-2 { margin-top: 8px !important; margin-bottom: 8px !important; }
+
+/* Set a $size margin to all sides at $breakpoint */
+.m-3 { margin: 16px !important; }
+
+/* Set a $size margin on the top at $breakpoint */
+.mt-3 { margin-top: 16px !important; }
+
+/* Set a $size margin on the right at $breakpoint */
+.mr-3 { margin-right: 16px !important; }
+
+/* Set a $size margin on the bottom at $breakpoint */
+.mb-3 { margin-bottom: 16px !important; }
+
+/* Set a $size margin on the left at $breakpoint */
+.ml-3 { margin-left: 16px !important; }
+
+/* Set a negative $size margin on top at $breakpoint */
+.mt-n3 { margin-top: -16px !important; }
+
+/* Set a negative $size margin on the right at $breakpoint */
+.mr-n3 { margin-right: -16px !important; }
+
+/* Set a negative $size margin on the bottom at $breakpoint */
+.mb-n3 { margin-bottom: -16px !important; }
+
+/* Set a negative $size margin on the left at $breakpoint */
+.ml-n3 { margin-left: -16px !important; }
+
+/* Set a $size margin on the left & right at $breakpoint */
+.mx-3 { margin-right: 16px !important; margin-left: 16px !important; }
+
+/* Set a $size margin on the top & bottom at $breakpoint */
+.my-3 { margin-top: 16px !important; margin-bottom: 16px !important; }
+
+/* Set a $size margin to all sides at $breakpoint */
+.m-4 { margin: 24px !important; }
+
+/* Set a $size margin on the top at $breakpoint */
+.mt-4 { margin-top: 24px !important; }
+
+/* Set a $size margin on the right at $breakpoint */
+.mr-4 { margin-right: 24px !important; }
+
+/* Set a $size margin on the bottom at $breakpoint */
+.mb-4 { margin-bottom: 24px !important; }
+
+/* Set a $size margin on the left at $breakpoint */
+.ml-4 { margin-left: 24px !important; }
+
+/* Set a negative $size margin on top at $breakpoint */
+.mt-n4 { margin-top: -24px !important; }
+
+/* Set a negative $size margin on the right at $breakpoint */
+.mr-n4 { margin-right: -24px !important; }
+
+/* Set a negative $size margin on the bottom at $breakpoint */
+.mb-n4 { margin-bottom: -24px !important; }
+
+/* Set a negative $size margin on the left at $breakpoint */
+.ml-n4 { margin-left: -24px !important; }
+
+/* Set a $size margin on the left & right at $breakpoint */
+.mx-4 { margin-right: 24px !important; margin-left: 24px !important; }
+
+/* Set a $size margin on the top & bottom at $breakpoint */
+.my-4 { margin-top: 24px !important; margin-bottom: 24px !important; }
+
+/* Set a $size margin to all sides at $breakpoint */
+.m-5 { margin: 32px !important; }
+
+/* Set a $size margin on the top at $breakpoint */
+.mt-5 { margin-top: 32px !important; }
+
+/* Set a $size margin on the right at $breakpoint */
+.mr-5 { margin-right: 32px !important; }
+
+/* Set a $size margin on the bottom at $breakpoint */
+.mb-5 { margin-bottom: 32px !important; }
+
+/* Set a $size margin on the left at $breakpoint */
+.ml-5 { margin-left: 32px !important; }
+
+/* Set a negative $size margin on top at $breakpoint */
+.mt-n5 { margin-top: -32px !important; }
+
+/* Set a negative $size margin on the right at $breakpoint */
+.mr-n5 { margin-right: -32px !important; }
+
+/* Set a negative $size margin on the bottom at $breakpoint */
+.mb-n5 { margin-bottom: -32px !important; }
+
+/* Set a negative $size margin on the left at $breakpoint */
+.ml-n5 { margin-left: -32px !important; }
+
+/* Set a $size margin on the left & right at $breakpoint */
+.mx-5 { margin-right: 32px !important; margin-left: 32px !important; }
+
+/* Set a $size margin on the top & bottom at $breakpoint */
+.my-5 { margin-top: 32px !important; margin-bottom: 32px !important; }
+
+/* Set a $size margin to all sides at $breakpoint */
+.m-6 { margin: 40px !important; }
+
+/* Set a $size margin on the top at $breakpoint */
+.mt-6 { margin-top: 40px !important; }
+
+/* Set a $size margin on the right at $breakpoint */
+.mr-6 { margin-right: 40px !important; }
+
+/* Set a $size margin on the bottom at $breakpoint */
+.mb-6 { margin-bottom: 40px !important; }
+
+/* Set a $size margin on the left at $breakpoint */
+.ml-6 { margin-left: 40px !important; }
+
+/* Set a negative $size margin on top at $breakpoint */
+.mt-n6 { margin-top: -40px !important; }
+
+/* Set a negative $size margin on the right at $breakpoint */
+.mr-n6 { margin-right: -40px !important; }
+
+/* Set a negative $size margin on the bottom at $breakpoint */
+.mb-n6 { margin-bottom: -40px !important; }
+
+/* Set a negative $size margin on the left at $breakpoint */
+.ml-n6 { margin-left: -40px !important; }
+
+/* Set a $size margin on the left & right at $breakpoint */
+.mx-6 { margin-right: 40px !important; margin-left: 40px !important; }
+
+/* Set a $size margin on the top & bottom at $breakpoint */
+.my-6 { margin-top: 40px !important; margin-bottom: 40px !important; }
+
+/* responsive horizontal auto margins */
+.mx-auto { margin-right: auto !important; margin-left: auto !important; }
+
+@media (min-width: 544px) { /* Set a $size margin to all sides at $breakpoint */
+  .m-sm-0 { margin: 0 !important; }
+  /* Set a $size margin on the top at $breakpoint */
+  .mt-sm-0 { margin-top: 0 !important; }
+  /* Set a $size margin on the right at $breakpoint */
+  .mr-sm-0 { margin-right: 0 !important; }
+  /* Set a $size margin on the bottom at $breakpoint */
+  .mb-sm-0 { margin-bottom: 0 !important; }
+  /* Set a $size margin on the left at $breakpoint */
+  .ml-sm-0 { margin-left: 0 !important; }
+  /* Set a $size margin on the left & right at $breakpoint */
+  .mx-sm-0 { margin-right: 0 !important; margin-left: 0 !important; }
+  /* Set a $size margin on the top & bottom at $breakpoint */
+  .my-sm-0 { margin-top: 0 !important; margin-bottom: 0 !important; }
+  /* Set a $size margin to all sides at $breakpoint */
+  .m-sm-1 { margin: 4px !important; }
+  /* Set a $size margin on the top at $breakpoint */
+  .mt-sm-1 { margin-top: 4px !important; }
+  /* Set a $size margin on the right at $breakpoint */
+  .mr-sm-1 { margin-right: 4px !important; }
+  /* Set a $size margin on the bottom at $breakpoint */
+  .mb-sm-1 { margin-bottom: 4px !important; }
+  /* Set a $size margin on the left at $breakpoint */
+  .ml-sm-1 { margin-left: 4px !important; }
+  /* Set a negative $size margin on top at $breakpoint */
+  .mt-sm-n1 { margin-top: -4px !important; }
+  /* Set a negative $size margin on the right at $breakpoint */
+  .mr-sm-n1 { margin-right: -4px !important; }
+  /* Set a negative $size margin on the bottom at $breakpoint */
+  .mb-sm-n1 { margin-bottom: -4px !important; }
+  /* Set a negative $size margin on the left at $breakpoint */
+  .ml-sm-n1 { margin-left: -4px !important; }
+  /* Set a $size margin on the left & right at $breakpoint */
+  .mx-sm-1 { margin-right: 4px !important; margin-left: 4px !important; }
+  /* Set a $size margin on the top & bottom at $breakpoint */
+  .my-sm-1 { margin-top: 4px !important; margin-bottom: 4px !important; }
+  /* Set a $size margin to all sides at $breakpoint */
+  .m-sm-2 { margin: 8px !important; }
+  /* Set a $size margin on the top at $breakpoint */
+  .mt-sm-2 { margin-top: 8px !important; }
+  /* Set a $size margin on the right at $breakpoint */
+  .mr-sm-2 { margin-right: 8px !important; }
+  /* Set a $size margin on the bottom at $breakpoint */
+  .mb-sm-2 { margin-bottom: 8px !important; }
+  /* Set a $size margin on the left at $breakpoint */
+  .ml-sm-2 { margin-left: 8px !important; }
+  /* Set a negative $size margin on top at $breakpoint */
+  .mt-sm-n2 { margin-top: -8px !important; }
+  /* Set a negative $size margin on the right at $breakpoint */
+  .mr-sm-n2 { margin-right: -8px !important; }
+  /* Set a negative $size margin on the bottom at $breakpoint */
+  .mb-sm-n2 { margin-bottom: -8px !important; }
+  /* Set a negative $size margin on the left at $breakpoint */
+  .ml-sm-n2 { margin-left: -8px !important; }
+  /* Set a $size margin on the left & right at $breakpoint */
+  .mx-sm-2 { margin-right: 8px !important; margin-left: 8px !important; }
+  /* Set a $size margin on the top & bottom at $breakpoint */
+  .my-sm-2 { margin-top: 8px !important; margin-bottom: 8px !important; }
+  /* Set a $size margin to all sides at $breakpoint */
+  .m-sm-3 { margin: 16px !important; }
+  /* Set a $size margin on the top at $breakpoint */
+  .mt-sm-3 { margin-top: 16px !important; }
+  /* Set a $size margin on the right at $breakpoint */
+  .mr-sm-3 { margin-right: 16px !important; }
+  /* Set a $size margin on the bottom at $breakpoint */
+  .mb-sm-3 { margin-bottom: 16px !important; }
+  /* Set a $size margin on the left at $breakpoint */
+  .ml-sm-3 { margin-left: 16px !important; }
+  /* Set a negative $size margin on top at $breakpoint */
+  .mt-sm-n3 { margin-top: -16px !important; }
+  /* Set a negative $size margin on the right at $breakpoint */
+  .mr-sm-n3 { margin-right: -16px !important; }
+  /* Set a negative $size margin on the bottom at $breakpoint */
+  .mb-sm-n3 { margin-bottom: -16px !important; }
+  /* Set a negative $size margin on the left at $breakpoint */
+  .ml-sm-n3 { margin-left: -16px !important; }
+  /* Set a $size margin on the left & right at $breakpoint */
+  .mx-sm-3 { margin-right: 16px !important; margin-left: 16px !important; }
+  /* Set a $size margin on the top & bottom at $breakpoint */
+  .my-sm-3 { margin-top: 16px !important; margin-bottom: 16px !important; }
+  /* Set a $size margin to all sides at $breakpoint */
+  .m-sm-4 { margin: 24px !important; }
+  /* Set a $size margin on the top at $breakpoint */
+  .mt-sm-4 { margin-top: 24px !important; }
+  /* Set a $size margin on the right at $breakpoint */
+  .mr-sm-4 { margin-right: 24px !important; }
+  /* Set a $size margin on the bottom at $breakpoint */
+  .mb-sm-4 { margin-bottom: 24px !important; }
+  /* Set a $size margin on the left at $breakpoint */
+  .ml-sm-4 { margin-left: 24px !important; }
+  /* Set a negative $size margin on top at $breakpoint */
+  .mt-sm-n4 { margin-top: -24px !important; }
+  /* Set a negative $size margin on the right at $breakpoint */
+  .mr-sm-n4 { margin-right: -24px !important; }
+  /* Set a negative $size margin on the bottom at $breakpoint */
+  .mb-sm-n4 { margin-bottom: -24px !important; }
+  /* Set a negative $size margin on the left at $breakpoint */
+  .ml-sm-n4 { margin-left: -24px !important; }
+  /* Set a $size margin on the left & right at $breakpoint */
+  .mx-sm-4 { margin-right: 24px !important; margin-left: 24px !important; }
+  /* Set a $size margin on the top & bottom at $breakpoint */
+  .my-sm-4 { margin-top: 24px !important; margin-bottom: 24px !important; }
+  /* Set a $size margin to all sides at $breakpoint */
+  .m-sm-5 { margin: 32px !important; }
+  /* Set a $size margin on the top at $breakpoint */
+  .mt-sm-5 { margin-top: 32px !important; }
+  /* Set a $size margin on the right at $breakpoint */
+  .mr-sm-5 { margin-right: 32px !important; }
+  /* Set a $size margin on the bottom at $breakpoint */
+  .mb-sm-5 { margin-bottom: 32px !important; }
+  /* Set a $size margin on the left at $breakpoint */
+  .ml-sm-5 { margin-left: 32px !important; }
+  /* Set a negative $size margin on top at $breakpoint */
+  .mt-sm-n5 { margin-top: -32px !important; }
+  /* Set a negative $size margin on the right at $breakpoint */
+  .mr-sm-n5 { margin-right: -32px !important; }
+  /* Set a negative $size margin on the bottom at $breakpoint */
+  .mb-sm-n5 { margin-bottom: -32px !important; }
+  /* Set a negative $size margin on the left at $breakpoint */
+  .ml-sm-n5 { margin-left: -32px !important; }
+  /* Set a $size margin on the left & right at $breakpoint */
+  .mx-sm-5 { margin-right: 32px !important; margin-left: 32px !important; }
+  /* Set a $size margin on the top & bottom at $breakpoint */
+  .my-sm-5 { margin-top: 32px !important; margin-bottom: 32px !important; }
+  /* Set a $size margin to all sides at $breakpoint */
+  .m-sm-6 { margin: 40px !important; }
+  /* Set a $size margin on the top at $breakpoint */
+  .mt-sm-6 { margin-top: 40px !important; }
+  /* Set a $size margin on the right at $breakpoint */
+  .mr-sm-6 { margin-right: 40px !important; }
+  /* Set a $size margin on the bottom at $breakpoint */
+  .mb-sm-6 { margin-bottom: 40px !important; }
+  /* Set a $size margin on the left at $breakpoint */
+  .ml-sm-6 { margin-left: 40px !important; }
+  /* Set a negative $size margin on top at $breakpoint */
+  .mt-sm-n6 { margin-top: -40px !important; }
+  /* Set a negative $size margin on the right at $breakpoint */
+  .mr-sm-n6 { margin-right: -40px !important; }
+  /* Set a negative $size margin on the bottom at $breakpoint */
+  .mb-sm-n6 { margin-bottom: -40px !important; }
+  /* Set a negative $size margin on the left at $breakpoint */
+  .ml-sm-n6 { margin-left: -40px !important; }
+  /* Set a $size margin on the left & right at $breakpoint */
+  .mx-sm-6 { margin-right: 40px !important; margin-left: 40px !important; }
+  /* Set a $size margin on the top & bottom at $breakpoint */
+  .my-sm-6 { margin-top: 40px !important; margin-bottom: 40px !important; }
+  /* responsive horizontal auto margins */
+  .mx-sm-auto { margin-right: auto !important; margin-left: auto !important; } }
+@media (min-width: 768px) { /* Set a $size margin to all sides at $breakpoint */
+  .m-md-0 { margin: 0 !important; }
+  /* Set a $size margin on the top at $breakpoint */
+  .mt-md-0 { margin-top: 0 !important; }
+  /* Set a $size margin on the right at $breakpoint */
+  .mr-md-0 { margin-right: 0 !important; }
+  /* Set a $size margin on the bottom at $breakpoint */
+  .mb-md-0 { margin-bottom: 0 !important; }
+  /* Set a $size margin on the left at $breakpoint */
+  .ml-md-0 { margin-left: 0 !important; }
+  /* Set a $size margin on the left & right at $breakpoint */
+  .mx-md-0 { margin-right: 0 !important; margin-left: 0 !important; }
+  /* Set a $size margin on the top & bottom at $breakpoint */
+  .my-md-0 { margin-top: 0 !important; margin-bottom: 0 !important; }
+  /* Set a $size margin to all sides at $breakpoint */
+  .m-md-1 { margin: 4px !important; }
+  /* Set a $size margin on the top at $breakpoint */
+  .mt-md-1 { margin-top: 4px !important; }
+  /* Set a $size margin on the right at $breakpoint */
+  .mr-md-1 { margin-right: 4px !important; }
+  /* Set a $size margin on the bottom at $breakpoint */
+  .mb-md-1 { margin-bottom: 4px !important; }
+  /* Set a $size margin on the left at $breakpoint */
+  .ml-md-1 { margin-left: 4px !important; }
+  /* Set a negative $size margin on top at $breakpoint */
+  .mt-md-n1 { margin-top: -4px !important; }
+  /* Set a negative $size margin on the right at $breakpoint */
+  .mr-md-n1 { margin-right: -4px !important; }
+  /* Set a negative $size margin on the bottom at $breakpoint */
+  .mb-md-n1 { margin-bottom: -4px !important; }
+  /* Set a negative $size margin on the left at $breakpoint */
+  .ml-md-n1 { margin-left: -4px !important; }
+  /* Set a $size margin on the left & right at $breakpoint */
+  .mx-md-1 { margin-right: 4px !important; margin-left: 4px !important; }
+  /* Set a $size margin on the top & bottom at $breakpoint */
+  .my-md-1 { margin-top: 4px !important; margin-bottom: 4px !important; }
+  /* Set a $size margin to all sides at $breakpoint */
+  .m-md-2 { margin: 8px !important; }
+  /* Set a $size margin on the top at $breakpoint */
+  .mt-md-2 { margin-top: 8px !important; }
+  /* Set a $size margin on the right at $breakpoint */
+  .mr-md-2 { margin-right: 8px !important; }
+  /* Set a $size margin on the bottom at $breakpoint */
+  .mb-md-2 { margin-bottom: 8px !important; }
+  /* Set a $size margin on the left at $breakpoint */
+  .ml-md-2 { margin-left: 8px !important; }
+  /* Set a negative $size margin on top at $breakpoint */
+  .mt-md-n2 { margin-top: -8px !important; }
+  /* Set a negative $size margin on the right at $breakpoint */
+  .mr-md-n2 { margin-right: -8px !important; }
+  /* Set a negative $size margin on the bottom at $breakpoint */
+  .mb-md-n2 { margin-bottom: -8px !important; }
+  /* Set a negative $size margin on the left at $breakpoint */
+  .ml-md-n2 { margin-left: -8px !important; }
+  /* Set a $size margin on the left & right at $breakpoint */
+  .mx-md-2 { margin-right: 8px !important; margin-left: 8px !important; }
+  /* Set a $size margin on the top & bottom at $breakpoint */
+  .my-md-2 { margin-top: 8px !important; margin-bottom: 8px !important; }
+  /* Set a $size margin to all sides at $breakpoint */
+  .m-md-3 { margin: 16px !important; }
+  /* Set a $size margin on the top at $breakpoint */
+  .mt-md-3 { margin-top: 16px !important; }
+  /* Set a $size margin on the right at $breakpoint */
+  .mr-md-3 { margin-right: 16px !important; }
+  /* Set a $size margin on the bottom at $breakpoint */
+  .mb-md-3 { margin-bottom: 16px !important; }
+  /* Set a $size margin on the left at $breakpoint */
+  .ml-md-3 { margin-left: 16px !important; }
+  /* Set a negative $size margin on top at $breakpoint */
+  .mt-md-n3 { margin-top: -16px !important; }
+  /* Set a negative $size margin on the right at $breakpoint */
+  .mr-md-n3 { margin-right: -16px !important; }
+  /* Set a negative $size margin on the bottom at $breakpoint */
+  .mb-md-n3 { margin-bottom: -16px !important; }
+  /* Set a negative $size margin on the left at $breakpoint */
+  .ml-md-n3 { margin-left: -16px !important; }
+  /* Set a $size margin on the left & right at $breakpoint */
+  .mx-md-3 { margin-right: 16px !important; margin-left: 16px !important; }
+  /* Set a $size margin on the top & bottom at $breakpoint */
+  .my-md-3 { margin-top: 16px !important; margin-bottom: 16px !important; }
+  /* Set a $size margin to all sides at $breakpoint */
+  .m-md-4 { margin: 24px !important; }
+  /* Set a $size margin on the top at $breakpoint */
+  .mt-md-4 { margin-top: 24px !important; }
+  /* Set a $size margin on the right at $breakpoint */
+  .mr-md-4 { margin-right: 24px !important; }
+  /* Set a $size margin on the bottom at $breakpoint */
+  .mb-md-4 { margin-bottom: 24px !important; }
+  /* Set a $size margin on the left at $breakpoint */
+  .ml-md-4 { margin-left: 24px !important; }
+  /* Set a negative $size margin on top at $breakpoint */
+  .mt-md-n4 { margin-top: -24px !important; }
+  /* Set a negative $size margin on the right at $breakpoint */
+  .mr-md-n4 { margin-right: -24px !important; }
+  /* Set a negative $size margin on the bottom at $breakpoint */
+  .mb-md-n4 { margin-bottom: -24px !important; }
+  /* Set a negative $size margin on the left at $breakpoint */
+  .ml-md-n4 { margin-left: -24px !important; }
+  /* Set a $size margin on the left & right at $breakpoint */
+  .mx-md-4 { margin-right: 24px !important; margin-left: 24px !important; }
+  /* Set a $size margin on the top & bottom at $breakpoint */
+  .my-md-4 { margin-top: 24px !important; margin-bottom: 24px !important; }
+  /* Set a $size margin to all sides at $breakpoint */
+  .m-md-5 { margin: 32px !important; }
+  /* Set a $size margin on the top at $breakpoint */
+  .mt-md-5 { margin-top: 32px !important; }
+  /* Set a $size margin on the right at $breakpoint */
+  .mr-md-5 { margin-right: 32px !important; }
+  /* Set a $size margin on the bottom at $breakpoint */
+  .mb-md-5 { margin-bottom: 32px !important; }
+  /* Set a $size margin on the left at $breakpoint */
+  .ml-md-5 { margin-left: 32px !important; }
+  /* Set a negative $size margin on top at $breakpoint */
+  .mt-md-n5 { margin-top: -32px !important; }
+  /* Set a negative $size margin on the right at $breakpoint */
+  .mr-md-n5 { margin-right: -32px !important; }
+  /* Set a negative $size margin on the bottom at $breakpoint */
+  .mb-md-n5 { margin-bottom: -32px !important; }
+  /* Set a negative $size margin on the left at $breakpoint */
+  .ml-md-n5 { margin-left: -32px !important; }
+  /* Set a $size margin on the left & right at $breakpoint */
+  .mx-md-5 { margin-right: 32px !important; margin-left: 32px !important; }
+  /* Set a $size margin on the top & bottom at $breakpoint */
+  .my-md-5 { margin-top: 32px !important; margin-bottom: 32px !important; }
+  /* Set a $size margin to all sides at $breakpoint */
+  .m-md-6 { margin: 40px !important; }
+  /* Set a $size margin on the top at $breakpoint */
+  .mt-md-6 { margin-top: 40px !important; }
+  /* Set a $size margin on the right at $breakpoint */
+  .mr-md-6 { margin-right: 40px !important; }
+  /* Set a $size margin on the bottom at $breakpoint */
+  .mb-md-6 { margin-bottom: 40px !important; }
+  /* Set a $size margin on the left at $breakpoint */
+  .ml-md-6 { margin-left: 40px !important; }
+  /* Set a negative $size margin on top at $breakpoint */
+  .mt-md-n6 { margin-top: -40px !important; }
+  /* Set a negative $size margin on the right at $breakpoint */
+  .mr-md-n6 { margin-right: -40px !important; }
+  /* Set a negative $size margin on the bottom at $breakpoint */
+  .mb-md-n6 { margin-bottom: -40px !important; }
+  /* Set a negative $size margin on the left at $breakpoint */
+  .ml-md-n6 { margin-left: -40px !important; }
+  /* Set a $size margin on the left & right at $breakpoint */
+  .mx-md-6 { margin-right: 40px !important; margin-left: 40px !important; }
+  /* Set a $size margin on the top & bottom at $breakpoint */
+  .my-md-6 { margin-top: 40px !important; margin-bottom: 40px !important; }
+  /* responsive horizontal auto margins */
+  .mx-md-auto { margin-right: auto !important; margin-left: auto !important; } }
+@media (min-width: 1012px) { /* Set a $size margin to all sides at $breakpoint */
+  .m-lg-0 { margin: 0 !important; }
+  /* Set a $size margin on the top at $breakpoint */
+  .mt-lg-0 { margin-top: 0 !important; }
+  /* Set a $size margin on the right at $breakpoint */
+  .mr-lg-0 { margin-right: 0 !important; }
+  /* Set a $size margin on the bottom at $breakpoint */
+  .mb-lg-0 { margin-bottom: 0 !important; }
+  /* Set a $size margin on the left at $breakpoint */
+  .ml-lg-0 { margin-left: 0 !important; }
+  /* Set a $size margin on the left & right at $breakpoint */
+  .mx-lg-0 { margin-right: 0 !important; margin-left: 0 !important; }
+  /* Set a $size margin on the top & bottom at $breakpoint */
+  .my-lg-0 { margin-top: 0 !important; margin-bottom: 0 !important; }
+  /* Set a $size margin to all sides at $breakpoint */
+  .m-lg-1 { margin: 4px !important; }
+  /* Set a $size margin on the top at $breakpoint */
+  .mt-lg-1 { margin-top: 4px !important; }
+  /* Set a $size margin on the right at $breakpoint */
+  .mr-lg-1 { margin-right: 4px !important; }
+  /* Set a $size margin on the bottom at $breakpoint */
+  .mb-lg-1 { margin-bottom: 4px !important; }
+  /* Set a $size margin on the left at $breakpoint */
+  .ml-lg-1 { margin-left: 4px !important; }
+  /* Set a negative $size margin on top at $breakpoint */
+  .mt-lg-n1 { margin-top: -4px !important; }
+  /* Set a negative $size margin on the right at $breakpoint */
+  .mr-lg-n1 { margin-right: -4px !important; }
+  /* Set a negative $size margin on the bottom at $breakpoint */
+  .mb-lg-n1 { margin-bottom: -4px !important; }
+  /* Set a negative $size margin on the left at $breakpoint */
+  .ml-lg-n1 { margin-left: -4px !important; }
+  /* Set a $size margin on the left & right at $breakpoint */
+  .mx-lg-1 { margin-right: 4px !important; margin-left: 4px !important; }
+  /* Set a $size margin on the top & bottom at $breakpoint */
+  .my-lg-1 { margin-top: 4px !important; margin-bottom: 4px !important; }
+  /* Set a $size margin to all sides at $breakpoint */
+  .m-lg-2 { margin: 8px !important; }
+  /* Set a $size margin on the top at $breakpoint */
+  .mt-lg-2 { margin-top: 8px !important; }
+  /* Set a $size margin on the right at $breakpoint */
+  .mr-lg-2 { margin-right: 8px !important; }
+  /* Set a $size margin on the bottom at $breakpoint */
+  .mb-lg-2 { margin-bottom: 8px !important; }
+  /* Set a $size margin on the left at $breakpoint */
+  .ml-lg-2 { margin-left: 8px !important; }
+  /* Set a negative $size margin on top at $breakpoint */
+  .mt-lg-n2 { margin-top: -8px !important; }
+  /* Set a negative $size margin on the right at $breakpoint */
+  .mr-lg-n2 { margin-right: -8px !important; }
+  /* Set a negative $size margin on the bottom at $breakpoint */
+  .mb-lg-n2 { margin-bottom: -8px !important; }
+  /* Set a negative $size margin on the left at $breakpoint */
+  .ml-lg-n2 { margin-left: -8px !important; }
+  /* Set a $size margin on the left & right at $breakpoint */
+  .mx-lg-2 { margin-right: 8px !important; margin-left: 8px !important; }
+  /* Set a $size margin on the top & bottom at $breakpoint */
+  .my-lg-2 { margin-top: 8px !important; margin-bottom: 8px !important; }
+  /* Set a $size margin to all sides at $breakpoint */
+  .m-lg-3 { margin: 16px !important; }
+  /* Set a $size margin on the top at $breakpoint */
+  .mt-lg-3 { margin-top: 16px !important; }
+  /* Set a $size margin on the right at $breakpoint */
+  .mr-lg-3 { margin-right: 16px !important; }
+  /* Set a $size margin on the bottom at $breakpoint */
+  .mb-lg-3 { margin-bottom: 16px !important; }
+  /* Set a $size margin on the left at $breakpoint */
+  .ml-lg-3 { margin-left: 16px !important; }
+  /* Set a negative $size margin on top at $breakpoint */
+  .mt-lg-n3 { margin-top: -16px !important; }
+  /* Set a negative $size margin on the right at $breakpoint */
+  .mr-lg-n3 { margin-right: -16px !important; }
+  /* Set a negative $size margin on the bottom at $breakpoint */
+  .mb-lg-n3 { margin-bottom: -16px !important; }
+  /* Set a negative $size margin on the left at $breakpoint */
+  .ml-lg-n3 { margin-left: -16px !important; }
+  /* Set a $size margin on the left & right at $breakpoint */
+  .mx-lg-3 { margin-right: 16px !important; margin-left: 16px !important; }
+  /* Set a $size margin on the top & bottom at $breakpoint */
+  .my-lg-3 { margin-top: 16px !important; margin-bottom: 16px !important; }
+  /* Set a $size margin to all sides at $breakpoint */
+  .m-lg-4 { margin: 24px !important; }
+  /* Set a $size margin on the top at $breakpoint */
+  .mt-lg-4 { margin-top: 24px !important; }
+  /* Set a $size margin on the right at $breakpoint */
+  .mr-lg-4 { margin-right: 24px !important; }
+  /* Set a $size margin on the bottom at $breakpoint */
+  .mb-lg-4 { margin-bottom: 24px !important; }
+  /* Set a $size margin on the left at $breakpoint */
+  .ml-lg-4 { margin-left: 24px !important; }
+  /* Set a negative $size margin on top at $breakpoint */
+  .mt-lg-n4 { margin-top: -24px !important; }
+  /* Set a negative $size margin on the right at $breakpoint */
+  .mr-lg-n4 { margin-right: -24px !important; }
+  /* Set a negative $size margin on the bottom at $breakpoint */
+  .mb-lg-n4 { margin-bottom: -24px !important; }
+  /* Set a negative $size margin on the left at $breakpoint */
+  .ml-lg-n4 { margin-left: -24px !important; }
+  /* Set a $size margin on the left & right at $breakpoint */
+  .mx-lg-4 { margin-right: 24px !important; margin-left: 24px !important; }
+  /* Set a $size margin on the top & bottom at $breakpoint */
+  .my-lg-4 { margin-top: 24px !important; margin-bottom: 24px !important; }
+  /* Set a $size margin to all sides at $breakpoint */
+  .m-lg-5 { margin: 32px !important; }
+  /* Set a $size margin on the top at $breakpoint */
+  .mt-lg-5 { margin-top: 32px !important; }
+  /* Set a $size margin on the right at $breakpoint */
+  .mr-lg-5 { margin-right: 32px !important; }
+  /* Set a $size margin on the bottom at $breakpoint */
+  .mb-lg-5 { margin-bottom: 32px !important; }
+  /* Set a $size margin on the left at $breakpoint */
+  .ml-lg-5 { margin-left: 32px !important; }
+  /* Set a negative $size margin on top at $breakpoint */
+  .mt-lg-n5 { margin-top: -32px !important; }
+  /* Set a negative $size margin on the right at $breakpoint */
+  .mr-lg-n5 { margin-right: -32px !important; }
+  /* Set a negative $size margin on the bottom at $breakpoint */
+  .mb-lg-n5 { margin-bottom: -32px !important; }
+  /* Set a negative $size margin on the left at $breakpoint */
+  .ml-lg-n5 { margin-left: -32px !important; }
+  /* Set a $size margin on the left & right at $breakpoint */
+  .mx-lg-5 { margin-right: 32px !important; margin-left: 32px !important; }
+  /* Set a $size margin on the top & bottom at $breakpoint */
+  .my-lg-5 { margin-top: 32px !important; margin-bottom: 32px !important; }
+  /* Set a $size margin to all sides at $breakpoint */
+  .m-lg-6 { margin: 40px !important; }
+  /* Set a $size margin on the top at $breakpoint */
+  .mt-lg-6 { margin-top: 40px !important; }
+  /* Set a $size margin on the right at $breakpoint */
+  .mr-lg-6 { margin-right: 40px !important; }
+  /* Set a $size margin on the bottom at $breakpoint */
+  .mb-lg-6 { margin-bottom: 40px !important; }
+  /* Set a $size margin on the left at $breakpoint */
+  .ml-lg-6 { margin-left: 40px !important; }
+  /* Set a negative $size margin on top at $breakpoint */
+  .mt-lg-n6 { margin-top: -40px !important; }
+  /* Set a negative $size margin on the right at $breakpoint */
+  .mr-lg-n6 { margin-right: -40px !important; }
+  /* Set a negative $size margin on the bottom at $breakpoint */
+  .mb-lg-n6 { margin-bottom: -40px !important; }
+  /* Set a negative $size margin on the left at $breakpoint */
+  .ml-lg-n6 { margin-left: -40px !important; }
+  /* Set a $size margin on the left & right at $breakpoint */
+  .mx-lg-6 { margin-right: 40px !important; margin-left: 40px !important; }
+  /* Set a $size margin on the top & bottom at $breakpoint */
+  .my-lg-6 { margin-top: 40px !important; margin-bottom: 40px !important; }
+  /* responsive horizontal auto margins */
+  .mx-lg-auto { margin-right: auto !important; margin-left: auto !important; } }
+@media (min-width: 1280px) { /* Set a $size margin to all sides at $breakpoint */
+  .m-xl-0 { margin: 0 !important; }
+  /* Set a $size margin on the top at $breakpoint */
+  .mt-xl-0 { margin-top: 0 !important; }
+  /* Set a $size margin on the right at $breakpoint */
+  .mr-xl-0 { margin-right: 0 !important; }
+  /* Set a $size margin on the bottom at $breakpoint */
+  .mb-xl-0 { margin-bottom: 0 !important; }
+  /* Set a $size margin on the left at $breakpoint */
+  .ml-xl-0 { margin-left: 0 !important; }
+  /* Set a $size margin on the left & right at $breakpoint */
+  .mx-xl-0 { margin-right: 0 !important; margin-left: 0 !important; }
+  /* Set a $size margin on the top & bottom at $breakpoint */
+  .my-xl-0 { margin-top: 0 !important; margin-bottom: 0 !important; }
+  /* Set a $size margin to all sides at $breakpoint */
+  .m-xl-1 { margin: 4px !important; }
+  /* Set a $size margin on the top at $breakpoint */
+  .mt-xl-1 { margin-top: 4px !important; }
+  /* Set a $size margin on the right at $breakpoint */
+  .mr-xl-1 { margin-right: 4px !important; }
+  /* Set a $size margin on the bottom at $breakpoint */
+  .mb-xl-1 { margin-bottom: 4px !important; }
+  /* Set a $size margin on the left at $breakpoint */
+  .ml-xl-1 { margin-left: 4px !important; }
+  /* Set a negative $size margin on top at $breakpoint */
+  .mt-xl-n1 { margin-top: -4px !important; }
+  /* Set a negative $size margin on the right at $breakpoint */
+  .mr-xl-n1 { margin-right: -4px !important; }
+  /* Set a negative $size margin on the bottom at $breakpoint */
+  .mb-xl-n1 { margin-bottom: -4px !important; }
+  /* Set a negative $size margin on the left at $breakpoint */
+  .ml-xl-n1 { margin-left: -4px !important; }
+  /* Set a $size margin on the left & right at $breakpoint */
+  .mx-xl-1 { margin-right: 4px !important; margin-left: 4px !important; }
+  /* Set a $size margin on the top & bottom at $breakpoint */
+  .my-xl-1 { margin-top: 4px !important; margin-bottom: 4px !important; }
+  /* Set a $size margin to all sides at $breakpoint */
+  .m-xl-2 { margin: 8px !important; }
+  /* Set a $size margin on the top at $breakpoint */
+  .mt-xl-2 { margin-top: 8px !important; }
+  /* Set a $size margin on the right at $breakpoint */
+  .mr-xl-2 { margin-right: 8px !important; }
+  /* Set a $size margin on the bottom at $breakpoint */
+  .mb-xl-2 { margin-bottom: 8px !important; }
+  /* Set a $size margin on the left at $breakpoint */
+  .ml-xl-2 { margin-left: 8px !important; }
+  /* Set a negative $size margin on top at $breakpoint */
+  .mt-xl-n2 { margin-top: -8px !important; }
+  /* Set a negative $size margin on the right at $breakpoint */
+  .mr-xl-n2 { margin-right: -8px !important; }
+  /* Set a negative $size margin on the bottom at $breakpoint */
+  .mb-xl-n2 { margin-bottom: -8px !important; }
+  /* Set a negative $size margin on the left at $breakpoint */
+  .ml-xl-n2 { margin-left: -8px !important; }
+  /* Set a $size margin on the left & right at $breakpoint */
+  .mx-xl-2 { margin-right: 8px !important; margin-left: 8px !important; }
+  /* Set a $size margin on the top & bottom at $breakpoint */
+  .my-xl-2 { margin-top: 8px !important; margin-bottom: 8px !important; }
+  /* Set a $size margin to all sides at $breakpoint */
+  .m-xl-3 { margin: 16px !important; }
+  /* Set a $size margin on the top at $breakpoint */
+  .mt-xl-3 { margin-top: 16px !important; }
+  /* Set a $size margin on the right at $breakpoint */
+  .mr-xl-3 { margin-right: 16px !important; }
+  /* Set a $size margin on the bottom at $breakpoint */
+  .mb-xl-3 { margin-bottom: 16px !important; }
+  /* Set a $size margin on the left at $breakpoint */
+  .ml-xl-3 { margin-left: 16px !important; }
+  /* Set a negative $size margin on top at $breakpoint */
+  .mt-xl-n3 { margin-top: -16px !important; }
+  /* Set a negative $size margin on the right at $breakpoint */
+  .mr-xl-n3 { margin-right: -16px !important; }
+  /* Set a negative $size margin on the bottom at $breakpoint */
+  .mb-xl-n3 { margin-bottom: -16px !important; }
+  /* Set a negative $size margin on the left at $breakpoint */
+  .ml-xl-n3 { margin-left: -16px !important; }
+  /* Set a $size margin on the left & right at $breakpoint */
+  .mx-xl-3 { margin-right: 16px !important; margin-left: 16px !important; }
+  /* Set a $size margin on the top & bottom at $breakpoint */
+  .my-xl-3 { margin-top: 16px !important; margin-bottom: 16px !important; }
+  /* Set a $size margin to all sides at $breakpoint */
+  .m-xl-4 { margin: 24px !important; }
+  /* Set a $size margin on the top at $breakpoint */
+  .mt-xl-4 { margin-top: 24px !important; }
+  /* Set a $size margin on the right at $breakpoint */
+  .mr-xl-4 { margin-right: 24px !important; }
+  /* Set a $size margin on the bottom at $breakpoint */
+  .mb-xl-4 { margin-bottom: 24px !important; }
+  /* Set a $size margin on the left at $breakpoint */
+  .ml-xl-4 { margin-left: 24px !important; }
+  /* Set a negative $size margin on top at $breakpoint */
+  .mt-xl-n4 { margin-top: -24px !important; }
+  /* Set a negative $size margin on the right at $breakpoint */
+  .mr-xl-n4 { margin-right: -24px !important; }
+  /* Set a negative $size margin on the bottom at $breakpoint */
+  .mb-xl-n4 { margin-bottom: -24px !important; }
+  /* Set a negative $size margin on the left at $breakpoint */
+  .ml-xl-n4 { margin-left: -24px !important; }
+  /* Set a $size margin on the left & right at $breakpoint */
+  .mx-xl-4 { margin-right: 24px !important; margin-left: 24px !important; }
+  /* Set a $size margin on the top & bottom at $breakpoint */
+  .my-xl-4 { margin-top: 24px !important; margin-bottom: 24px !important; }
+  /* Set a $size margin to all sides at $breakpoint */
+  .m-xl-5 { margin: 32px !important; }
+  /* Set a $size margin on the top at $breakpoint */
+  .mt-xl-5 { margin-top: 32px !important; }
+  /* Set a $size margin on the right at $breakpoint */
+  .mr-xl-5 { margin-right: 32px !important; }
+  /* Set a $size margin on the bottom at $breakpoint */
+  .mb-xl-5 { margin-bottom: 32px !important; }
+  /* Set a $size margin on the left at $breakpoint */
+  .ml-xl-5 { margin-left: 32px !important; }
+  /* Set a negative $size margin on top at $breakpoint */
+  .mt-xl-n5 { margin-top: -32px !important; }
+  /* Set a negative $size margin on the right at $breakpoint */
+  .mr-xl-n5 { margin-right: -32px !important; }
+  /* Set a negative $size margin on the bottom at $breakpoint */
+  .mb-xl-n5 { margin-bottom: -32px !important; }
+  /* Set a negative $size margin on the left at $breakpoint */
+  .ml-xl-n5 { margin-left: -32px !important; }
+  /* Set a $size margin on the left & right at $breakpoint */
+  .mx-xl-5 { margin-right: 32px !important; margin-left: 32px !important; }
+  /* Set a $size margin on the top & bottom at $breakpoint */
+  .my-xl-5 { margin-top: 32px !important; margin-bottom: 32px !important; }
+  /* Set a $size margin to all sides at $breakpoint */
+  .m-xl-6 { margin: 40px !important; }
+  /* Set a $size margin on the top at $breakpoint */
+  .mt-xl-6 { margin-top: 40px !important; }
+  /* Set a $size margin on the right at $breakpoint */
+  .mr-xl-6 { margin-right: 40px !important; }
+  /* Set a $size margin on the bottom at $breakpoint */
+  .mb-xl-6 { margin-bottom: 40px !important; }
+  /* Set a $size margin on the left at $breakpoint */
+  .ml-xl-6 { margin-left: 40px !important; }
+  /* Set a negative $size margin on top at $breakpoint */
+  .mt-xl-n6 { margin-top: -40px !important; }
+  /* Set a negative $size margin on the right at $breakpoint */
+  .mr-xl-n6 { margin-right: -40px !important; }
+  /* Set a negative $size margin on the bottom at $breakpoint */
+  .mb-xl-n6 { margin-bottom: -40px !important; }
+  /* Set a negative $size margin on the left at $breakpoint */
+  .ml-xl-n6 { margin-left: -40px !important; }
+  /* Set a $size margin on the left & right at $breakpoint */
+  .mx-xl-6 { margin-right: 40px !important; margin-left: 40px !important; }
+  /* Set a $size margin on the top & bottom at $breakpoint */
+  .my-xl-6 { margin-top: 40px !important; margin-bottom: 40px !important; }
+  /* responsive horizontal auto margins */
+  .mx-xl-auto { margin-right: auto !important; margin-left: auto !important; } }
+/* Set a $size padding to all sides at $breakpoint */
+.p-0 { padding: 0 !important; }
+
+/* Set a $size padding to the top at $breakpoint */
+.pt-0 { padding-top: 0 !important; }
+
+/* Set a $size padding to the right at $breakpoint */
+.pr-0 { padding-right: 0 !important; }
+
+/* Set a $size padding to the bottom at $breakpoint */
+.pb-0 { padding-bottom: 0 !important; }
+
+/* Set a $size padding to the left at $breakpoint */
+.pl-0 { padding-left: 0 !important; }
+
+/* Set a $size padding to the left & right at $breakpoint */
+.px-0 { padding-right: 0 !important; padding-left: 0 !important; }
+
+/* Set a $size padding to the top & bottom at $breakpoint */
+.py-0 { padding-top: 0 !important; padding-bottom: 0 !important; }
+
+/* Set a $size padding to all sides at $breakpoint */
+.p-1 { padding: 4px !important; }
+
+/* Set a $size padding to the top at $breakpoint */
+.pt-1 { padding-top: 4px !important; }
+
+/* Set a $size padding to the right at $breakpoint */
+.pr-1 { padding-right: 4px !important; }
+
+/* Set a $size padding to the bottom at $breakpoint */
+.pb-1 { padding-bottom: 4px !important; }
+
+/* Set a $size padding to the left at $breakpoint */
+.pl-1 { padding-left: 4px !important; }
+
+/* Set a $size padding to the left & right at $breakpoint */
+.px-1 { padding-right: 4px !important; padding-left: 4px !important; }
+
+/* Set a $size padding to the top & bottom at $breakpoint */
+.py-1 { padding-top: 4px !important; padding-bottom: 4px !important; }
+
+/* Set a $size padding to all sides at $breakpoint */
+.p-2 { padding: 8px !important; }
+
+/* Set a $size padding to the top at $breakpoint */
+.pt-2 { padding-top: 8px !important; }
+
+/* Set a $size padding to the right at $breakpoint */
+.pr-2 { padding-right: 8px !important; }
+
+/* Set a $size padding to the bottom at $breakpoint */
+.pb-2 { padding-bottom: 8px !important; }
+
+/* Set a $size padding to the left at $breakpoint */
+.pl-2 { padding-left: 8px !important; }
+
+/* Set a $size padding to the left & right at $breakpoint */
+.px-2 { padding-right: 8px !important; padding-left: 8px !important; }
+
+/* Set a $size padding to the top & bottom at $breakpoint */
+.py-2 { padding-top: 8px !important; padding-bottom: 8px !important; }
+
+/* Set a $size padding to all sides at $breakpoint */
+.p-3 { padding: 16px !important; }
+
+/* Set a $size padding to the top at $breakpoint */
+.pt-3 { padding-top: 16px !important; }
+
+/* Set a $size padding to the right at $breakpoint */
+.pr-3 { padding-right: 16px !important; }
+
+/* Set a $size padding to the bottom at $breakpoint */
+.pb-3 { padding-bottom: 16px !important; }
+
+/* Set a $size padding to the left at $breakpoint */
+.pl-3 { padding-left: 16px !important; }
+
+/* Set a $size padding to the left & right at $breakpoint */
+.px-3 { padding-right: 16px !important; padding-left: 16px !important; }
+
+/* Set a $size padding to the top & bottom at $breakpoint */
+.py-3 { padding-top: 16px !important; padding-bottom: 16px !important; }
+
+/* Set a $size padding to all sides at $breakpoint */
+.p-4 { padding: 24px !important; }
+
+/* Set a $size padding to the top at $breakpoint */
+.pt-4 { padding-top: 24px !important; }
+
+/* Set a $size padding to the right at $breakpoint */
+.pr-4 { padding-right: 24px !important; }
+
+/* Set a $size padding to the bottom at $breakpoint */
+.pb-4 { padding-bottom: 24px !important; }
+
+/* Set a $size padding to the left at $breakpoint */
+.pl-4 { padding-left: 24px !important; }
+
+/* Set a $size padding to the left & right at $breakpoint */
+.px-4 { padding-right: 24px !important; padding-left: 24px !important; }
+
+/* Set a $size padding to the top & bottom at $breakpoint */
+.py-4 { padding-top: 24px !important; padding-bottom: 24px !important; }
+
+/* Set a $size padding to all sides at $breakpoint */
+.p-5 { padding: 32px !important; }
+
+/* Set a $size padding to the top at $breakpoint */
+.pt-5 { padding-top: 32px !important; }
+
+/* Set a $size padding to the right at $breakpoint */
+.pr-5 { padding-right: 32px !important; }
+
+/* Set a $size padding to the bottom at $breakpoint */
+.pb-5 { padding-bottom: 32px !important; }
+
+/* Set a $size padding to the left at $breakpoint */
+.pl-5 { padding-left: 32px !important; }
+
+/* Set a $size padding to the left & right at $breakpoint */
+.px-5 { padding-right: 32px !important; padding-left: 32px !important; }
+
+/* Set a $size padding to the top & bottom at $breakpoint */
+.py-5 { padding-top: 32px !important; padding-bottom: 32px !important; }
+
+/* Set a $size padding to all sides at $breakpoint */
+.p-6 { padding: 40px !important; }
+
+/* Set a $size padding to the top at $breakpoint */
+.pt-6 { padding-top: 40px !important; }
+
+/* Set a $size padding to the right at $breakpoint */
+.pr-6 { padding-right: 40px !important; }
+
+/* Set a $size padding to the bottom at $breakpoint */
+.pb-6 { padding-bottom: 40px !important; }
+
+/* Set a $size padding to the left at $breakpoint */
+.pl-6 { padding-left: 40px !important; }
+
+/* Set a $size padding to the left & right at $breakpoint */
+.px-6 { padding-right: 40px !important; padding-left: 40px !important; }
+
+/* Set a $size padding to the top & bottom at $breakpoint */
+.py-6 { padding-top: 40px !important; padding-bottom: 40px !important; }
+
+@media (min-width: 544px) { /* Set a $size padding to all sides at $breakpoint */
+  .p-sm-0 { padding: 0 !important; }
+  /* Set a $size padding to the top at $breakpoint */
+  .pt-sm-0 { padding-top: 0 !important; }
+  /* Set a $size padding to the right at $breakpoint */
+  .pr-sm-0 { padding-right: 0 !important; }
+  /* Set a $size padding to the bottom at $breakpoint */
+  .pb-sm-0 { padding-bottom: 0 !important; }
+  /* Set a $size padding to the left at $breakpoint */
+  .pl-sm-0 { padding-left: 0 !important; }
+  /* Set a $size padding to the left & right at $breakpoint */
+  .px-sm-0 { padding-right: 0 !important; padding-left: 0 !important; }
+  /* Set a $size padding to the top & bottom at $breakpoint */
+  .py-sm-0 { padding-top: 0 !important; padding-bottom: 0 !important; }
+  /* Set a $size padding to all sides at $breakpoint */
+  .p-sm-1 { padding: 4px !important; }
+  /* Set a $size padding to the top at $breakpoint */
+  .pt-sm-1 { padding-top: 4px !important; }
+  /* Set a $size padding to the right at $breakpoint */
+  .pr-sm-1 { padding-right: 4px !important; }
+  /* Set a $size padding to the bottom at $breakpoint */
+  .pb-sm-1 { padding-bottom: 4px !important; }
+  /* Set a $size padding to the left at $breakpoint */
+  .pl-sm-1 { padding-left: 4px !important; }
+  /* Set a $size padding to the left & right at $breakpoint */
+  .px-sm-1 { padding-right: 4px !important; padding-left: 4px !important; }
+  /* Set a $size padding to the top & bottom at $breakpoint */
+  .py-sm-1 { padding-top: 4px !important; padding-bottom: 4px !important; }
+  /* Set a $size padding to all sides at $breakpoint */
+  .p-sm-2 { padding: 8px !important; }
+  /* Set a $size padding to the top at $breakpoint */
+  .pt-sm-2 { padding-top: 8px !important; }
+  /* Set a $size padding to the right at $breakpoint */
+  .pr-sm-2 { padding-right: 8px !important; }
+  /* Set a $size padding to the bottom at $breakpoint */
+  .pb-sm-2 { padding-bottom: 8px !important; }
+  /* Set a $size padding to the left at $breakpoint */
+  .pl-sm-2 { padding-left: 8px !important; }
+  /* Set a $size padding to the left & right at $breakpoint */
+  .px-sm-2 { padding-right: 8px !important; padding-left: 8px !important; }
+  /* Set a $size padding to the top & bottom at $breakpoint */
+  .py-sm-2 { padding-top: 8px !important; padding-bottom: 8px !important; }
+  /* Set a $size padding to all sides at $breakpoint */
+  .p-sm-3 { padding: 16px !important; }
+  /* Set a $size padding to the top at $breakpoint */
+  .pt-sm-3 { padding-top: 16px !important; }
+  /* Set a $size padding to the right at $breakpoint */
+  .pr-sm-3 { padding-right: 16px !important; }
+  /* Set a $size padding to the bottom at $breakpoint */
+  .pb-sm-3 { padding-bottom: 16px !important; }
+  /* Set a $size padding to the left at $breakpoint */
+  .pl-sm-3 { padding-left: 16px !important; }
+  /* Set a $size padding to the left & right at $breakpoint */
+  .px-sm-3 { padding-right: 16px !important; padding-left: 16px !important; }
+  /* Set a $size padding to the top & bottom at $breakpoint */
+  .py-sm-3 { padding-top: 16px !important; padding-bottom: 16px !important; }
+  /* Set a $size padding to all sides at $breakpoint */
+  .p-sm-4 { padding: 24px !important; }
+  /* Set a $size padding to the top at $breakpoint */
+  .pt-sm-4 { padding-top: 24px !important; }
+  /* Set a $size padding to the right at $breakpoint */
+  .pr-sm-4 { padding-right: 24px !important; }
+  /* Set a $size padding to the bottom at $breakpoint */
+  .pb-sm-4 { padding-bottom: 24px !important; }
+  /* Set a $size padding to the left at $breakpoint */
+  .pl-sm-4 { padding-left: 24px !important; }
+  /* Set a $size padding to the left & right at $breakpoint */
+  .px-sm-4 { padding-right: 24px !important; padding-left: 24px !important; }
+  /* Set a $size padding to the top & bottom at $breakpoint */
+  .py-sm-4 { padding-top: 24px !important; padding-bottom: 24px !important; }
+  /* Set a $size padding to all sides at $breakpoint */
+  .p-sm-5 { padding: 32px !important; }
+  /* Set a $size padding to the top at $breakpoint */
+  .pt-sm-5 { padding-top: 32px !important; }
+  /* Set a $size padding to the right at $breakpoint */
+  .pr-sm-5 { padding-right: 32px !important; }
+  /* Set a $size padding to the bottom at $breakpoint */
+  .pb-sm-5 { padding-bottom: 32px !important; }
+  /* Set a $size padding to the left at $breakpoint */
+  .pl-sm-5 { padding-left: 32px !important; }
+  /* Set a $size padding to the left & right at $breakpoint */
+  .px-sm-5 { padding-right: 32px !important; padding-left: 32px !important; }
+  /* Set a $size padding to the top & bottom at $breakpoint */
+  .py-sm-5 { padding-top: 32px !important; padding-bottom: 32px !important; }
+  /* Set a $size padding to all sides at $breakpoint */
+  .p-sm-6 { padding: 40px !important; }
+  /* Set a $size padding to the top at $breakpoint */
+  .pt-sm-6 { padding-top: 40px !important; }
+  /* Set a $size padding to the right at $breakpoint */
+  .pr-sm-6 { padding-right: 40px !important; }
+  /* Set a $size padding to the bottom at $breakpoint */
+  .pb-sm-6 { padding-bottom: 40px !important; }
+  /* Set a $size padding to the left at $breakpoint */
+  .pl-sm-6 { padding-left: 40px !important; }
+  /* Set a $size padding to the left & right at $breakpoint */
+  .px-sm-6 { padding-right: 40px !important; padding-left: 40px !important; }
+  /* Set a $size padding to the top & bottom at $breakpoint */
+  .py-sm-6 { padding-top: 40px !important; padding-bottom: 40px !important; } }
+@media (min-width: 768px) { /* Set a $size padding to all sides at $breakpoint */
+  .p-md-0 { padding: 0 !important; }
+  /* Set a $size padding to the top at $breakpoint */
+  .pt-md-0 { padding-top: 0 !important; }
+  /* Set a $size padding to the right at $breakpoint */
+  .pr-md-0 { padding-right: 0 !important; }
+  /* Set a $size padding to the bottom at $breakpoint */
+  .pb-md-0 { padding-bottom: 0 !important; }
+  /* Set a $size padding to the left at $breakpoint */
+  .pl-md-0 { padding-left: 0 !important; }
+  /* Set a $size padding to the left & right at $breakpoint */
+  .px-md-0 { padding-right: 0 !important; padding-left: 0 !important; }
+  /* Set a $size padding to the top & bottom at $breakpoint */
+  .py-md-0 { padding-top: 0 !important; padding-bottom: 0 !important; }
+  /* Set a $size padding to all sides at $breakpoint */
+  .p-md-1 { padding: 4px !important; }
+  /* Set a $size padding to the top at $breakpoint */
+  .pt-md-1 { padding-top: 4px !important; }
+  /* Set a $size padding to the right at $breakpoint */
+  .pr-md-1 { padding-right: 4px !important; }
+  /* Set a $size padding to the bottom at $breakpoint */
+  .pb-md-1 { padding-bottom: 4px !important; }
+  /* Set a $size padding to the left at $breakpoint */
+  .pl-md-1 { padding-left: 4px !important; }
+  /* Set a $size padding to the left & right at $breakpoint */
+  .px-md-1 { padding-right: 4px !important; padding-left: 4px !important; }
+  /* Set a $size padding to the top & bottom at $breakpoint */
+  .py-md-1 { padding-top: 4px !important; padding-bottom: 4px !important; }
+  /* Set a $size padding to all sides at $breakpoint */
+  .p-md-2 { padding: 8px !important; }
+  /* Set a $size padding to the top at $breakpoint */
+  .pt-md-2 { padding-top: 8px !important; }
+  /* Set a $size padding to the right at $breakpoint */
+  .pr-md-2 { padding-right: 8px !important; }
+  /* Set a $size padding to the bottom at $breakpoint */
+  .pb-md-2 { padding-bottom: 8px !important; }
+  /* Set a $size padding to the left at $breakpoint */
+  .pl-md-2 { padding-left: 8px !important; }
+  /* Set a $size padding to the left & right at $breakpoint */
+  .px-md-2 { padding-right: 8px !important; padding-left: 8px !important; }
+  /* Set a $size padding to the top & bottom at $breakpoint */
+  .py-md-2 { padding-top: 8px !important; padding-bottom: 8px !important; }
+  /* Set a $size padding to all sides at $breakpoint */
+  .p-md-3 { padding: 16px !important; }
+  /* Set a $size padding to the top at $breakpoint */
+  .pt-md-3 { padding-top: 16px !important; }
+  /* Set a $size padding to the right at $breakpoint */
+  .pr-md-3 { padding-right: 16px !important; }
+  /* Set a $size padding to the bottom at $breakpoint */
+  .pb-md-3 { padding-bottom: 16px !important; }
+  /* Set a $size padding to the left at $breakpoint */
+  .pl-md-3 { padding-left: 16px !important; }
+  /* Set a $size padding to the left & right at $breakpoint */
+  .px-md-3 { padding-right: 16px !important; padding-left: 16px !important; }
+  /* Set a $size padding to the top & bottom at $breakpoint */
+  .py-md-3 { padding-top: 16px !important; padding-bottom: 16px !important; }
+  /* Set a $size padding to all sides at $breakpoint */
+  .p-md-4 { padding: 24px !important; }
+  /* Set a $size padding to the top at $breakpoint */
+  .pt-md-4 { padding-top: 24px !important; }
+  /* Set a $size padding to the right at $breakpoint */
+  .pr-md-4 { padding-right: 24px !important; }
+  /* Set a $size padding to the bottom at $breakpoint */
+  .pb-md-4 { padding-bottom: 24px !important; }
+  /* Set a $size padding to the left at $breakpoint */
+  .pl-md-4 { padding-left: 24px !important; }
+  /* Set a $size padding to the left & right at $breakpoint */
+  .px-md-4 { padding-right: 24px !important; padding-left: 24px !important; }
+  /* Set a $size padding to the top & bottom at $breakpoint */
+  .py-md-4 { padding-top: 24px !important; padding-bottom: 24px !important; }
+  /* Set a $size padding to all sides at $breakpoint */
+  .p-md-5 { padding: 32px !important; }
+  /* Set a $size padding to the top at $breakpoint */
+  .pt-md-5 { padding-top: 32px !important; }
+  /* Set a $size padding to the right at $breakpoint */
+  .pr-md-5 { padding-right: 32px !important; }
+  /* Set a $size padding to the bottom at $breakpoint */
+  .pb-md-5 { padding-bottom: 32px !important; }
+  /* Set a $size padding to the left at $breakpoint */
+  .pl-md-5 { padding-left: 32px !important; }
+  /* Set a $size padding to the left & right at $breakpoint */
+  .px-md-5 { padding-right: 32px !important; padding-left: 32px !important; }
+  /* Set a $size padding to the top & bottom at $breakpoint */
+  .py-md-5 { padding-top: 32px !important; padding-bottom: 32px !important; }
+  /* Set a $size padding to all sides at $breakpoint */
+  .p-md-6 { padding: 40px !important; }
+  /* Set a $size padding to the top at $breakpoint */
+  .pt-md-6 { padding-top: 40px !important; }
+  /* Set a $size padding to the right at $breakpoint */
+  .pr-md-6 { padding-right: 40px !important; }
+  /* Set a $size padding to the bottom at $breakpoint */
+  .pb-md-6 { padding-bottom: 40px !important; }
+  /* Set a $size padding to the left at $breakpoint */
+  .pl-md-6 { padding-left: 40px !important; }
+  /* Set a $size padding to the left & right at $breakpoint */
+  .px-md-6 { padding-right: 40px !important; padding-left: 40px !important; }
+  /* Set a $size padding to the top & bottom at $breakpoint */
+  .py-md-6 { padding-top: 40px !important; padding-bottom: 40px !important; } }
+@media (min-width: 1012px) { /* Set a $size padding to all sides at $breakpoint */
+  .p-lg-0 { padding: 0 !important; }
+  /* Set a $size padding to the top at $breakpoint */
+  .pt-lg-0 { padding-top: 0 !important; }
+  /* Set a $size padding to the right at $breakpoint */
+  .pr-lg-0 { padding-right: 0 !important; }
+  /* Set a $size padding to the bottom at $breakpoint */
+  .pb-lg-0 { padding-bottom: 0 !important; }
+  /* Set a $size padding to the left at $breakpoint */
+  .pl-lg-0 { padding-left: 0 !important; }
+  /* Set a $size padding to the left & right at $breakpoint */
+  .px-lg-0 { padding-right: 0 !important; padding-left: 0 !important; }
+  /* Set a $size padding to the top & bottom at $breakpoint */
+  .py-lg-0 { padding-top: 0 !important; padding-bottom: 0 !important; }
+  /* Set a $size padding to all sides at $breakpoint */
+  .p-lg-1 { padding: 4px !important; }
+  /* Set a $size padding to the top at $breakpoint */
+  .pt-lg-1 { padding-top: 4px !important; }
+  /* Set a $size padding to the right at $breakpoint */
+  .pr-lg-1 { padding-right: 4px !important; }
+  /* Set a $size padding to the bottom at $breakpoint */
+  .pb-lg-1 { padding-bottom: 4px !important; }
+  /* Set a $size padding to the left at $breakpoint */
+  .pl-lg-1 { padding-left: 4px !important; }
+  /* Set a $size padding to the left & right at $breakpoint */
+  .px-lg-1 { padding-right: 4px !important; padding-left: 4px !important; }
+  /* Set a $size padding to the top & bottom at $breakpoint */
+  .py-lg-1 { padding-top: 4px !important; padding-bottom: 4px !important; }
+  /* Set a $size padding to all sides at $breakpoint */
+  .p-lg-2 { padding: 8px !important; }
+  /* Set a $size padding to the top at $breakpoint */
+  .pt-lg-2 { padding-top: 8px !important; }
+  /* Set a $size padding to the right at $breakpoint */
+  .pr-lg-2 { padding-right: 8px !important; }
+  /* Set a $size padding to the bottom at $breakpoint */
+  .pb-lg-2 { padding-bottom: 8px !important; }
+  /* Set a $size padding to the left at $breakpoint */
+  .pl-lg-2 { padding-left: 8px !important; }
+  /* Set a $size padding to the left & right at $breakpoint */
+  .px-lg-2 { padding-right: 8px !important; padding-left: 8px !important; }
+  /* Set a $size padding to the top & bottom at $breakpoint */
+  .py-lg-2 { padding-top: 8px !important; padding-bottom: 8px !important; }
+  /* Set a $size padding to all sides at $breakpoint */
+  .p-lg-3 { padding: 16px !important; }
+  /* Set a $size padding to the top at $breakpoint */
+  .pt-lg-3 { padding-top: 16px !important; }
+  /* Set a $size padding to the right at $breakpoint */
+  .pr-lg-3 { padding-right: 16px !important; }
+  /* Set a $size padding to the bottom at $breakpoint */
+  .pb-lg-3 { padding-bottom: 16px !important; }
+  /* Set a $size padding to the left at $breakpoint */
+  .pl-lg-3 { padding-left: 16px !important; }
+  /* Set a $size padding to the left & right at $breakpoint */
+  .px-lg-3 { padding-right: 16px !important; padding-left: 16px !important; }
+  /* Set a $size padding to the top & bottom at $breakpoint */
+  .py-lg-3 { padding-top: 16px !important; padding-bottom: 16px !important; }
+  /* Set a $size padding to all sides at $breakpoint */
+  .p-lg-4 { padding: 24px !important; }
+  /* Set a $size padding to the top at $breakpoint */
+  .pt-lg-4 { padding-top: 24px !important; }
+  /* Set a $size padding to the right at $breakpoint */
+  .pr-lg-4 { padding-right: 24px !important; }
+  /* Set a $size padding to the bottom at $breakpoint */
+  .pb-lg-4 { padding-bottom: 24px !important; }
+  /* Set a $size padding to the left at $breakpoint */
+  .pl-lg-4 { padding-left: 24px !important; }
+  /* Set a $size padding to the left & right at $breakpoint */
+  .px-lg-4 { padding-right: 24px !important; padding-left: 24px !important; }
+  /* Set a $size padding to the top & bottom at $breakpoint */
+  .py-lg-4 { padding-top: 24px !important; padding-bottom: 24px !important; }
+  /* Set a $size padding to all sides at $breakpoint */
+  .p-lg-5 { padding: 32px !important; }
+  /* Set a $size padding to the top at $breakpoint */
+  .pt-lg-5 { padding-top: 32px !important; }
+  /* Set a $size padding to the right at $breakpoint */
+  .pr-lg-5 { padding-right: 32px !important; }
+  /* Set a $size padding to the bottom at $breakpoint */
+  .pb-lg-5 { padding-bottom: 32px !important; }
+  /* Set a $size padding to the left at $breakpoint */
+  .pl-lg-5 { padding-left: 32px !important; }
+  /* Set a $size padding to the left & right at $breakpoint */
+  .px-lg-5 { padding-right: 32px !important; padding-left: 32px !important; }
+  /* Set a $size padding to the top & bottom at $breakpoint */
+  .py-lg-5 { padding-top: 32px !important; padding-bottom: 32px !important; }
+  /* Set a $size padding to all sides at $breakpoint */
+  .p-lg-6 { padding: 40px !important; }
+  /* Set a $size padding to the top at $breakpoint */
+  .pt-lg-6 { padding-top: 40px !important; }
+  /* Set a $size padding to the right at $breakpoint */
+  .pr-lg-6 { padding-right: 40px !important; }
+  /* Set a $size padding to the bottom at $breakpoint */
+  .pb-lg-6 { padding-bottom: 40px !important; }
+  /* Set a $size padding to the left at $breakpoint */
+  .pl-lg-6 { padding-left: 40px !important; }
+  /* Set a $size padding to the left & right at $breakpoint */
+  .px-lg-6 { padding-right: 40px !important; padding-left: 40px !important; }
+  /* Set a $size padding to the top & bottom at $breakpoint */
+  .py-lg-6 { padding-top: 40px !important; padding-bottom: 40px !important; } }
+@media (min-width: 1280px) { /* Set a $size padding to all sides at $breakpoint */
+  .p-xl-0 { padding: 0 !important; }
+  /* Set a $size padding to the top at $breakpoint */
+  .pt-xl-0 { padding-top: 0 !important; }
+  /* Set a $size padding to the right at $breakpoint */
+  .pr-xl-0 { padding-right: 0 !important; }
+  /* Set a $size padding to the bottom at $breakpoint */
+  .pb-xl-0 { padding-bottom: 0 !important; }
+  /* Set a $size padding to the left at $breakpoint */
+  .pl-xl-0 { padding-left: 0 !important; }
+  /* Set a $size padding to the left & right at $breakpoint */
+  .px-xl-0 { padding-right: 0 !important; padding-left: 0 !important; }
+  /* Set a $size padding to the top & bottom at $breakpoint */
+  .py-xl-0 { padding-top: 0 !important; padding-bottom: 0 !important; }
+  /* Set a $size padding to all sides at $breakpoint */
+  .p-xl-1 { padding: 4px !important; }
+  /* Set a $size padding to the top at $breakpoint */
+  .pt-xl-1 { padding-top: 4px !important; }
+  /* Set a $size padding to the right at $breakpoint */
+  .pr-xl-1 { padding-right: 4px !important; }
+  /* Set a $size padding to the bottom at $breakpoint */
+  .pb-xl-1 { padding-bottom: 4px !important; }
+  /* Set a $size padding to the left at $breakpoint */
+  .pl-xl-1 { padding-left: 4px !important; }
+  /* Set a $size padding to the left & right at $breakpoint */
+  .px-xl-1 { padding-right: 4px !important; padding-left: 4px !important; }
+  /* Set a $size padding to the top & bottom at $breakpoint */
+  .py-xl-1 { padding-top: 4px !important; padding-bottom: 4px !important; }
+  /* Set a $size padding to all sides at $breakpoint */
+  .p-xl-2 { padding: 8px !important; }
+  /* Set a $size padding to the top at $breakpoint */
+  .pt-xl-2 { padding-top: 8px !important; }
+  /* Set a $size padding to the right at $breakpoint */
+  .pr-xl-2 { padding-right: 8px !important; }
+  /* Set a $size padding to the bottom at $breakpoint */
+  .pb-xl-2 { padding-bottom: 8px !important; }
+  /* Set a $size padding to the left at $breakpoint */
+  .pl-xl-2 { padding-left: 8px !important; }
+  /* Set a $size padding to the left & right at $breakpoint */
+  .px-xl-2 { padding-right: 8px !important; padding-left: 8px !important; }
+  /* Set a $size padding to the top & bottom at $breakpoint */
+  .py-xl-2 { padding-top: 8px !important; padding-bottom: 8px !important; }
+  /* Set a $size padding to all sides at $breakpoint */
+  .p-xl-3 { padding: 16px !important; }
+  /* Set a $size padding to the top at $breakpoint */
+  .pt-xl-3 { padding-top: 16px !important; }
+  /* Set a $size padding to the right at $breakpoint */
+  .pr-xl-3 { padding-right: 16px !important; }
+  /* Set a $size padding to the bottom at $breakpoint */
+  .pb-xl-3 { padding-bottom: 16px !important; }
+  /* Set a $size padding to the left at $breakpoint */
+  .pl-xl-3 { padding-left: 16px !important; }
+  /* Set a $size padding to the left & right at $breakpoint */
+  .px-xl-3 { padding-right: 16px !important; padding-left: 16px !important; }
+  /* Set a $size padding to the top & bottom at $breakpoint */
+  .py-xl-3 { padding-top: 16px !important; padding-bottom: 16px !important; }
+  /* Set a $size padding to all sides at $breakpoint */
+  .p-xl-4 { padding: 24px !important; }
+  /* Set a $size padding to the top at $breakpoint */
+  .pt-xl-4 { padding-top: 24px !important; }
+  /* Set a $size padding to the right at $breakpoint */
+  .pr-xl-4 { padding-right: 24px !important; }
+  /* Set a $size padding to the bottom at $breakpoint */
+  .pb-xl-4 { padding-bottom: 24px !important; }
+  /* Set a $size padding to the left at $breakpoint */
+  .pl-xl-4 { padding-left: 24px !important; }
+  /* Set a $size padding to the left & right at $breakpoint */
+  .px-xl-4 { padding-right: 24px !important; padding-left: 24px !important; }
+  /* Set a $size padding to the top & bottom at $breakpoint */
+  .py-xl-4 { padding-top: 24px !important; padding-bottom: 24px !important; }
+  /* Set a $size padding to all sides at $breakpoint */
+  .p-xl-5 { padding: 32px !important; }
+  /* Set a $size padding to the top at $breakpoint */
+  .pt-xl-5 { padding-top: 32px !important; }
+  /* Set a $size padding to the right at $breakpoint */
+  .pr-xl-5 { padding-right: 32px !important; }
+  /* Set a $size padding to the bottom at $breakpoint */
+  .pb-xl-5 { padding-bottom: 32px !important; }
+  /* Set a $size padding to the left at $breakpoint */
+  .pl-xl-5 { padding-left: 32px !important; }
+  /* Set a $size padding to the left & right at $breakpoint */
+  .px-xl-5 { padding-right: 32px !important; padding-left: 32px !important; }
+  /* Set a $size padding to the top & bottom at $breakpoint */
+  .py-xl-5 { padding-top: 32px !important; padding-bottom: 32px !important; }
+  /* Set a $size padding to all sides at $breakpoint */
+  .p-xl-6 { padding: 40px !important; }
+  /* Set a $size padding to the top at $breakpoint */
+  .pt-xl-6 { padding-top: 40px !important; }
+  /* Set a $size padding to the right at $breakpoint */
+  .pr-xl-6 { padding-right: 40px !important; }
+  /* Set a $size padding to the bottom at $breakpoint */
+  .pb-xl-6 { padding-bottom: 40px !important; }
+  /* Set a $size padding to the left at $breakpoint */
+  .pl-xl-6 { padding-left: 40px !important; }
+  /* Set a $size padding to the left & right at $breakpoint */
+  .px-xl-6 { padding-right: 40px !important; padding-left: 40px !important; }
+  /* Set a $size padding to the top & bottom at $breakpoint */
+  .py-xl-6 { padding-top: 40px !important; padding-bottom: 40px !important; } }
+.p-responsive { padding-right: 16px !important; padding-left: 16px !important; }
+@media (min-width: 544px) { .p-responsive { padding-right: 40px !important; padding-left: 40px !important; } }
+@media (min-width: 1012px) { .p-responsive { padding-right: 16px !important; padding-left: 16px !important; } }
+
+/* Set the font size to 26px */
+.h1 { font-size: 26px !important; }
+@media (min-width: 768px) { .h1 { font-size: 32px !important; } }
+
+/* Set the font size to 22px */
+.h2 { font-size: 22px !important; }
+@media (min-width: 768px) { .h2 { font-size: 24px !important; } }
+
+/* Set the font size to 18px */
+.h3 { font-size: 18px !important; }
+@media (min-width: 768px) { .h3 { font-size: 20px !important; } }
+
+/* Set the font size to 16px */
+.h4 { font-size: 16px !important; }
+
+/* Set the font size to 14px */
+.h5 { font-size: 14px !important; }
+
+/* Set the font size to 12px */
+.h6 { font-size: 12px !important; }
+
+.h1, .h2, .h3, .h4, .h5, .h6 { font-weight: 600 !important; }
+
+/* Set the font size to 26px */
+.f1 { font-size: 26px !important; }
+@media (min-width: 768px) { .f1 { font-size: 32px !important; } }
+
+/* Set the font size to 22px */
+.f2 { font-size: 22px !important; }
+@media (min-width: 768px) { .f2 { font-size: 24px !important; } }
+
+/* Set the font size to 18px */
+.f3 { font-size: 18px !important; }
+@media (min-width: 768px) { .f3 { font-size: 20px !important; } }
+
+/* Set the font size to 16px */
+.f4 { font-size: 16px !important; }
+@media (min-width: 768px) { .f4 { font-size: 16px !important; } }
+
+/* Set the font size to 14px */
+.f5 { font-size: 14px !important; }
+
+/* Set the font size to 12px */
+.f6 { font-size: 12px !important; }
+
+/* Set the font size to 40px and weight to light */
+.f00-light { font-size: 40px !important; font-weight: 300 !important; }
+@media (min-width: 768px) { .f00-light { font-size: 48px !important; } }
+
+/* Set the font size to 32px and weight to light */
+.f0-light { font-size: 32px !important; font-weight: 300 !important; }
+@media (min-width: 768px) { .f0-light { font-size: 40px !important; } }
+
+/* Set the font size to 26px and weight to light */
+.f1-light { font-size: 26px !important; font-weight: 300 !important; }
+@media (min-width: 768px) { .f1-light { font-size: 32px !important; } }
+
+/* Set the font size to 22px and weight to light */
+.f2-light { font-size: 22px !important; font-weight: 300 !important; }
+@media (min-width: 768px) { .f2-light { font-size: 24px !important; } }
+
+/* Set the font size to 18px and weight to light */
+.f3-light { font-size: 18px !important; font-weight: 300 !important; }
+@media (min-width: 768px) { .f3-light { font-size: 20px !important; } }
+
+/* Set the font size to ${#h6-size} */
+.text-small { font-size: 12px !important; }
+
+/* Large leading paragraphs */
+.lead { margin-bottom: 30px; font-size: 20px; font-weight: 300; color: #586069; }
+
+/* Set the line height to ultra condensed */
+.lh-condensed-ultra { line-height: 1 !important; }
+
+/* Set the line height to condensed */
+.lh-condensed { line-height: 1.25 !important; }
+
+/* Set the line height to default */
+.lh-default { line-height: 1.5 !important; }
+
+/* Set the line height to zero */
+.lh-0 { line-height: 0 !important; }
+
+/* Text align to the right */
+.text-right { text-align: right !important; }
+
+/* Text align to the left */
+.text-left { text-align: left !important; }
+
+/* Text align to the center */
+.text-center { text-align: center !important; }
+
+@media (min-width: 544px) { /* Text align to the right */
+  .text-sm-right { text-align: right !important; }
+  /* Text align to the left */
+  .text-sm-left { text-align: left !important; }
+  /* Text align to the center */
+  .text-sm-center { text-align: center !important; } }
+@media (min-width: 768px) { /* Text align to the right */
+  .text-md-right { text-align: right !important; }
+  /* Text align to the left */
+  .text-md-left { text-align: left !important; }
+  /* Text align to the center */
+  .text-md-center { text-align: center !important; } }
+@media (min-width: 1012px) { /* Text align to the right */
+  .text-lg-right { text-align: right !important; }
+  /* Text align to the left */
+  .text-lg-left { text-align: left !important; }
+  /* Text align to the center */
+  .text-lg-center { text-align: center !important; } }
+@media (min-width: 1280px) { /* Text align to the right */
+  .text-xl-right { text-align: right !important; }
+  /* Text align to the left */
+  .text-xl-left { text-align: left !important; }
+  /* Text align to the center */
+  .text-xl-center { text-align: center !important; } }
+/* Set the font weight to normal */
+.text-normal { font-weight: 400 !important; }
+
+/* Set the font weight to bold */
+.text-bold { font-weight: 600 !important; }
+
+/* Set the font to italic */
+.text-italic { font-style: italic !important; }
+
+/* Make text uppercase */
+.text-uppercase { text-transform: uppercase !important; }
+
+/* Underline text */
+.text-underline { text-decoration: underline !important; }
+
+/* Don't underline text */
+.no-underline { text-decoration: none !important; }
+
+/* Don't wrap white space */
+.no-wrap { white-space: nowrap !important; }
+
+/* Normal white space */
+.ws-normal { white-space: normal !important; }
+
+/* Allow long lines with no spaces to line break */
+.wb-break-all { word-break: break-all !important; }
+
+.text-emphasized { font-weight: 600; color: #24292e; }
+
+.list-style-none { list-style: none !important; }
+
+/* Add a dark text shadow */
+.text-shadow-dark { text-shadow: 0 1px 1px rgba(27, 31, 35, 0.25), 0 1px 25px rgba(27, 31, 35, 0.75); }
+
+/* Add a light text shadow */
+.text-shadow-light { text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); }
+
+/* Set to monospace font */
+.text-mono { font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; }
+
+/* Disallow user from selecting text */
+.user-select-none { user-select: none !important; }
+
+.d-block { display: block !important; }
+
+.d-flex { display: flex !important; }
+
+.d-inline { display: inline !important; }
+
+.d-inline-block { display: inline-block !important; }
+
+.d-inline-flex { display: inline-flex !important; }
+
+.d-none { display: none !important; }
+
+.d-table { display: table !important; }
+
+.d-table-cell { display: table-cell !important; }
+
+@media (min-width: 544px) { .d-sm-block { display: block !important; }
+  .d-sm-flex { display: flex !important; }
+  .d-sm-inline { display: inline !important; }
+  .d-sm-inline-block { display: inline-block !important; }
+  .d-sm-inline-flex { display: inline-flex !important; }
+  .d-sm-none { display: none !important; }
+  .d-sm-table { display: table !important; }
+  .d-sm-table-cell { display: table-cell !important; } }
+@media (min-width: 768px) { .d-md-block { display: block !important; }
+  .d-md-flex { display: flex !important; }
+  .d-md-inline { display: inline !important; }
+  .d-md-inline-block { display: inline-block !important; }
+  .d-md-inline-flex { display: inline-flex !important; }
+  .d-md-none { display: none !important; }
+  .d-md-table { display: table !important; }
+  .d-md-table-cell { display: table-cell !important; } }
+@media (min-width: 1012px) { .d-lg-block { display: block !important; }
+  .d-lg-flex { display: flex !important; }
+  .d-lg-inline { display: inline !important; }
+  .d-lg-inline-block { display: inline-block !important; }
+  .d-lg-inline-flex { display: inline-flex !important; }
+  .d-lg-none { display: none !important; }
+  .d-lg-table { display: table !important; }
+  .d-lg-table-cell { display: table-cell !important; } }
+@media (min-width: 1280px) { .d-xl-block { display: block !important; }
+  .d-xl-flex { display: flex !important; }
+  .d-xl-inline { display: inline !important; }
+  .d-xl-inline-block { display: inline-block !important; }
+  .d-xl-inline-flex { display: inline-flex !important; }
+  .d-xl-none { display: none !important; }
+  .d-xl-table { display: table !important; }
+  .d-xl-table-cell { display: table-cell !important; } }
+.v-hidden { visibility: hidden !important; }
+
+.v-visible { visibility: visible !important; }
+
+@media (max-width: 544px) { .hide-sm { display: none !important; } }
+@media (min-width: 544px) and (max-width: 768px) { .hide-md { display: none !important; } }
+@media (min-width: 768px) and (max-width: 1012px) { .hide-lg { display: none !important; } }
+@media (min-width: 1012px) { .hide-xl { display: none !important; } }
+/* Set the table-layout to fixed */
+.table-fixed { table-layout: fixed !important; }
+
+.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; overflow: hidden; clip: rect(0, 0, 0, 0); word-wrap: normal; border: 0; }
+
+.show-on-focus { position: absolute; width: 1px; height: 1px; margin: 0; overflow: hidden; clip: rect(1px, 1px, 1px, 1px); }
+.show-on-focus:focus { z-index: 20; width: auto; height: auto; clip: auto; }
+
+.container { width: 980px; margin-right: auto; margin-left: auto; }
+.container::before { display: table; content: ""; }
+.container::after { display: table; clear: both; content: ""; }
+
+.container-md { max-width: 768px; margin-right: auto; margin-left: auto; }
+
+.container-lg { max-width: 1012px; margin-right: auto; margin-left: auto; }
+
+.container-xl { max-width: 1280px; margin-right: auto; margin-left: auto; }
+
+.columns { margin-right: -10px; margin-left: -10px; }
+.columns::before { display: table; content: ""; }
+.columns::after { display: table; clear: both; content: ""; }
+
+.column { float: left; padding-right: 10px; padding-left: 10px; }
+
+.one-third { width: 33.333333%; }
+
+.two-thirds { width: 66.666667%; }
+
+.one-fourth { width: 25%; }
+
+.one-half { width: 50%; }
+
+.three-fourths { width: 75%; }
+
+.one-fifth { width: 20%; }
+
+.four-fifths { width: 80%; }
+
+.centered { display: block; float: none; margin-right: auto; margin-left: auto; }
+
+.col-1 { width: 8.3333333333%; }
+
+.col-2 { width: 16.6666666667%; }
+
+.col-3 { width: 25%; }
+
+.col-4 { width: 33.3333333333%; }
+
+.col-5 { width: 41.6666666667%; }
+
+.col-6 { width: 50%; }
+
+.col-7 { width: 58.3333333333%; }
+
+.col-8 { width: 66.6666666667%; }
+
+.col-9 { width: 75%; }
+
+.col-10 { width: 83.3333333333%; }
+
+.col-11 { width: 91.6666666667%; }
+
+.col-12 { width: 100%; }
+
+@media (min-width: 544px) { .col-sm-1 { width: 8.3333333333%; }
+  .col-sm-2 { width: 16.6666666667%; }
+  .col-sm-3 { width: 25%; }
+  .col-sm-4 { width: 33.3333333333%; }
+  .col-sm-5 { width: 41.6666666667%; }
+  .col-sm-6 { width: 50%; }
+  .col-sm-7 { width: 58.3333333333%; }
+  .col-sm-8 { width: 66.6666666667%; }
+  .col-sm-9 { width: 75%; }
+  .col-sm-10 { width: 83.3333333333%; }
+  .col-sm-11 { width: 91.6666666667%; }
+  .col-sm-12 { width: 100%; } }
+@media (min-width: 768px) { .col-md-1 { width: 8.3333333333%; }
+  .col-md-2 { width: 16.6666666667%; }
+  .col-md-3 { width: 25%; }
+  .col-md-4 { width: 33.3333333333%; }
+  .col-md-5 { width: 41.6666666667%; }
+  .col-md-6 { width: 50%; }
+  .col-md-7 { width: 58.3333333333%; }
+  .col-md-8 { width: 66.6666666667%; }
+  .col-md-9 { width: 75%; }
+  .col-md-10 { width: 83.3333333333%; }
+  .col-md-11 { width: 91.6666666667%; }
+  .col-md-12 { width: 100%; } }
+@media (min-width: 1012px) { .col-lg-1 { width: 8.3333333333%; }
+  .col-lg-2 { width: 16.6666666667%; }
+  .col-lg-3 { width: 25%; }
+  .col-lg-4 { width: 33.3333333333%; }
+  .col-lg-5 { width: 41.6666666667%; }
+  .col-lg-6 { width: 50%; }
+  .col-lg-7 { width: 58.3333333333%; }
+  .col-lg-8 { width: 66.6666666667%; }
+  .col-lg-9 { width: 75%; }
+  .col-lg-10 { width: 83.3333333333%; }
+  .col-lg-11 { width: 91.6666666667%; }
+  .col-lg-12 { width: 100%; } }
+@media (min-width: 1280px) { .col-xl-1 { width: 8.3333333333%; }
+  .col-xl-2 { width: 16.6666666667%; }
+  .col-xl-3 { width: 25%; }
+  .col-xl-4 { width: 33.3333333333%; }
+  .col-xl-5 { width: 41.6666666667%; }
+  .col-xl-6 { width: 50%; }
+  .col-xl-7 { width: 58.3333333333%; }
+  .col-xl-8 { width: 66.6666666667%; }
+  .col-xl-9 { width: 75%; }
+  .col-xl-10 { width: 83.3333333333%; }
+  .col-xl-11 { width: 91.6666666667%; }
+  .col-xl-12 { width: 100%; } }
+.gutter { margin-right: -16px; margin-left: -16px; }
+.gutter > [class*="col-"] { padding-right: 16px !important; padding-left: 16px !important; }
+
+.gutter-condensed { margin-right: -8px; margin-left: -8px; }
+.gutter-condensed > [class*="col-"] { padding-right: 8px !important; padding-left: 8px !important; }
+
+.gutter-spacious { margin-right: -24px; margin-left: -24px; }
+.gutter-spacious > [class*="col-"] { padding-right: 24px !important; padding-left: 24px !important; }
+
+@media (min-width: 544px) { .gutter-sm { margin-right: -16px; margin-left: -16px; }
+  .gutter-sm > [class*="col-"] { padding-right: 16px !important; padding-left: 16px !important; }
+  .gutter-sm-condensed { margin-right: -8px; margin-left: -8px; }
+  .gutter-sm-condensed > [class*="col-"] { padding-right: 8px !important; padding-left: 8px !important; }
+  .gutter-sm-spacious { margin-right: -24px; margin-left: -24px; }
+  .gutter-sm-spacious > [class*="col-"] { padding-right: 24px !important; padding-left: 24px !important; } }
+@media (min-width: 768px) { .gutter-md { margin-right: -16px; margin-left: -16px; }
+  .gutter-md > [class*="col-"] { padding-right: 16px !important; padding-left: 16px !important; }
+  .gutter-md-condensed { margin-right: -8px; margin-left: -8px; }
+  .gutter-md-condensed > [class*="col-"] { padding-right: 8px !important; padding-left: 8px !important; }
+  .gutter-md-spacious { margin-right: -24px; margin-left: -24px; }
+  .gutter-md-spacious > [class*="col-"] { padding-right: 24px !important; padding-left: 24px !important; } }
+@media (min-width: 1012px) { .gutter-lg { margin-right: -16px; margin-left: -16px; }
+  .gutter-lg > [class*="col-"] { padding-right: 16px !important; padding-left: 16px !important; }
+  .gutter-lg-condensed { margin-right: -8px; margin-left: -8px; }
+  .gutter-lg-condensed > [class*="col-"] { padding-right: 8px !important; padding-left: 8px !important; }
+  .gutter-lg-spacious { margin-right: -24px; margin-left: -24px; }
+  .gutter-lg-spacious > [class*="col-"] { padding-right: 24px !important; padding-left: 24px !important; } }
+@media (min-width: 1280px) { .gutter-xl { margin-right: -16px; margin-left: -16px; }
+  .gutter-xl > [class*="col-"] { padding-right: 16px !important; padding-left: 16px !important; }
+  .gutter-xl-condensed { margin-right: -8px; margin-left: -8px; }
+  .gutter-xl-condensed > [class*="col-"] { padding-right: 8px !important; padding-left: 8px !important; }
+  .gutter-xl-spacious { margin-right: -24px; margin-left: -24px; }
+  .gutter-xl-spacious > [class*="col-"] { padding-right: 24px !important; padding-left: 24px !important; } }
+.offset-1 { margin-left: 8.3333333333% !important; }
+
+.offset-2 { margin-left: 16.6666666667% !important; }
+
+.offset-3 { margin-left: 25% !important; }
+
+.offset-4 { margin-left: 33.3333333333% !important; }
+
+.offset-5 { margin-left: 41.6666666667% !important; }
+
+.offset-6 { margin-left: 50% !important; }
+
+.offset-7 { margin-left: 58.3333333333% !important; }
+
+.offset-8 { margin-left: 66.6666666667% !important; }
+
+.offset-9 { margin-left: 75% !important; }
+
+.offset-10 { margin-left: 83.3333333333% !important; }
+
+.offset-11 { margin-left: 91.6666666667% !important; }
+
+@media (min-width: 544px) { .offset-sm-1 { margin-left: 8.3333333333% !important; }
+  .offset-sm-2 { margin-left: 16.6666666667% !important; }
+  .offset-sm-3 { margin-left: 25% !important; }
+  .offset-sm-4 { margin-left: 33.3333333333% !important; }
+  .offset-sm-5 { margin-left: 41.6666666667% !important; }
+  .offset-sm-6 { margin-left: 50% !important; }
+  .offset-sm-7 { margin-left: 58.3333333333% !important; }
+  .offset-sm-8 { margin-left: 66.6666666667% !important; }
+  .offset-sm-9 { margin-left: 75% !important; }
+  .offset-sm-10 { margin-left: 83.3333333333% !important; }
+  .offset-sm-11 { margin-left: 91.6666666667% !important; } }
+@media (min-width: 768px) { .offset-md-1 { margin-left: 8.3333333333% !important; }
+  .offset-md-2 { margin-left: 16.6666666667% !important; }
+  .offset-md-3 { margin-left: 25% !important; }
+  .offset-md-4 { margin-left: 33.3333333333% !important; }
+  .offset-md-5 { margin-left: 41.6666666667% !important; }
+  .offset-md-6 { margin-left: 50% !important; }
+  .offset-md-7 { margin-left: 58.3333333333% !important; }
+  .offset-md-8 { margin-left: 66.6666666667% !important; }
+  .offset-md-9 { margin-left: 75% !important; }
+  .offset-md-10 { margin-left: 83.3333333333% !important; }
+  .offset-md-11 { margin-left: 91.6666666667% !important; } }
+@media (min-width: 1012px) { .offset-lg-1 { margin-left: 8.3333333333% !important; }
+  .offset-lg-2 { margin-left: 16.6666666667% !important; }
+  .offset-lg-3 { margin-left: 25% !important; }
+  .offset-lg-4 { margin-left: 33.3333333333% !important; }
+  .offset-lg-5 { margin-left: 41.6666666667% !important; }
+  .offset-lg-6 { margin-left: 50% !important; }
+  .offset-lg-7 { margin-left: 58.3333333333% !important; }
+  .offset-lg-8 { margin-left: 66.6666666667% !important; }
+  .offset-lg-9 { margin-left: 75% !important; }
+  .offset-lg-10 { margin-left: 83.3333333333% !important; }
+  .offset-lg-11 { margin-left: 91.6666666667% !important; } }
+@media (min-width: 1280px) { .offset-xl-1 { margin-left: 8.3333333333% !important; }
+  .offset-xl-2 { margin-left: 16.6666666667% !important; }
+  .offset-xl-3 { margin-left: 25% !important; }
+  .offset-xl-4 { margin-left: 33.3333333333% !important; }
+  .offset-xl-5 { margin-left: 41.6666666667% !important; }
+  .offset-xl-6 { margin-left: 50% !important; }
+  .offset-xl-7 { margin-left: 58.3333333333% !important; }
+  .offset-xl-8 { margin-left: 66.6666666667% !important; }
+  .offset-xl-9 { margin-left: 75% !important; }
+  .offset-xl-10 { margin-left: 83.3333333333% !important; }
+  .offset-xl-11 { margin-left: 91.6666666667% !important; } }
+.markdown-body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; line-height: 1.5; word-wrap: break-word; }
+.markdown-body::before { display: table; content: ""; }
+.markdown-body::after { display: table; clear: both; content: ""; }
+.markdown-body > *:first-child { margin-top: 0 !important; }
+.markdown-body > *:last-child { margin-bottom: 0 !important; }
+.markdown-body a:not([href]) { color: inherit; text-decoration: none; }
+.markdown-body .absent { color: #cb2431; }
+.markdown-body .anchor { float: left; padding-right: 4px; margin-left: -20px; line-height: 1; }
+.markdown-body .anchor:focus { outline: none; }
+.markdown-body p, .markdown-body blockquote, .markdown-body ul, .markdown-body ol, .markdown-body dl, .markdown-body table, .markdown-body pre { margin-top: 0; margin-bottom: 16px; }
+.markdown-body hr { height: 0.25em; padding: 0; margin: 24px 0; background-color: #e1e4e8; border: 0; }
+.markdown-body blockquote { padding: 0 1em; color: #6a737d; border-left: 0.25em solid #dfe2e5; }
+.markdown-body blockquote > :first-child { margin-top: 0; }
+.markdown-body blockquote > :last-child { margin-bottom: 0; }
+.markdown-body kbd { display: inline-block; padding: 3px 5px; font-size: 11px; line-height: 10px; color: #444d56; vertical-align: middle; background-color: #fafbfc; border: solid 1px #c6cbd1; border-bottom-color: #959da5; border-radius: 3px; box-shadow: inset 0 -1px 0 #959da5; }
+
+.markdown-body h1, .markdown-body h2, .markdown-body h3, .markdown-body h4, .markdown-body h5, .markdown-body h6 { margin-top: 24px; margin-bottom: 16px; font-weight: 600; line-height: 1.25; }
+.markdown-body h1 .octicon-link, .markdown-body h2 .octicon-link, .markdown-body h3 .octicon-link, .markdown-body h4 .octicon-link, .markdown-body h5 .octicon-link, .markdown-body h6 .octicon-link { color: #1b1f23; vertical-align: middle; visibility: hidden; }
+.markdown-body h1:hover .anchor, .markdown-body h2:hover .anchor, .markdown-body h3:hover .anchor, .markdown-body h4:hover .anchor, .markdown-body h5:hover .anchor, .markdown-body h6:hover .anchor { text-decoration: none; }
+.markdown-body h1:hover .anchor .octicon-link, .markdown-body h2:hover .anchor .octicon-link, .markdown-body h3:hover .anchor .octicon-link, .markdown-body h4:hover .anchor .octicon-link, .markdown-body h5:hover .anchor .octicon-link, .markdown-body h6:hover .anchor .octicon-link { visibility: visible; }
+.markdown-body h1 tt, .markdown-body h1 code, .markdown-body h2 tt, .markdown-body h2 code, .markdown-body h3 tt, .markdown-body h3 code, .markdown-body h4 tt, .markdown-body h4 code, .markdown-body h5 tt, .markdown-body h5 code, .markdown-body h6 tt, .markdown-body h6 code { font-size: inherit; }
+.markdown-body h1 { padding-bottom: 0.3em; font-size: 2em; border-bottom: 1px solid #eaecef; }
+.markdown-body h2 { padding-bottom: 0.3em; font-size: 1.5em; border-bottom: 1px solid #eaecef; }
+.markdown-body h3 { font-size: 1.25em; }
+.markdown-body h4 { font-size: 1em; }
+.markdown-body h5 { font-size: 0.875em; }
+.markdown-body h6 { font-size: 0.85em; color: #6a737d; }
+
+.markdown-body ul, .markdown-body ol { padding-left: 2em; }
+.markdown-body ul.no-list, .markdown-body ol.no-list { padding: 0; list-style-type: none; }
+.markdown-body ul ul, .markdown-body ul ol, .markdown-body ol ol, .markdown-body ol ul { margin-top: 0; margin-bottom: 0; }
+.markdown-body li { word-wrap: break-all; }
+.markdown-body li > p { margin-top: 16px; }
+.markdown-body li + li { margin-top: 0.25em; }
+.markdown-body dl { padding: 0; }
+.markdown-body dl dt { padding: 0; margin-top: 16px; font-size: 1em; font-style: italic; font-weight: 600; }
+.markdown-body dl dd { padding: 0 16px; margin-bottom: 16px; }
+
+.markdown-body table { display: block; width: 100%; overflow: auto; }
+.markdown-body table th { font-weight: 600; }
+.markdown-body table th, .markdown-body table td { padding: 6px 13px; border: 1px solid #dfe2e5; }
+.markdown-body table tr { background-color: #fff; border-top: 1px solid #c6cbd1; }
+.markdown-body table tr:nth-child(2n) { background-color: #f6f8fa; }
+.markdown-body table img { background-color: transparent; }
+
+.markdown-body img { max-width: 100%; box-sizing: content-box; background-color: #fff; }
+.markdown-body img[align=right] { padding-left: 20px; }
+.markdown-body img[align=left] { padding-right: 20px; }
+.markdown-body .emoji { max-width: none; vertical-align: text-top; background-color: transparent; }
+.markdown-body span.frame { display: block; overflow: hidden; }
+.markdown-body span.frame > span { display: block; float: left; width: auto; padding: 7px; margin: 13px 0 0; overflow: hidden; border: 1px solid #dfe2e5; }
+.markdown-body span.frame span img { display: block; float: left; }
+.markdown-body span.frame span span { display: block; padding: 5px 0 0; clear: both; color: #24292e; }
+.markdown-body span.align-center { display: block; overflow: hidden; clear: both; }
+.markdown-body span.align-center > span { display: block; margin: 13px auto 0; overflow: hidden; text-align: center; }
+.markdown-body span.align-center span img { margin: 0 auto; text-align: center; }
+.markdown-body span.align-right { display: block; overflow: hidden; clear: both; }
+.markdown-body span.align-right > span { display: block; margin: 13px 0 0; overflow: hidden; text-align: right; }
+.markdown-body span.align-right span img { margin: 0; text-align: right; }
+.markdown-body span.float-left { display: block; float: left; margin-right: 13px; overflow: hidden; }
+.markdown-body span.float-left span { margin: 13px 0 0; }
+.markdown-body span.float-right { display: block; float: right; margin-left: 13px; overflow: hidden; }
+.markdown-body span.float-right > span { display: block; margin: 13px auto 0; overflow: hidden; text-align: right; }
+
+.markdown-body code, .markdown-body tt { padding: 0.2em 0.4em; margin: 0; font-size: 85%; background-color: rgba(27, 31, 35, 0.05); border-radius: 3px; }
+.markdown-body code br, .markdown-body tt br { display: none; }
+.markdown-body del code { text-decoration: inherit; }
+.markdown-body pre { word-wrap: normal; }
+.markdown-body pre > code { padding: 0; margin: 0; font-size: 100%; word-break: normal; white-space: pre; background: transparent; border: 0; }
+.markdown-body .highlight { margin-bottom: 16px; }
+.markdown-body .highlight pre { margin-bottom: 0; word-break: normal; }
+.markdown-body .highlight pre, .markdown-body pre { padding: 16px; overflow: auto; font-size: 85%; line-height: 1.45; background-color: #f6f8fa; border-radius: 3px; }
+.markdown-body pre code, .markdown-body pre tt { display: inline; max-width: auto; padding: 0; margin: 0; overflow: visible; line-height: inherit; word-wrap: normal; background-color: transparent; border: 0; }
+
+.markdown-body .csv-data td, .markdown-body .csv-data th { padding: 5px; overflow: hidden; font-size: 12px; line-height: 1; text-align: left; white-space: nowrap; }
+.markdown-body .csv-data .blob-num { padding: 10px 8px 9px; text-align: right; background: #fff; border: 0; }
+.markdown-body .csv-data tr { border-top: 0; }
+.markdown-body .csv-data th { font-weight: 600; background: #f6f8fa; border-top: 0; }
+
+.highlight table td { padding: 5px; }
+
+.highlight table pre { margin: 0; }
+
+.highlight .cm { color: #999988; font-style: italic; }
+
+.highlight .cp { color: #999999; font-weight: bold; }
+
+.highlight .c1 { color: #999988; font-style: italic; }
+
+.highlight .cs { color: #999999; font-weight: bold; font-style: italic; }
+
+.highlight .c, .highlight .cd { color: #999988; font-style: italic; }
+
+.highlight .err { color: #a61717; background-color: #e3d2d2; }
+
+.highlight .gd { color: #000000; background-color: #ffdddd; }
+
+.highlight .ge { color: #000000; font-style: italic; }
+
+.highlight .gr { color: #aa0000; }
+
+.highlight .gh { color: #999999; }
+
+.highlight .gi { color: #000000; background-color: #ddffdd; }
+
+.highlight .go { color: #888888; }
+
+.highlight .gp { color: #555555; }
+
+.highlight .gs { font-weight: bold; }
+
+.highlight .gu { color: #aaaaaa; }
+
+.highlight .gt { color: #aa0000; }
+
+.highlight .kc { color: #000000; font-weight: bold; }
+
+.highlight .kd { color: #000000; font-weight: bold; }
+
+.highlight .kn { color: #000000; font-weight: bold; }
+
+.highlight .kp { color: #000000; font-weight: bold; }
+
+.highlight .kr { color: #000000; font-weight: bold; }
+
+.highlight .kt { color: #445588; font-weight: bold; }
+
+.highlight .k, .highlight .kv { color: #000000; font-weight: bold; }
+
+.highlight .mf { color: #009999; }
+
+.highlight .mh { color: #009999; }
+
+.highlight .il { color: #009999; }
+
+.highlight .mi { color: #009999; }
+
+.highlight .mo { color: #009999; }
+
+.highlight .m, .highlight .mb, .highlight .mx { color: #009999; }
+
+.highlight .sb { color: #d14; }
+
+.highlight .sc { color: #d14; }
+
+.highlight .sd { color: #d14; }
+
+.highlight .s2 { color: #d14; }
+
+.highlight .se { color: #d14; }
+
+.highlight .sh { color: #d14; }
+
+.highlight .si { color: #d14; }
+
+.highlight .sx { color: #d14; }
+
+.highlight .sr { color: #009926; }
+
+.highlight .s1 { color: #d14; }
+
+.highlight .ss { color: #990073; }
+
+.highlight .s { color: #d14; }
+
+.highlight .na { color: #008080; }
+
+.highlight .bp { color: #999999; }
+
+.highlight .nb { color: #0086B3; }
+
+.highlight .nc { color: #445588; font-weight: bold; }
+
+.highlight .no { color: #008080; }
+
+.highlight .nd { color: #3c5d5d; font-weight: bold; }
+
+.highlight .ni { color: #800080; }
+
+.highlight .ne { color: #990000; font-weight: bold; }
+
+.highlight .nf { color: #990000; font-weight: bold; }
+
+.highlight .nl { color: #990000; font-weight: bold; }
+
+.highlight .nn { color: #555555; }
+
+.highlight .nt { color: #000080; }
+
+.highlight .vc { color: #008080; }
+
+.highlight .vg { color: #008080; }
+
+.highlight .vi { color: #008080; }
+
+.highlight .nv { color: #008080; }
+
+.highlight .ow { color: #000000; font-weight: bold; }
+
+.highlight .o { color: #000000; font-weight: bold; }
+
+.highlight .w { color: #bbbbbb; }
+
+.highlight { background-color: #f8f8f8; }
diff --git a/output/beta-2-pre-release-stress-test/index.html b/output/beta-2-pre-release-stress-test/index.html
new file mode 100644
index 0000000..ff9d2c7
--- /dev/null
+++ b/output/beta-2-pre-release-stress-test/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en-US">
+  <meta charset="utf-8">
+  <title>Redirecting&hellip;</title>
+  <link rel="canonical" href="https://fluo.apache.org//blog/2015/12/22/beta-2-pre-release-stress-test/">
+  <script>location="https://fluo.apache.org//blog/2015/12/22/beta-2-pre-release-stress-test/"</script>
+  <meta http-equiv="refresh" content="0; url=https://fluo.apache.org//blog/2015/12/22/beta-2-pre-release-stress-test/">
+  <meta name="robots" content="noindex">
+  <h1>Redirecting&hellip;</h1>
+  <a href="https://fluo.apache.org//blog/2015/12/22/beta-2-pre-release-stress-test/">Click here if you are not redirected.</a>
+</html>
diff --git a/output/blog/2014/12/30/stress-test-long-run/index.html b/output/blog/2014/12/30/stress-test-long-run/index.html
new file mode 100644
index 0000000..b097b82
--- /dev/null
+++ b/output/blog/2014/12/30/stress-test-long-run/index.html
@@ -0,0 +1,289 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+
+    <link href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/cosmo/bootstrap.min.css" rel="stylesheet" integrity="sha384-h21C2fcDk/eFsW9sC9h0dhokq5pDinLNklTKoxIZRUn3+hvmgQSffLLQ4G4l2eEr" crossorigin="anonymous">
+    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
+    <link rel="stylesheet" href="/css/fluo.css">
+    <link rel="canonical" href="https://fluo.apache.org//blog/2014/12/30/stress-test-long-run/">
+    <link rel="icon" type="image/png" href="/resources/favicon.png">
+    
+    <title>First long stress test run on Fluo | Apache Fluo</title>
+
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
+    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+    <!-- Place your <script> tags here. -->
+
+<script>window.twttr = (function(d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0],
+    t = window.twttr || {};
+  if (d.getElementById(id)) return t;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "https://platform.twitter.com/widgets.js";
+  fjs.parentNode.insertBefore(js, fjs);
+
+  t._e = [];
+  t.ready = function(f) {
+    t._e.push(f);
+  };
+
+  return t;
+}(document, "script", "twitter-wjs"));</script>
+
+  </head>
+  <body style="padding-top: 100px">
+    <nav id="fluo-nav" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <div class="navbar-toggle-wrapper visible-xs">
+            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".js-navbar-collapse">
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+            </button>
+          </div>
+          <a href="/" class="navbar-brand"><img id="fluo-img" height="40px" src="/resources/fluo-logo-dark.png" alt="Apache Fluo"></a>
+        </div>
+        <div class="collapse navbar-collapse js-navbar-collapse" style="margin-top: 20px">
+          <ul class="navbar-nav nav">
+            <li><a href="/releases/">Releases</a></li>
+            <li><a href="/tour/">Tour</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Docs<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/docs/fluo/1.2/">Fluo</a></li>
+                <li><a href="/docs/fluo-recipes/1.2/">Fluo Recipes</a></li>
+              </ul>
+            </li>
+            <li><a href="/api/">API</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Community<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/contactus/">Contact Us</a></li>
+                <li><a href="/news/">News Archive</a></li>
+                <li><a href="/people/">People</a></li>
+                <li><a href="/related-projects/">Related Projects</a></li>
+                <li><a href="/poweredby/">Powered By</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Contributing<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/how-to-contribute/">How To Contribute</a></li>
+                <li><a href="/release-process/">Release Process</a></li>
+              </ul>
+            </li>
+            <li><a href="/search/">Search</a></li>
+          </ul>
+          <ul class="navbar-nav nav navbar-right">
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#"><img alt="Apache Software Foundation" src="https://www.apache.org/images/feather-small.png" width="70"/><span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="https://www.apache.org">Apache Homepage</a></li>
+                <li><a href="https://www.apache.org/licenses/">License</a></li>
+                <li><a href="https://www.apache.org/foundation/sponsorship">Sponsorship</i></a></li>
+                <li><a href="https://www.apache.org/security">Security</a></li>
+                <li><a href="https://www.apache.org/foundation/thanks">Thanks</a></li>
+                <li><a href="https://www.apache.org/foundation/policies/conduct">Code of Conduct</a></li>
+                <li><a href="https://www.apache.org/events/current-event.html">Current Event</a></li>
+              </ul>
+            </li>
+          </ul>
+        </div>
+      </div>
+    </nav>
+    <div class="container">
+      <div class="row">
+          <div class="col-sm-12">
+            <div id="post-header">
+  <h1>First long stress test run on Fluo</h1>
+  <p class="text-muted">
+     
+    
+    30 Dec 2014
+  </p> 
+  <p><a class="twitter-share-button" href="https://twitter.com/intent/tweet?text=First long stress test run on Fluo&url=https://fluo.apache.org//blog/2014/12/30/stress-test-long-run/&via=ApacheFluo&related=ApacheFluo" rel="nofollow" target="_blank" title="Share on Twitter">Twitter</a></p>
+</div>
+<div id="post-content">
+  <p>Fluo has a <a href="https://github.com/fluo-io/fluo/blob/acf1ea7d8d6bc74eef7e311008e5e8fc0fd94d30/modules/stress/README.md">stress test</a> which computes the number of unique integers
+through the process of building a bitwise trie.  Multiple collections of
+randomly generated integers are provided as input.  The test suite includes a
+simple map reduce job that can read the same data fed to Fluo and compute the
+number of unique integers. The correctness of Fluo can be verified by checking
+the result in Fluo against the map reduce job.  The test is intended to
+exercise Fluo at scale and complements the unit and integration test.  One of
+our goals before releasing beta is to run this test on clusters for long
+periods of time.  This post records the experience of running the stress test
+overnight on a cluster for the first time.</p>
+
+<p>For this test run, initially ~1 billion random integers were generated and
+loaded into Fluo via map reduce.  After that ~100K random integers were
+repeatedly loaded 120 times, sleeping 2 minutes between loads.  After
+everything finished, the test was a success. The number of unique integers
+computed independently by MapReduce matched the number computed by Fluo. Below
+is the output of the stress test count from Fluo.</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> $ java -cp $STRESS_JAR io.fluo.stress.trie.Print $FLUO_PROPS
+ Total at root : 1011489250
+ Nodes Scanned : 59605
+</code></pre></div></div>
+
+<p>Below are a few lines of output selected from the map reduce job.</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> Map input records=1011999273
+ io.fluo.stress.trie.Unique$Stats 
+    UNIQUE=1011489250
+</code></pre></div></div>
+
+<p>This output shows that 1,011,999,273 random integers (between 0 and
+10<sup>12</sup>-1) were given to Fluo and map reduce.  Both computations
+reported 1,011,489,250 unique integers.</p>
+
+<h2 id="graphite-plots">Graphite Plots</h2>
+
+<p>Before running the overnight test, a quick test with only a few iterations was
+run against an empty table.  This initial test went well and had no problems
+keeping up.  Based on that quick test, the decision was made load 100K random
+integers into Fluo every two minutes for 120 iterations.  However a big
+difference between the quick test and the long running test, was that the long
+running test did not start with an empty table. What worked well for an empty
+table did not work well for a table with a billion initial entries.  The long
+running test was kicked off in the evening, giving EC2 something to do in the
+wee hours.</p>
+
+<p>In the morning the long running test was still running, but had fallen behind.
+The image below shows transaction committed per minute and covers a 15 hour
+period.  Unfortunately this image does not include the load transactions, there
+was a problem getting that reported to Graphite.  So only Observer transactions
+are shown in the plot.</p>
+
+<p><img src="/resources/blog/stress_1/committed-1.png" alt="TXs committed 1" title="TX Committed per minute" /></p>
+
+<p>The image below shows notifications queued and covers a 15 hour period.</p>
+
+<p><img src="/resources/blog/stress_1/queue-1.png" alt="Notifications Queued" title="Notifications Queued" /></p>
+
+<p>Upon seeing that the test was falling behind, fiddling with it was unavoidable.
+The table was configured to use bloom filters and a compaction forced, with the
+hope that this would lead to less file accesses.  This caused performance to
+drop for some reason.  Since that did not work, different bloom filter setting
+were set and another round of compactions forced.  The new settings caused
+tablet servers to start dying with out of memory errors.  The Fluo workers
+continued to limp along using a subset of tablet servers.   The fiddling and
+futzing was declared a failure, bloom filter settings reverted, another round
+of compactions issued, and tservers restarted.  Around the time the fiddling
+ended, so did the map reduce jobs that were loading new data.  It was very
+satisfying that the counts came out correct after all of this disruptive
+activity.</p>
+
+<p>The plots below cover a 21 hour period and overlap in the 1st 15 hours with the
+plots above.  The drops in performance are due to the previously mentioned
+shenanigans.  The dramatic recovery is due to load transactions finishing and
+compacting away bloom filters.</p>
+
+<p>The plot below shows transactions committed per minute.</p>
+
+<p><img src="/resources/blog/stress_1/committed-2.png" alt="TXs committed 2" title="TX Committed per minute" /></p>
+
+<p>The image below shows notifications queued.</p>
+
+<p><img src="/resources/blog/stress_1/queue-2.png" alt="Notifications Queued 2" title="Notifications Queued 2" /></p>
+
+<p>Something mysterious in the plot above is the difference between min and max
+queue sizes.  To investigate, Graphite was used to plot each workers queue size
+over time.  This plot is shown below.  Its hard to see from the plot, but 10
+workers start falling behind almost immediately and 7 did not.  No idea what
+happened here.</p>
+
+<p><img src="/resources/blog/stress_1/all-workers-queue-sizes-2.png" alt="All workers queue sizes" title="All workers queue sizes" /></p>
+
+<h2 id="test-environment">Test Environment</h2>
+
+<p>The test was run on 20 m1.large EC2 nodes using the script at the end of this
+<a href="https://github.com/fluo-io/fluo/blob/acf1ea7d8d6bc74eef7e311008e5e8fc0fd94d30/modules/stress/README.md">README</a>.  The parameters in the script were set as follows, the for loop
+was changed to <code class="language-plaintext highlighter-rouge">{1..120}</code>, and the sleep time was set to 120.</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>MAX=$((10**12))
+SPLITS=68
+MAPS=17
+REDUCES=17
+GEN_INIT=$((10**9))
+GEN_INCR=$((10**5))
+</code></pre></div></div>
+
+<p>The following was used to run the test :</p>
+
+<ul>
+  <li><a href="https://github.com/keith-turner/stress-balancer">Custom balancer</a></li>
+  <li><a href="/resources/blog/stress_1/accumulo-site.xml">accumulo-site.xml</a></li>
+  <li><a href="/resources/blog/stress_1/fluo.properties">fluo.properties</a></li>
+  <li><a href="/resources/blog/stress_1/table_settings.txt">Table settings</a></li>
+  <li>Fluo from commit acf1ea7d8d6bc74eef7e311008e5e8fc0fd94d30</li>
+  <li>Accumulo 1.6.1</li>
+  <li>Hadoop 2.6.0</li>
+  <li>Centos 6.5</li>
+</ul>
+
+<h2 id="conclusion">Conclusion</h2>
+
+<p>We are very happy the counts came out correct especially since some tablet
+servers died (which was unplanned).  In a later test, we can hopefully kill
+tablet servers, Fluo workers, and datanodes.</p>
+
+<p>Looking at the numbers leads to the question: was the performance good?  At
+this point that is unclear.   Need to get a sense of what the theoretical
+maximum rate would be based on basic performance characteristics of nodes.
+That mathematical model does not exist at the moment.</p>
+
+<p>The particular EC2 nodes used in this experiment are not very speedy.  A single
+high end workstation can match the performance of these 20 nodes, however
+scaling issue will never be seen on a single node.  The m1.large nodes were
+used because they were cheap.  Many scaling issue were found using these nodes.
+After working out bugs on the cheaper nodes, we may run experiments using more
+expensive, high performance EC2 nodes.  However this will depend on <a href="https://github.com/fluo-io/fluo/issues/356">#356</a>
+which should make that process easier.  The current 20 node m1.large setup was
+partially manually setup.</p>
+
+<p>Further experiments could be done adjusting various Accumulo and Fluo settings,
+like number of threads.  Also, it will be interesting to see what impact
+implementing issues like <a href="https://github.com/fluo-io/fluo/issues/12">#12</a> will have.</p>
+
+
+</div>
+
+<div>
+  <p class="text-muted">View all posts in the <a href="/news/">news archive</a></p>
+</div>
+
+          </div>
+      </div>
+      <div class="row">
+        <div class="col-sm-12 center-block">
+          <footer>
+            <hr/>
+            <p>
+            <a href="https://www.apache.org/foundation/contributing"><img
+              src="https://www.apache.org/images/SupportApache-small.png"
+              id="asf-logo" height="100" alt="Apache"/></a>
+            </p>
+            <p>
+            Copyright &copy; 2020 <a
+              href="https://www.apache.org">The&nbsp;Apache&nbsp;Software&nbsp;Foundation</a>.
+            Licensed under the <a
+              href="https://www.apache.org/licenses/">Apache&nbsp;License,&nbsp;Version&nbsp;2.0</a>
+            </p>
+            <p>
+            Apache®, the names of Apache projects and their logos, and the multicolor feather
+            logo are registered trademarks or trademarks of The Apache Software Foundation
+            in the United States and/or other countries.
+            </p>
+          </footer>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>
diff --git a/output/blog/2015/05/22/fluo-talk-at-accumulo-summit/index.html b/output/blog/2015/05/22/fluo-talk-at-accumulo-summit/index.html
new file mode 100644
index 0000000..d820fe1
--- /dev/null
+++ b/output/blog/2015/05/22/fluo-talk-at-accumulo-summit/index.html
@@ -0,0 +1,150 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+
+    <link href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/cosmo/bootstrap.min.css" rel="stylesheet" integrity="sha384-h21C2fcDk/eFsW9sC9h0dhokq5pDinLNklTKoxIZRUn3+hvmgQSffLLQ4G4l2eEr" crossorigin="anonymous">
+    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
+    <link rel="stylesheet" href="/css/fluo.css">
+    <link rel="canonical" href="https://fluo.apache.org//blog/2015/05/22/fluo-talk-at-accumulo-summit/">
+    <link rel="icon" type="image/png" href="/resources/favicon.png">
+    
+    <title>Fluo talk at Accumulo Summit | Apache Fluo</title>
+
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
+    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+    <!-- Place your <script> tags here. -->
+
+<script>window.twttr = (function(d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0],
+    t = window.twttr || {};
+  if (d.getElementById(id)) return t;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "https://platform.twitter.com/widgets.js";
+  fjs.parentNode.insertBefore(js, fjs);
+
+  t._e = [];
+  t.ready = function(f) {
+    t._e.push(f);
+  };
+
+  return t;
+}(document, "script", "twitter-wjs"));</script>
+
+  </head>
+  <body style="padding-top: 100px">
+    <nav id="fluo-nav" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <div class="navbar-toggle-wrapper visible-xs">
+            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".js-navbar-collapse">
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+            </button>
+          </div>
+          <a href="/" class="navbar-brand"><img id="fluo-img" height="40px" src="/resources/fluo-logo-dark.png" alt="Apache Fluo"></a>
+        </div>
+        <div class="collapse navbar-collapse js-navbar-collapse" style="margin-top: 20px">
+          <ul class="navbar-nav nav">
+            <li><a href="/releases/">Releases</a></li>
+            <li><a href="/tour/">Tour</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Docs<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/docs/fluo/1.2/">Fluo</a></li>
+                <li><a href="/docs/fluo-recipes/1.2/">Fluo Recipes</a></li>
+              </ul>
+            </li>
+            <li><a href="/api/">API</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Community<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/contactus/">Contact Us</a></li>
+                <li><a href="/news/">News Archive</a></li>
+                <li><a href="/people/">People</a></li>
+                <li><a href="/related-projects/">Related Projects</a></li>
+                <li><a href="/poweredby/">Powered By</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Contributing<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/how-to-contribute/">How To Contribute</a></li>
+                <li><a href="/release-process/">Release Process</a></li>
+              </ul>
+            </li>
+            <li><a href="/search/">Search</a></li>
+          </ul>
+          <ul class="navbar-nav nav navbar-right">
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#"><img alt="Apache Software Foundation" src="https://www.apache.org/images/feather-small.png" width="70"/><span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="https://www.apache.org">Apache Homepage</a></li>
+                <li><a href="https://www.apache.org/licenses/">License</a></li>
+                <li><a href="https://www.apache.org/foundation/sponsorship">Sponsorship</i></a></li>
+                <li><a href="https://www.apache.org/security">Security</a></li>
+                <li><a href="https://www.apache.org/foundation/thanks">Thanks</a></li>
+                <li><a href="https://www.apache.org/foundation/policies/conduct">Code of Conduct</a></li>
+                <li><a href="https://www.apache.org/events/current-event.html">Current Event</a></li>
+              </ul>
+            </li>
+          </ul>
+        </div>
+      </div>
+    </nav>
+    <div class="container">
+      <div class="row">
+          <div class="col-sm-12">
+            <div id="post-header">
+  <h1>Fluo talk at Accumulo Summit</h1>
+  <p class="text-muted">
+     
+    
+    22 May 2015
+  </p> 
+  <p><a class="twitter-share-button" href="https://twitter.com/intent/tweet?text=Fluo talk at Accumulo Summit&url=https://fluo.apache.org//blog/2015/05/22/fluo-talk-at-accumulo-summit/&via=ApacheFluo&related=ApacheFluo" rel="nofollow" target="_blank" title="Share on Twitter">Twitter</a></p>
+</div>
+<div id="post-content">
+  <p>A talk on Fluo was given at the <a href="http://accumulosummit.com/">Accumulo Summit</a> on April 29, 2015.  Below are the slides from the talk:</p>
+
+<iframe src="//www.slideshare.net/slideshow/embed_code/key/kBl6Jb591OhY9Y" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen=""> </iframe>
+
+
+</div>
+
+<div>
+  <p class="text-muted">View all posts in the <a href="/news/">news archive</a></p>
+</div>
+
+          </div>
+      </div>
+      <div class="row">
+        <div class="col-sm-12 center-block">
+          <footer>
+            <hr/>
+            <p>
+            <a href="https://www.apache.org/foundation/contributing"><img
+              src="https://www.apache.org/images/SupportApache-small.png"
+              id="asf-logo" height="100" alt="Apache"/></a>
+            </p>
+            <p>
+            Copyright &copy; 2020 <a
+              href="https://www.apache.org">The&nbsp;Apache&nbsp;Software&nbsp;Foundation</a>.
+            Licensed under the <a
+              href="https://www.apache.org/licenses/">Apache&nbsp;License,&nbsp;Version&nbsp;2.0</a>
+            </p>
+            <p>
+            Apache®, the names of Apache projects and their logos, and the multicolor feather
+            logo are registered trademarks or trademarks of The Apache Software Foundation
+            in the United States and/or other countries.
+            </p>
+          </footer>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>
diff --git a/output/blog/2015/12/22/beta-2-pre-release-stress-test/index.html b/output/blog/2015/12/22/beta-2-pre-release-stress-test/index.html
new file mode 100644
index 0000000..89943aa
--- /dev/null
+++ b/output/blog/2015/12/22/beta-2-pre-release-stress-test/index.html
@@ -0,0 +1,200 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+
+    <link href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/cosmo/bootstrap.min.css" rel="stylesheet" integrity="sha384-h21C2fcDk/eFsW9sC9h0dhokq5pDinLNklTKoxIZRUn3+hvmgQSffLLQ4G4l2eEr" crossorigin="anonymous">
+    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
+    <link rel="stylesheet" href="/css/fluo.css">
+    <link rel="canonical" href="https://fluo.apache.org//blog/2015/12/22/beta-2-pre-release-stress-test/">
+    <link rel="icon" type="image/png" href="/resources/favicon.png">
+    
+    <title>Beta 2 pre-release stress test | Apache Fluo</title>
+
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
+    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+    <!-- Place your <script> tags here. -->
+
+<script>window.twttr = (function(d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0],
+    t = window.twttr || {};
+  if (d.getElementById(id)) return t;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "https://platform.twitter.com/widgets.js";
+  fjs.parentNode.insertBefore(js, fjs);
+
+  t._e = [];
+  t.ready = function(f) {
+    t._e.push(f);
+  };
+
+  return t;
+}(document, "script", "twitter-wjs"));</script>
+
+  </head>
+  <body style="padding-top: 100px">
+    <nav id="fluo-nav" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <div class="navbar-toggle-wrapper visible-xs">
+            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".js-navbar-collapse">
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+            </button>
+          </div>
+          <a href="/" class="navbar-brand"><img id="fluo-img" height="40px" src="/resources/fluo-logo-dark.png" alt="Apache Fluo"></a>
+        </div>
+        <div class="collapse navbar-collapse js-navbar-collapse" style="margin-top: 20px">
+          <ul class="navbar-nav nav">
+            <li><a href="/releases/">Releases</a></li>
+            <li><a href="/tour/">Tour</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Docs<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/docs/fluo/1.2/">Fluo</a></li>
+                <li><a href="/docs/fluo-recipes/1.2/">Fluo Recipes</a></li>
+              </ul>
+            </li>
+            <li><a href="/api/">API</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Community<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/contactus/">Contact Us</a></li>
+                <li><a href="/news/">News Archive</a></li>
+                <li><a href="/people/">People</a></li>
+                <li><a href="/related-projects/">Related Projects</a></li>
+                <li><a href="/poweredby/">Powered By</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Contributing<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/how-to-contribute/">How To Contribute</a></li>
+                <li><a href="/release-process/">Release Process</a></li>
+              </ul>
+            </li>
+            <li><a href="/search/">Search</a></li>
+          </ul>
+          <ul class="navbar-nav nav navbar-right">
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#"><img alt="Apache Software Foundation" src="https://www.apache.org/images/feather-small.png" width="70"/><span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="https://www.apache.org">Apache Homepage</a></li>
+                <li><a href="https://www.apache.org/licenses/">License</a></li>
+                <li><a href="https://www.apache.org/foundation/sponsorship">Sponsorship</i></a></li>
+                <li><a href="https://www.apache.org/security">Security</a></li>
+                <li><a href="https://www.apache.org/foundation/thanks">Thanks</a></li>
+                <li><a href="https://www.apache.org/foundation/policies/conduct">Code of Conduct</a></li>
+                <li><a href="https://www.apache.org/events/current-event.html">Current Event</a></li>
+              </ul>
+            </li>
+          </ul>
+        </div>
+      </div>
+    </nav>
+    <div class="container">
+      <div class="row">
+          <div class="col-sm-12">
+            <div id="post-header">
+  <h1>Beta 2 pre-release stress test</h1>
+  <p class="text-muted">
+     
+    
+    22 Dec 2015
+  </p> 
+  <p><a class="twitter-share-button" href="https://twitter.com/intent/tweet?text=Beta 2 pre-release stress test&url=https://fluo.apache.org//blog/2015/12/22/beta-2-pre-release-stress-test/&via=ApacheFluo&related=ApacheFluo" rel="nofollow" target="_blank" title="Share on Twitter">Twitter</a></p>
+</div>
+<div id="post-content">
+  <p>In preparation for a beta 2 release, the <a href="https://github.com/fluo-io/fluo-stress">stress test</a> was run again on EC2.
+The test went well outperforming the <a href="/blog/2014/12/30/stress-test-long-run/">first stress test</a> and <a href="/release/fluo-1.0.0-beta-1/">beta-1 stress
+test</a>.</p>
+
+<p>For this test run, initially ~1 billion random integers were generated and
+loaded into Fluo via map reduce.  After that, 1 million random integers were
+repeatedly loaded 20 times, sleeping 10 minutes between loads.  After
+everything finished, the test was a success. The number of unique integers
+computed independently by MapReduce matched the number computed by Fluo.  Both
+computed 1,019,481,332 unique integers.</p>
+
+<p>The test took a total of 7 hours 30 minutes and 30 seconds.  Over this time
+period 61.7 million NodeObserver and 20 million NodeLoader transactions were
+executed.  The average rate of transactions per second for the entire test was
+2,968 transactions per second.  At the conclusion of the test, the stress table
+had 3.87 billion entries.</p>
+
+<p>The test was run with the following environment.</p>
+
+<ul>
+  <li>18 m3.xlarge worker nodes</li>
+  <li>18 Fluo workers, each having had 4G memory and 128 threads</li>
+  <li>18 Map reduce load task, each with 32 threads</li>
+  <li>18 Tablet servers, each with 3G (1.5G for data cache, .5G for index cache, and .5G for in memory map)</li>
+  <li>Fluo built from <a href="https://github.com/fluo-io/fluo/commit/c4789b3100092683b37c57c48ddd87993e84972c">c4789b3</a></li>
+  <li>Fluo stress built from <a href="https://github.com/fluo-io/fluo-stress/commit/32edaf91138bb13b442632262c23e7f13f8fb17c">32edaf9</a></li>
+  <li>Accumulo 1.8.0-SNAPSHOT with <a href="https://issues.apache.org/jira/browse/ACCUMULO-4066">ACCUMULO-4066</a> patch.</li>
+</ul>
+
+<h2 id="grafana-plots">Grafana plots</h2>
+
+<p>An exciting new development in the Fluo eco-system for beta-2 is the
+utilization of Grafana and InfluxDB to plot metrics.  Also metrics
+configuration was simplified making it possible to report metrics from Map
+Reduce and Spark. In the plots below we can see metrics from the load
+transactions executing in Map Reduce.  In previous test, this was not visible,
+being able to see it now is really useful.</p>
+
+<p><img src="/resources/blog/stress_3/grafana-1.png" alt="Grafana long run" /></p>
+
+<p>Notifications were building up during the test. A better method than sleeping
+between loads, as mentioned in <a href="https://github.com/fluo-io/fluo-stress/issues/30">fluo-io/fluo-stress#30</a>, is still needed.</p>
+
+<h2 id="short-runs">Short runs</h2>
+
+<p>Before starting the long run, a few short runs loading 1 million few times were
+done with an empty table.</p>
+
+<p><img src="/resources/blog/stress_3/grafana-2.png" alt="Grafana short run" /></p>
+
+<h2 id="further-testing">Further testing</h2>
+
+<p>A long run of webindex will also be run on EC2 before releasing beta-2.</p>
+
+
+</div>
+
+<div>
+  <p class="text-muted">View all posts in the <a href="/news/">news archive</a></p>
+</div>
+
+          </div>
+      </div>
+      <div class="row">
+        <div class="col-sm-12 center-block">
+          <footer>
+            <hr/>
+            <p>
+            <a href="https://www.apache.org/foundation/contributing"><img
+              src="https://www.apache.org/images/SupportApache-small.png"
+              id="asf-logo" height="100" alt="Apache"/></a>
+            </p>
+            <p>
+            Copyright &copy; 2020 <a
+              href="https://www.apache.org">The&nbsp;Apache&nbsp;Software&nbsp;Foundation</a>.
+            Licensed under the <a
+              href="https://www.apache.org/licenses/">Apache&nbsp;License,&nbsp;Version&nbsp;2.0</a>
+            </p>
+            <p>
+            Apache®, the names of Apache projects and their logos, and the multicolor feather
+            logo are registered trademarks or trademarks of The Apache Software Foundation
+            in the United States and/or other countries.
+            </p>
+          </footer>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>
diff --git a/output/blog/2016/01/11/webindex-long-run/index.html b/output/blog/2016/01/11/webindex-long-run/index.html
new file mode 100644
index 0000000..bc6a13e
--- /dev/null
+++ b/output/blog/2016/01/11/webindex-long-run/index.html
@@ -0,0 +1,344 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+
+    <link href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/cosmo/bootstrap.min.css" rel="stylesheet" integrity="sha384-h21C2fcDk/eFsW9sC9h0dhokq5pDinLNklTKoxIZRUn3+hvmgQSffLLQ4G4l2eEr" crossorigin="anonymous">
+    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
+    <link rel="stylesheet" href="/css/fluo.css">
+    <link rel="canonical" href="https://fluo.apache.org//blog/2016/01/11/webindex-long-run/">
+    <link rel="icon" type="image/png" href="/resources/favicon.png">
+    
+    <title>Running Webindex for 3 days on EC2 | Apache Fluo</title>
+
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
+    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+    <!-- Place your <script> tags here. -->
+
+<script>window.twttr = (function(d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0],
+    t = window.twttr || {};
+  if (d.getElementById(id)) return t;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "https://platform.twitter.com/widgets.js";
+  fjs.parentNode.insertBefore(js, fjs);
+
+  t._e = [];
+  t.ready = function(f) {
+    t._e.push(f);
+  };
+
+  return t;
+}(document, "script", "twitter-wjs"));</script>
+
+  </head>
+  <body style="padding-top: 100px">
+    <nav id="fluo-nav" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <div class="navbar-toggle-wrapper visible-xs">
+            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".js-navbar-collapse">
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+            </button>
+          </div>
+          <a href="/" class="navbar-brand"><img id="fluo-img" height="40px" src="/resources/fluo-logo-dark.png" alt="Apache Fluo"></a>
+        </div>
+        <div class="collapse navbar-collapse js-navbar-collapse" style="margin-top: 20px">
+          <ul class="navbar-nav nav">
+            <li><a href="/releases/">Releases</a></li>
+            <li><a href="/tour/">Tour</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Docs<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/docs/fluo/1.2/">Fluo</a></li>
+                <li><a href="/docs/fluo-recipes/1.2/">Fluo Recipes</a></li>
+              </ul>
+            </li>
+            <li><a href="/api/">API</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Community<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/contactus/">Contact Us</a></li>
+                <li><a href="/news/">News Archive</a></li>
+                <li><a href="/people/">People</a></li>
+                <li><a href="/related-projects/">Related Projects</a></li>
+                <li><a href="/poweredby/">Powered By</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Contributing<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/how-to-contribute/">How To Contribute</a></li>
+                <li><a href="/release-process/">Release Process</a></li>
+              </ul>
+            </li>
+            <li><a href="/search/">Search</a></li>
+          </ul>
+          <ul class="navbar-nav nav navbar-right">
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#"><img alt="Apache Software Foundation" src="https://www.apache.org/images/feather-small.png" width="70"/><span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="https://www.apache.org">Apache Homepage</a></li>
+                <li><a href="https://www.apache.org/licenses/">License</a></li>
+                <li><a href="https://www.apache.org/foundation/sponsorship">Sponsorship</i></a></li>
+                <li><a href="https://www.apache.org/security">Security</a></li>
+                <li><a href="https://www.apache.org/foundation/thanks">Thanks</a></li>
+                <li><a href="https://www.apache.org/foundation/policies/conduct">Code of Conduct</a></li>
+                <li><a href="https://www.apache.org/events/current-event.html">Current Event</a></li>
+              </ul>
+            </li>
+          </ul>
+        </div>
+      </div>
+    </nav>
+    <div class="container">
+      <div class="row">
+          <div class="col-sm-12">
+            <div id="post-header">
+  <h1>Running Webindex for 3 days on EC2</h1>
+  <p class="text-muted">
+     
+    
+    11 Jan 2016
+  </p> 
+  <p><a class="twitter-share-button" href="https://twitter.com/intent/tweet?text=Running Webindex for 3 days on EC2&url=https://fluo.apache.org//blog/2016/01/11/webindex-long-run/&via=ApacheFluo&related=ApacheFluo" rel="nofollow" target="_blank" title="Share on Twitter">Twitter</a></p>
+</div>
+<div id="post-content">
+  <p>In preparation for the Fluo beta 2 release, <a href="http://github.com/fluo-io/webindex">Webindex</a>, an example
+Fluo application, was run on 24 EC2 m3-xlarge nodes (20 worker node) for 3
+days.  The experiment went well as Webindex indexed 178 million web pages and
+2.32 billion links. The average rate for the entire test was 698 pages/sec and
+8,943 links/sec.  A few problems with <a href="http://github.com/fluo-io/fluo-recipes">Fluo Recipes</a> and Webindex were
+discovered during the course of the test.</p>
+
+<h2 id="webindex-overview">Webindex Overview</h2>
+
+<p>Webindex indexes URLs from <a href="https://commoncrawl.org/">Common Crawl</a> data in multiple ways into an
+external <a href="http://accumulo.apache.org/">Accumulo</a> table. Webindex offers a simple web application
+for querying this external Accumulo table.  The following three questions can
+be answered from this web page.</p>
+
+<ul>
+  <li>Which page is the most linked to?</li>
+  <li>Which page in a domain is the most linked to and how many pages were seen for a domain?</li>
+  <li>For a given page, what links to it and how many links are there?</li>
+</ul>
+
+<p>In order to answer these questions, Webindex continually updates the following
+three indexes in an external Accumulo table.</p>
+
+<ul>
+  <li>A per domain index containing linked to counts in descending order.</li>
+  <li>A total index containing linked to counts for all pages in descending order.</li>
+  <li>A per page index containing the pages incoming and outgoing links and incoming link count.</li>
+</ul>
+
+<p>The following is a simple example of some of what Webindex does.  In order to
+keep it simple, the example below does not show everything Webindex does.</p>
+
+<ol>
+  <li>Content for <code class="language-plaintext highlighter-rouge">http://A.com</code> that links to <code class="language-plaintext highlighter-rouge">http://B.org</code> is loaded.</li>
+  <li>Content for <code class="language-plaintext highlighter-rouge">http://C.com</code> that links to <code class="language-plaintext highlighter-rouge">http://B.org</code> is loaded.</li>
+  <li>The inbound link count for <code class="language-plaintext highlighter-rouge">http://B.org</code> is computed as 2.</li>
+  <li><code class="language-plaintext highlighter-rouge">(2,http://B.org)</code> is inserted into the external domain index, total index, and page count.</li>
+  <li>Content for <code class="language-plaintext highlighter-rouge">http://C.com</code> that links to <code class="language-plaintext highlighter-rouge">http://B.org</code> is loaded.</li>
+  <li>The inbound link count for <code class="language-plaintext highlighter-rouge">http://B.org</code> is computed as 3.</li>
+  <li><code class="language-plaintext highlighter-rouge">(2,http://B.org)</code> is deleted from all the external indexes and <code class="language-plaintext highlighter-rouge">(3, http://B.org)</code> is inserted.</li>
+</ol>
+
+<h2 id="videos-from-run">Videos from run</h2>
+
+<p>During the course of the 3 day run, screenshots of different queries in the
+Webindex web application were taken every 6 minutes.  From these screenshots,
+the following videos were created showing Fluo in action. Keep in mind that as
+the counts are changing, the old count is deleted and a new count is inserted.
+If Fluo ever dropped the ball on this, it would leave both entries in the
+external index causing the same URL to show up twice with different counts.</p>
+
+<p>The video below shows querying for the most linked to page every 6 minutes.</p>
+
+<iframe width="715" height="402" src="https://www.youtube.com/embed/Munsucq1KXo" frameborder="0" allowfullscreen=""></iframe>
+
+<p>The video below shows querying for which pages at stackoverflow.com are the most
+linked to.  The count at the top is the total number of pages seen in the
+wikipedia.org domain.</p>
+
+<iframe width="715" height="402" src="https://www.youtube.com/embed/mJJNJbPN2EI" frameborder="0" allowfullscreen=""></iframe>
+
+<p>Videos were also created for <a href="http://youtu.be/9kvYzgg72Es">apache</a>,
+<a href="https://youtu.be/a-9_hnRprpQ">wikipedia</a>,
+<a href="https://youtu.be/IlJ95dVkLnk">github</a>, and <a href="https://youtu.be/D66nBP5QKS8">cnn</a></p>
+
+<p>Some custom scripts and <a href="https://github.com/sindresorhus/pageres-cli">pageres-cli</a> were used to generate the screenshots.
+Videos with a screenshot every minute are also available.  If interested in
+seeing these, contact the Fluo dev list.</p>
+
+<h2 id="grafana-plots">Grafana plots</h2>
+
+<p>The Grafana plots below are from the three day run. No plot of notifications
+queued is shown because processing of pages kept up and never fell behind. To
+understand the plots, below is a simple description of what the different
+observers do.  Observers are written by Fluo users, run by Fluo workers,  and
+respond to notifications and execute transactions.</p>
+
+<ul>
+  <li>The PageLoader runs in a Spark job and loads pages parsed from a CommonCrawl
+data file.</li>
+  <li>The PageObserver processes updates to pages, determines what links changed,
+and pushes link updates to other observers.</li>
+  <li>The CollisionFreeMapObserver computes linked to counts and pushes the counts
+to the ExportObserver.  This observer also rolls up domain counts and pushes
+those for export (calling different code and operating on a different part of
+the table).</li>
+  <li>The ExportObserver updates the external Accumulo index table in a fault
+tolerant manner.</li>
+</ul>
+
+<p><img src="/resources/blog/webindex_run_201601/grafana-1.png" alt="Grafana long run" /></p>
+
+<h2 id="problems-found">Problems Found</h2>
+
+<p>The test was useful in that it showed Fluo is probably ready for another
+release. While no show stoppers were found, it was also useful in that many
+areas where improvements could be made were found.</p>
+
+<p>During the first day of the test, it was noticed that major compactions in
+Accumulo were sucking up a lot of resources.  Each node only had four cores.
+Before the test were started, compaction ratios were adjusted.   Fluo’s table
+was set to 1.5 and the external index table was set to 2.  These ratios coupled
+with the fact that the compactions were using gzip caused really high load,
+which eventually caused processing to drop to around 500 pages/sec.  While the
+test was running the compaction ratios were adjusted to 2 and 3, and compaction
+was set use snappy.  This caused performance to increase.  A few more cores
+would have been nice.</p>
+
+<p>The Spark load jobs have to parse, validate, and clean up all of the links.
+This seems to be very CPU intensive and may be the current bottleneck (see
+<a href="https://github.com/fluo-io/webindex/issues/41">fluo-io/webindex#41</a>). It seems that as Accumulo’s CPU load
+increased (because of compactions) that the load rate dropped.  As an
+experiment during the 2nd day of the test, loaders were stopped and two loaders
+per node were started.  This resulted in a higher load rate of around 1000
+pages/sec.  In order to ensure the test would run over night, this was only
+done for a brief period before reverting to one loader per node.  Again, more
+cores would have been nice.  In place of more cores, looking into optimizing this
+and getting a higher load rate would nice.  Another issue noticed with loading
+was <a href="https://github.com/fluo-io/webindex/issues/39">fluo-io/webindex#39</a>.</p>
+
+<p>While monitoring the test it became apparent that split points for the Fluo
+table were not equally spreading computation across all tablet servers. See
+<a href="https://github.com/fluo-io/fluo-recipes/issues/44">fluo-io/fluo-recipes#44</a> for more information.  Somewhere around the
+2nd day of the test, tablets were merged and new splits points were added while
+the test was running.  This worked really well.  Another issue found relating
+to split points was <a href="https://github.com/fluo-io/webindex/issues/40">fluo-io/webindex#40</a>.</p>
+
+<p>The lack of metrics about Conditional mutations from Accumulo tablet servers
+makes it hard to track down problems where many Fluo transactions are hitting a
+few tablet servers.  The bad split points mentioned in the previous paragraph
+are one example of this type of problem.  <a href="https://issues.apache.org/jira/browse/ACCUMULO-4107">ACCUMULO-4107</a> was
+created to address this issue.</p>
+
+<p>Some skew was noticed as a result of YARN’s placement decisions.  This was
+caused by coordination task displacing CPU intensive task.  For example
+Fluo has three task types that run in YARN : Oracle, Twill Application manager,
+and Workers.  Ideally there would be one Worker per node. However, because of
+the Oracle and Application task, YARN may place two workers on a single node.
+Opened <a href="https://github.com/fluo-io/fluo/issues/600">fluo-io/fluo#600</a>.</p>
+
+<p>During the test, worker task were dying or being killed because of memory
+overuse.  Twill/YARN automatically restarted the workers and the test kept
+running w/o much problem.  It would be good to avoid this since this causes
+transaction recovery or rollback.  See <a href="https://github.com/fluo-io/webindex/issues/42">fluo-io/webindex#42</a>.</p>
+
+<p>The test identified a possible need for <a href="https://github.com/fluo-io/fluo-recipes/issues/45">HashedRow recipe</a> to more
+evenly distribute processing of page related transactions.</p>
+
+<h2 id="test-environment">Test environment</h2>
+
+<p>The following configuration and software were used for this test.</p>
+
+<ul>
+  <li>24 m3.xlarge EC2 nodes. 15G ram, 4 cores, and 2x35G SSD.</li>
+  <li>Centos 7</li>
+  <li>Hadoop 2.6.0</li>
+  <li>Zookeeper 3.4.7</li>
+  <li>Accumulo 1.8.0-SNAPSHOT with <a href="https://issues.apache.org/jira/browse/ACCUMULO-4066">ACCUMULO-4066</a> patches</li>
+  <li>Fluo beta-2-SNAPSHOT 78bcdb7</li>
+  <li>Fluo recipes beta-1-SNAPSHOT 96858d0</li>
+  <li>Fluo deploy 43bf08f</li>
+  <li>2G data cache and 768M index cache in Accumulo</li>
+  <li>64 threads in Accumulo client pool and readahead pool</li>
+  <li>128 worker threads and 4G per worker (initially went to 5G and 6G as test was running).</li>
+  <li>20 Load task running in Spark</li>
+</ul>
+
+<h2 id="storage-statistics">Storage statistics</h2>
+
+<p>After the three day run completed, the external index table had 4.71 billion
+entries and used 191G in HDFS.   A compaction was forced on the Accumulo table,
+which caused old versions and deleted data to be dropped.  After the compaction
+the table had 4.02 billion entries and used 159G in HDFS.  The table was being
+frequently updated by Fluo and that’s why so much data was dropped by the
+compaction.  The way Accumulo works, compactions were continually happening
+while test was running.  So the total amount of data dropped from the table as
+a result of updates is unknown.</p>
+
+<p>The table used by Fluo had 1.46 billion entries at the conclusion of the test
+and used 93G in HDFS.</p>
+
+<h2 id="future-work">Future Work</h2>
+
+<p>Most Fluo scale testing to date has been on EC2.  It would be really nice to
+test Fluo on bare metal.  We are going to experiment with getting <a href="https://github.com/fluo-io/fluo-deploy">Fluo
+Deploy</a> to work on bare metal where
+CentOS 7 is already installed.</p>
+
+<p>Seeing Application level stats plotted in Grafana, as outlined in
+<a href="https://github.com/fluo-io/fluo/issues/534">fluo-io/fluo#534</a>, would be really nice.  For webindex this would
+include things like URLs exported per second, domains exported per second, etc.
+This issue was not identified during this test, it just would have been really
+nice to have this information while running the test.</p>
+
+<p>Eventually this test needs to be run on 10, 20, and 40 nodes to measure the
+relative performance increase as the number of nodes is increased.  Ideally
+this test would run on bare metal.</p>
+
+
+</div>
+
+<div>
+  <p class="text-muted">View all posts in the <a href="/news/">news archive</a></p>
+</div>
+
+          </div>
+      </div>
+      <div class="row">
+        <div class="col-sm-12 center-block">
+          <footer>
+            <hr/>
+            <p>
+            <a href="https://www.apache.org/foundation/contributing"><img
+              src="https://www.apache.org/images/SupportApache-small.png"
+              id="asf-logo" height="100" alt="Apache"/></a>
+            </p>
+            <p>
+            Copyright &copy; 2020 <a
+              href="https://www.apache.org">The&nbsp;Apache&nbsp;Software&nbsp;Foundation</a>.
+            Licensed under the <a
+              href="https://www.apache.org/licenses/">Apache&nbsp;License,&nbsp;Version&nbsp;2.0</a>
+            </p>
+            <p>
+            Apache®, the names of Apache projects and their logos, and the multicolor feather
+            logo are registered trademarks or trademarks of The Apache Software Foundation
+            in the United States and/or other countries.
+            </p>
+          </footer>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>
diff --git a/output/blog/2016/05/17/webindex-long-run-2/index.html b/output/blog/2016/05/17/webindex-long-run-2/index.html
new file mode 100644
index 0000000..b415f5f
--- /dev/null
+++ b/output/blog/2016/05/17/webindex-long-run-2/index.html
@@ -0,0 +1,439 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+
+    <link href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/cosmo/bootstrap.min.css" rel="stylesheet" integrity="sha384-h21C2fcDk/eFsW9sC9h0dhokq5pDinLNklTKoxIZRUn3+hvmgQSffLLQ4G4l2eEr" crossorigin="anonymous">
+    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
+    <link rel="stylesheet" href="/css/fluo.css">
+    <link rel="canonical" href="https://fluo.apache.org//blog/2016/05/17/webindex-long-run-2/">
+    <link rel="icon" type="image/png" href="/resources/favicon.png">
+    
+    <title>Running Webindex for 3 days on EC2 Again | Apache Fluo</title>
+
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
+    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+    <!-- Place your <script> tags here. -->
+
+<script>window.twttr = (function(d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0],
+    t = window.twttr || {};
+  if (d.getElementById(id)) return t;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "https://platform.twitter.com/widgets.js";
+  fjs.parentNode.insertBefore(js, fjs);
+
+  t._e = [];
+  t.ready = function(f) {
+    t._e.push(f);
+  };
+
+  return t;
+}(document, "script", "twitter-wjs"));</script>
+
+  </head>
+  <body style="padding-top: 100px">
+    <nav id="fluo-nav" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <div class="navbar-toggle-wrapper visible-xs">
+            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".js-navbar-collapse">
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+            </button>
+          </div>
+          <a href="/" class="navbar-brand"><img id="fluo-img" height="40px" src="/resources/fluo-logo-dark.png" alt="Apache Fluo"></a>
+        </div>
+        <div class="collapse navbar-collapse js-navbar-collapse" style="margin-top: 20px">
+          <ul class="navbar-nav nav">
+            <li><a href="/releases/">Releases</a></li>
+            <li><a href="/tour/">Tour</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Docs<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/docs/fluo/1.2/">Fluo</a></li>
+                <li><a href="/docs/fluo-recipes/1.2/">Fluo Recipes</a></li>
+              </ul>
+            </li>
+            <li><a href="/api/">API</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Community<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/contactus/">Contact Us</a></li>
+                <li><a href="/news/">News Archive</a></li>
+                <li><a href="/people/">People</a></li>
+                <li><a href="/related-projects/">Related Projects</a></li>
+                <li><a href="/poweredby/">Powered By</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Contributing<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/how-to-contribute/">How To Contribute</a></li>
+                <li><a href="/release-process/">Release Process</a></li>
+              </ul>
+            </li>
+            <li><a href="/search/">Search</a></li>
+          </ul>
+          <ul class="navbar-nav nav navbar-right">
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#"><img alt="Apache Software Foundation" src="https://www.apache.org/images/feather-small.png" width="70"/><span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="https://www.apache.org">Apache Homepage</a></li>
+                <li><a href="https://www.apache.org/licenses/">License</a></li>
+                <li><a href="https://www.apache.org/foundation/sponsorship">Sponsorship</i></a></li>
+                <li><a href="https://www.apache.org/security">Security</a></li>
+                <li><a href="https://www.apache.org/foundation/thanks">Thanks</a></li>
+                <li><a href="https://www.apache.org/foundation/policies/conduct">Code of Conduct</a></li>
+                <li><a href="https://www.apache.org/events/current-event.html">Current Event</a></li>
+              </ul>
+            </li>
+          </ul>
+        </div>
+      </div>
+    </nav>
+    <div class="container">
+      <div class="row">
+          <div class="col-sm-12">
+            <div id="post-header">
+  <h1>Running Webindex for 3 days on EC2 Again</h1>
+  <p class="text-muted">
+     
+    
+    17 May 2016
+  </p> 
+  <p><a class="twitter-share-button" href="https://twitter.com/intent/tweet?text=Running Webindex for 3 days on EC2 Again&url=https://fluo.apache.org//blog/2016/05/17/webindex-long-run-2/&via=ApacheFluo&related=ApacheFluo" rel="nofollow" target="_blank" title="Share on Twitter">Twitter</a></p>
+</div>
+<div id="post-content">
+  <p>Another long run of <a href="https://github.com/fluo-io/webindex">Webindex</a> was done to test changes made since beta-2
+and it went well.  This run performed much better than the previous the
+<a href="/blog/2016/01/11/webindex-long-run/">previous long run of Webindex</a>.  The experiment was run on 21 EC2
+m3-xlarge nodes (20 worker nodes).  Each node has 4 cores and 15G of RAM.
+273.6 million web pages and 3.54 billion links were processed from 8,000 common
+crawl files (each file is around 330M).  It took around 80 hours to load the
+files resulting in a rate of ~950 web page/sec and ~12,292 links/sec.</p>
+
+<p>This blog post outlines the changes to Fluo, Fluo Recipes, and Webindex that
+made this long run so much better than the last one.  For anyone writing
+applications on Fluo, the changes to Webindex that resulted in improvements may
+be of interest.  Unreleased versions of Fluo and Fluo Recipes were used for
+this test, so the improvements are not easily available to users yet.  However
+we hope to release new versions soon.</p>
+
+<h2 id="rate-limited-page-loading">Rate limited page loading</h2>
+
+<p>The plot below shows how many transactions per second were executed by
+different observers.  Please refer to the <a href="/blog/2016/01/11/webindex-long-run/#webindex-overview">overview in the last
+post</a> for a description of the observers and see the <a href="/blog/2016/01/11/webindex-long-run/#grafana-plots">previous
+plots</a>.  The transactions per second is very even compared to the
+last run.   The document load rate was limited to a maximum of 1,000 pages per
+second.  There was no limit in the last run, it just ran as fast as it could.</p>
+
+<p><img src="/resources/blog/webindex_run_201605/wilr2-tps.png" alt="Transactions per second plot" /></p>
+
+<p>The PageLoader is not show in the plot above because of a bug with it in the
+historical view.  In the recent Grafana view it plotted fine and basically
+mirrored the PageObserver.</p>
+
+<p>The ability to rate limit page loading was added in <a href="https://github.com/fluo-io/webindex/issues/70">webindex-70</a>.  For this
+test run 20 Spark load task were run, each limited to 50 pages per second.  The
+latest code can sustain much higher rates initially (see <a href="https://github.com/fluo-io/fluo/issues/593#issuecomment-213630145">this
+comment</a>).  However once a lot of data builds up,
+compactions and scans in Accumulo start taking more CPU.  A rate of 1,000 pages
+per second was chosen as something that could be sustained over multiple days.
+The CPU plots below show that in the beginning there is idle CPU to spare, but
+that does not last.</p>
+
+<h2 id="cpu-utilization">CPU Utilization</h2>
+
+<p>In order to get higher throughput changes were made to reduce CPU usage and
+evenly spread CPU usage across the cluster.  The following plot shows the CPU
+usage of all nodes across the cluster during the test.  Unfortunately this data
+was not kept for the previous run.  One issue that caused problems in the
+previous run was hotpots, where one node was swamped while others were under
+utilized.  In this run the utilization across the cluster was fairly uniform.</p>
+
+<p><img src="/resources/blog/webindex_run_201605/wilr2-cpu.png" alt="CPU usage plots" /></p>
+
+<p>The following evenly spread computation :</p>
+
+<ul>
+  <li>A short hash was appended to URLs used as the row key for pages.  This
+spread web pages evenly across the cluster.  These changes were made in
+<a href="https://github.com/fluo-io/webindex/issues/49">webindex-49</a> and <a href="https://github.com/fluo-io/fluo-recipes/issues/45">fluo-recipes-45</a>.</li>
+  <li>The webindex query table schema was changed in <a href="https://github.com/fluo-io/webindex/issues/71">webindex-71</a> to allow large
+rows to split.  Before this change compactions of large tablets that could
+not split were causing uneven CPU utilization.</li>
+</ul>
+
+<p>The following reduced CPU usage :</p>
+
+<ul>
+  <li>The two Accumulo tables (Fluo and query table) were configured to use Snappy
+instead of GZip.</li>
+  <li>In <a href="https://github.com/fluo-io/fluo/issues/623">fluo-623</a> the Fluo iterators that run in Accumulo were optimized to
+sometimes seek.  This resulted in scanning less data in Accumulo to execute
+transactions and find notifications.</li>
+  <li>In <a href="https://github.com/fluo-io/webindex/issues/54">webindex-54</a> parsing links was sped up, using less CPU.</li>
+  <li>Accumulo 1.7.1 was used which has <a href="https://issues.apache.org/jira/browse/ACCUMULO-4066">ACCUMULO-4066</a>.  This made processing
+conditional mutations less CPU intensive.</li>
+</ul>
+
+<p>There were 20 worker nodes and 1 master node.  The master node was running the
+namenode, zookeeper, resource manager, Accumulo master, Grafana, and InfluxDB.
+The master node was normally lightly loaded.  However, at one point InfluxDB
+was burning lots of CPU for an extended period.  This impacted the namenode,
+which impacted the entire cluster.  Not sure what InfluxDB was doing, maybe
+something like a compaction.  May put it on its own node in future test.</p>
+
+<p>The following table shows how the 8,000 files were loaded by 5 spark jobs.
+After each Spark job completed the two tables were compacted.  Compacting the
+query table prevented expensive compactions from occurring during the next load.
+Compacting the Fluo table cleaned up transaction bookkeeping data.  The
+compactions explain why the CPU utilization is low when the jobs first start.</p>
+
+<table>
+  <thead>
+    <tr>
+      <th>Num files</th>
+      <th>Start time</th>
+      <th>Duration</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td>2000</td>
+      <td>5/11 22:32:41</td>
+      <td>20.8h</td>
+    </tr>
+    <tr>
+      <td>2000</td>
+      <td>5/12 19:34:38</td>
+      <td>20.7h</td>
+    </tr>
+    <tr>
+      <td>2000</td>
+      <td>5/13 18:19:09</td>
+      <td>17.7h</td>
+    </tr>
+    <tr>
+      <td>1000</td>
+      <td>5/14 15:09:43</td>
+      <td>10.5h</td>
+    </tr>
+    <tr>
+      <td>1000</td>
+      <td>5/14 03:10:13</td>
+      <td>10.5h</td>
+    </tr>
+  </tbody>
+</table>
+
+<h2 id="preventing-yarn-from-killing-workers">Preventing YARN from killing workers</h2>
+
+<p>In the previous run Fluo worker processes were constantly being killed by YARN
+for exceeding memory limits.  This would cause transactions to have to be
+rolled back.  With the new asynchronous commit changes discussed below a lot of
+committing transactions could be in flight.  Frequently killing processes with
+lots of committing transactions would cause lots of rollbacks.</p>
+
+<p>This problem was remedied in <a href="https://github.com/fluo-io/fluo/issues/593">fluo-593</a> and <a href="https://github.com/fluo-io/zetten/pull/139">zetten-139</a>.  For this run the
+workers were given 5.5G with 1.5G reserved.  With these settings no workers
+were killed by YARN.  When workers are killed it causes upward spikes in the
+memory plots.  There are no spikes of individual workers like this in the
+memory plots below.</p>
+
+<p><img src="/resources/blog/webindex_run_201605/wilr2-memory.png" alt="Memory usage plots" /></p>
+
+<p>Twill reserved memory was set by adding the following to yarn-site.xml.
+<a href="https://github.com/fluo-io/fluo/issues/671">fluo-671</a> was opened to investigate a better way of setting this.</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  &lt;property&gt;
+    &lt;name&gt;twill.java.reserved.memory.mb&lt;/name&gt;
+    &lt;value&gt;1536&lt;/value&gt;
+  &lt;/property&gt;
+</code></pre></div></div>
+
+<p>The following was set in fluo.properties.</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  io.fluo.worker.max.memory.mb=5632
+</code></pre></div></div>
+
+<p>This resulted in workers running with a max heap size of 4096M.  The processes
+will grow larger than 4096M, but will not be killed by YARN unless exceeding
+5632M.</p>
+
+<h2 id="asynchronous-commits">Asynchronous commits</h2>
+
+<p>In <a href="https://github.com/fluo-io/fluo/issues/593">fluo-593</a> commit processing was rewritten using an asynchronous model.
+There is no longer a single thread walking each transaction through the commit
+steps.  Instead many transactions are put on a queue for each step and
+processed by a few threads.  This allows many more transactions to be
+concurrently committing.   With this model a temporary pause or high CPU load
+on a tablet server does not lower throughput.  Before this change, when
+tservers spiked to 100% this would impact many committing transactions and the
+threads running those transactions.  Those threads would wait.  This would lead
+to lower utilization across the cluster.</p>
+
+<p>The plot below shows the number of transactions committing.  As the CPU
+utilization increase, so does the number of committing transactions.  With the
+high CPU utilization it takes longer for individual transactions to commit, but
+throughput is maintained.</p>
+
+<p><img src="/resources/blog/webindex_run_201605/wilr2-committing.png" alt="Committing transactions plot" /></p>
+
+<p>Unfortunately the plot does not have all data because it was based on recent
+data which ages off.  The historical plots for committing transactions is not
+yet implemented.  See <a href="https://github.com/fluo-io/fluo/issues/653">fluo-653</a>.</p>
+
+<p>Asynchronous commits offer higher throughput but also increase the commit time
+of individual transactions.  As outlined in <a href="https://github.com/fluo-io/fluo/issues/650">fluo-650</a> this can lead to
+increased lock wait time when one transaction is waiting on another.  This
+problem was partially solved by <a href="https://github.com/fluo-io/fluo/issues/654">fluo-654</a> which executes older notifications
+first.  For Webindex, executing older transactions first works well for the
+page data.  However for the Collision Free Maps and Export Queue buckets that
+are always being updated, it does not work so well.   A transaction processing
+these buckets will usually have lock wait.  The number of buckets was set at
+half the total number of worker threads with the thought that this would
+usually leave some threads to process pages.  Not sure if this was helpful.  A
+better solution to <a href="https://github.com/fluo-io/fluo/issues/650">fluo-650</a> is needed.  Below is a plot of lock wait time.</p>
+
+<p><img src="/resources/blog/webindex_run_201605/wilr2-lockwait.png" alt="Lock wait time plot" /></p>
+
+<h2 id="read-and-write-plots">Read and Write plots</h2>
+
+<p>Below are plots of the amount data read and written per second by different
+Observers.</p>
+
+<p><img src="/resources/blog/webindex_run_201605/wilr2-erps.png" alt="Cells read per second" />
+<img src="/resources/blog/webindex_run_201605/wilr2-esps.png" alt="Cells written per second" /></p>
+
+<h2 id="accumulo-settings">Accumulo Settings</h2>
+
+<p>The following were executed in the Accumulo shell after initializing Fluo but
+before starting the first Spark load job.</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>config -t webindex -s table.compaction.major.ratio=1.75
+config -t webindex -s table.file.compress.blocksize.index=256K
+config -t webindex -s table.file.compress.blocksize=64K
+config -t webindex -s table.file.compress.type=snappy
+config -t webindex_search -s table.file.compress.type=snappy
+config -t webindex_search -s table.split.threshold=512M
+config -t accumulo.metadata -s table.durability=flush
+config -t accumulo.root -s table.durability=flush
+config -s tserver.wal.replication=2
+config -s table.file.replication=2
+</code></pre></div></div>
+
+<p>Fluo used the <code class="language-plaintext highlighter-rouge">webindex</code> table.  A blocksize of 64k was selected to speed up
+random lookups a bit.  A compaction ratio of 1.75 was chosen so that the Fluo
+table would compact more frequently.  Compactions of the Fluo table run the
+Fluo garbage collection iterator.</p>
+
+<p>Webindex uses the <code class="language-plaintext highlighter-rouge">webindex_search</code> table for queries and Fluo exports to it.
+This table uses real data like domain names and URLs, therefore the data does
+not spread evenly.  Lowering the split from the default of 1G to 512M makes
+tablets with popular domains or URLs split and spread across the cluster
+sooner.</p>
+
+<p>Data replication was set to 2 because the cluster did not have a lot of space
+and the default of 3 may have filled it up.</p>
+
+<p>The Accumulo tserver were configured with a data cache of 3G and an index cache
+of 512M.</p>
+
+<p>At some point later in the test, the number of compaction threads in Accumulo was
+adjusted from 3 to 2.  This was done because there were only 4 cores and having
+compactions use most of them could be disruptive.</p>
+
+<h2 id="fluo-settings">Fluo Settings</h2>
+
+<p>Fluo was configured with 128 threads per worker and 20 workers.</p>
+
+<p>For the test the following was set in fluo.properties.  This settings
+determines the maximum amount of transactions that will be held in memory to
+commit asynchronously.</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>io.fluo.impl.tx.commit.memory=104857600
+</code></pre></div></div>
+
+<h2 id="webindex-settings">Webindex settings</h2>
+
+<p>Webindex was configured with the following settings.</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>numTablets: 60
+numBuckets: 1020
+</code></pre></div></div>
+
+<p>Each type of data started with 60 tablets.  The types of data are page data,
+url inlink counts, domain url counts, and the export queue.  1,020 is multiple
+of 60 giving each tablet the same number of buckets.  With 60 tablets, each
+tablet server started off with 3 tablets per data type.   Some of the data
+types split as the test ran.</p>
+
+<h2 id="final-data-size">Final Data Size</h2>
+
+<p>After loading all of the data the two tables were compacted.  The size of the
+tables is shown below.</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>root@instance16&gt; du webindex
+         291,525,943,501 [webindex]
+root@instance16&gt; du webindex_search
+         271,106,371,976 [webindex_search]
+</code></pre></div></div>
+
+<p>Postmortem analysis of the RFiles from this test run lead to work on
+<a href="https://issues.apache.org/jira/browse/ACCUMULO-1124">ACCUMULO-1124</a> and <a href="https://issues.apache.org/jira/browse/ACCUMULO-4314">ACCUMULO-4314</a>.</p>
+
+<h2 id="software-used">Software used</h2>
+
+<ul>
+  <li>Centos 7</li>
+  <li>Hadoop 2.6.3</li>
+  <li>Zookeeper 3.4.8</li>
+  <li>Accumulo 1.7.1</li>
+  <li>Fluo <a href="https://github.com/fluo-io/fluo/commit/82301a143140a55dae52f308e218e69edc7ec963">82301a1</a></li>
+  <li>Fluo Recipes <a href="https://github.com/fluo-io/fluo-recipes/commit/dd1c37313d272ff7647040e43ed4261c70939a9b">dd1c373</a></li>
+  <li>Webindex <a href="https://github.com/fluo-io/webindex/commit/1f9462d0938c7ca98d26de911ddb57e270a6a75f">1f9462d</a></li>
+  <li>Zetten <a href="https://github.com/fluo-io/zetten/commit/43e9cdea8d3c37d532796a994011e579f7495767">43e9cde</a></li>
+</ul>
+
+
+</div>
+
+<div>
+  <p class="text-muted">View all posts in the <a href="/news/">news archive</a></p>
+</div>
+
+          </div>
+      </div>
+      <div class="row">
+        <div class="col-sm-12 center-block">
+          <footer>
+            <hr/>
+            <p>
+            <a href="https://www.apache.org/foundation/contributing"><img
+              src="https://www.apache.org/images/SupportApache-small.png"
+              id="asf-logo" height="100" alt="Apache"/></a>
+            </p>
+            <p>
+            Copyright &copy; 2020 <a
+              href="https://www.apache.org">The&nbsp;Apache&nbsp;Software&nbsp;Foundation</a>.
+            Licensed under the <a
+              href="https://www.apache.org/licenses/">Apache&nbsp;License,&nbsp;Version&nbsp;2.0</a>
+            </p>
+            <p>
+            Apache®, the names of Apache projects and their logos, and the multicolor feather
+            logo are registered trademarks or trademarks of The Apache Software Foundation
+            in the United States and/or other countries.
+            </p>
+          </footer>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>
diff --git a/output/blog/2016/06/02/fluo-moving-to-apache/index.html b/output/blog/2016/06/02/fluo-moving-to-apache/index.html
new file mode 100644
index 0000000..3ffabb8
--- /dev/null
+++ b/output/blog/2016/06/02/fluo-moving-to-apache/index.html
@@ -0,0 +1,155 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+
+    <link href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/cosmo/bootstrap.min.css" rel="stylesheet" integrity="sha384-h21C2fcDk/eFsW9sC9h0dhokq5pDinLNklTKoxIZRUn3+hvmgQSffLLQ4G4l2eEr" crossorigin="anonymous">
+    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
+    <link rel="stylesheet" href="/css/fluo.css">
+    <link rel="canonical" href="https://fluo.apache.org//blog/2016/06/02/fluo-moving-to-apache/">
+    <link rel="icon" type="image/png" href="/resources/favicon.png">
+    
+    <title>Fluo is moving to Apache | Apache Fluo</title>
+
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
+    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+    <!-- Place your <script> tags here. -->
+
+<script>window.twttr = (function(d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0],
+    t = window.twttr || {};
+  if (d.getElementById(id)) return t;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "https://platform.twitter.com/widgets.js";
+  fjs.parentNode.insertBefore(js, fjs);
+
+  t._e = [];
+  t.ready = function(f) {
+    t._e.push(f);
+  };
+
+  return t;
+}(document, "script", "twitter-wjs"));</script>
+
+  </head>
+  <body style="padding-top: 100px">
+    <nav id="fluo-nav" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <div class="navbar-toggle-wrapper visible-xs">
+            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".js-navbar-collapse">
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+            </button>
+          </div>
+          <a href="/" class="navbar-brand"><img id="fluo-img" height="40px" src="/resources/fluo-logo-dark.png" alt="Apache Fluo"></a>
+        </div>
+        <div class="collapse navbar-collapse js-navbar-collapse" style="margin-top: 20px">
+          <ul class="navbar-nav nav">
+            <li><a href="/releases/">Releases</a></li>
+            <li><a href="/tour/">Tour</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Docs<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/docs/fluo/1.2/">Fluo</a></li>
+                <li><a href="/docs/fluo-recipes/1.2/">Fluo Recipes</a></li>
+              </ul>
+            </li>
+            <li><a href="/api/">API</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Community<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/contactus/">Contact Us</a></li>
+                <li><a href="/news/">News Archive</a></li>
+                <li><a href="/people/">People</a></li>
+                <li><a href="/related-projects/">Related Projects</a></li>
+                <li><a href="/poweredby/">Powered By</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Contributing<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/how-to-contribute/">How To Contribute</a></li>
+                <li><a href="/release-process/">Release Process</a></li>
+              </ul>
+            </li>
+            <li><a href="/search/">Search</a></li>
+          </ul>
+          <ul class="navbar-nav nav navbar-right">
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#"><img alt="Apache Software Foundation" src="https://www.apache.org/images/feather-small.png" width="70"/><span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="https://www.apache.org">Apache Homepage</a></li>
+                <li><a href="https://www.apache.org/licenses/">License</a></li>
+                <li><a href="https://www.apache.org/foundation/sponsorship">Sponsorship</i></a></li>
+                <li><a href="https://www.apache.org/security">Security</a></li>
+                <li><a href="https://www.apache.org/foundation/thanks">Thanks</a></li>
+                <li><a href="https://www.apache.org/foundation/policies/conduct">Code of Conduct</a></li>
+                <li><a href="https://www.apache.org/events/current-event.html">Current Event</a></li>
+              </ul>
+            </li>
+          </ul>
+        </div>
+      </div>
+    </nav>
+    <div class="container">
+      <div class="row">
+          <div class="col-sm-12">
+            <div id="post-header">
+  <h1>Fluo is moving to Apache</h1>
+  <p class="text-muted">
+     
+    
+    02 Jun 2016
+  </p> 
+  <p><a class="twitter-share-button" href="https://twitter.com/intent/tweet?text=Fluo is moving to Apache&url=https://fluo.apache.org//blog/2016/06/02/fluo-moving-to-apache/&via=ApacheFluo&related=ApacheFluo" rel="nofollow" target="_blank" title="Share on Twitter">Twitter</a></p>
+</div>
+<div id="post-content">
+  <p>Fluo was recently <a href="https://wiki.apache.org/incubator/FluoProposal">proposed</a> as an Apache Podling.  The <a href="https://lists.apache.org/thread.html/Zt804544sb0m1wi">vote</a> passed and
+now we are in the process of moving to Apache.  See <a href="https://issues.apache.org/jira/browse/INFRA-11900">INFRA-11900</a> for more
+details.</p>
+
+<p>Currently the only thing setup in Apache land is the mailing list.  If you
+would like to subscribe to the new list, send an email to
+<a href="mailto:dev-subscribe@fluo.incubator.apache.org">dev-subscribe@fluo.incubator.apache.org</a>.  <a href="https://lists.apache.org/list.html?dev@fluo.apache.org">Archives</a> of the list are also
+available.</p>
+
+
+</div>
+
+<div>
+  <p class="text-muted">View all posts in the <a href="/news/">news archive</a></p>
+</div>
+
+          </div>
+      </div>
+      <div class="row">
+        <div class="col-sm-12 center-block">
+          <footer>
+            <hr/>
+            <p>
+            <a href="https://www.apache.org/foundation/contributing"><img
+              src="https://www.apache.org/images/SupportApache-small.png"
+              id="asf-logo" height="100" alt="Apache"/></a>
+            </p>
+            <p>
+            Copyright &copy; 2020 <a
+              href="https://www.apache.org">The&nbsp;Apache&nbsp;Software&nbsp;Foundation</a>.
+            Licensed under the <a
+              href="https://www.apache.org/licenses/">Apache&nbsp;License,&nbsp;Version&nbsp;2.0</a>
+            </p>
+            <p>
+            Apache®, the names of Apache projects and their logos, and the multicolor feather
+            logo are registered trademarks or trademarks of The Apache Software Foundation
+            in the United States and/or other countries.
+            </p>
+          </footer>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>
diff --git a/output/blog/2016/11/10/immutable-bytes/index.html b/output/blog/2016/11/10/immutable-bytes/index.html
new file mode 100644
index 0000000..18f5512
--- /dev/null
+++ b/output/blog/2016/11/10/immutable-bytes/index.html
@@ -0,0 +1,326 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+
+    <link href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/cosmo/bootstrap.min.css" rel="stylesheet" integrity="sha384-h21C2fcDk/eFsW9sC9h0dhokq5pDinLNklTKoxIZRUn3+hvmgQSffLLQ4G4l2eEr" crossorigin="anonymous">
+    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
+    <link rel="stylesheet" href="/css/fluo.css">
+    <link rel="canonical" href="https://fluo.apache.org//blog/2016/11/10/immutable-bytes/">
+    <link rel="icon" type="image/png" href="/resources/favicon.png">
+    
+    <title>Java needs an immutable byte string | Apache Fluo</title>
+
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
+    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+    <!-- Place your <script> tags here. -->
+
+<script>window.twttr = (function(d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0],
+    t = window.twttr || {};
+  if (d.getElementById(id)) return t;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "https://platform.twitter.com/widgets.js";
+  fjs.parentNode.insertBefore(js, fjs);
+
+  t._e = [];
+  t.ready = function(f) {
+    t._e.push(f);
+  };
+
+  return t;
+}(document, "script", "twitter-wjs"));</script>
+
+  </head>
+  <body style="padding-top: 100px">
+    <nav id="fluo-nav" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <div class="navbar-toggle-wrapper visible-xs">
+            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".js-navbar-collapse">
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+            </button>
+          </div>
+          <a href="/" class="navbar-brand"><img id="fluo-img" height="40px" src="/resources/fluo-logo-dark.png" alt="Apache Fluo"></a>
+        </div>
+        <div class="collapse navbar-collapse js-navbar-collapse" style="margin-top: 20px">
+          <ul class="navbar-nav nav">
+            <li><a href="/releases/">Releases</a></li>
+            <li><a href="/tour/">Tour</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Docs<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/docs/fluo/1.2/">Fluo</a></li>
+                <li><a href="/docs/fluo-recipes/1.2/">Fluo Recipes</a></li>
+              </ul>
+            </li>
+            <li><a href="/api/">API</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Community<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/contactus/">Contact Us</a></li>
+                <li><a href="/news/">News Archive</a></li>
+                <li><a href="/people/">People</a></li>
+                <li><a href="/related-projects/">Related Projects</a></li>
+                <li><a href="/poweredby/">Powered By</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Contributing<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/how-to-contribute/">How To Contribute</a></li>
+                <li><a href="/release-process/">Release Process</a></li>
+              </ul>
+            </li>
+            <li><a href="/search/">Search</a></li>
+          </ul>
+          <ul class="navbar-nav nav navbar-right">
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#"><img alt="Apache Software Foundation" src="https://www.apache.org/images/feather-small.png" width="70"/><span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="https://www.apache.org">Apache Homepage</a></li>
+                <li><a href="https://www.apache.org/licenses/">License</a></li>
+                <li><a href="https://www.apache.org/foundation/sponsorship">Sponsorship</i></a></li>
+                <li><a href="https://www.apache.org/security">Security</a></li>
+                <li><a href="https://www.apache.org/foundation/thanks">Thanks</a></li>
+                <li><a href="https://www.apache.org/foundation/policies/conduct">Code of Conduct</a></li>
+                <li><a href="https://www.apache.org/events/current-event.html">Current Event</a></li>
+              </ul>
+            </li>
+          </ul>
+        </div>
+      </div>
+    </nav>
+    <div class="container">
+      <div class="row">
+          <div class="col-sm-12">
+            <div id="post-header">
+  <h1>Java needs an immutable byte string</h1>
+  <p class="text-muted">
+     Author : Keith Turner <br>  
+     Reviewer(s) : Christopher Tubbs, Mike Walch <br> 
+    10 Nov 2016
+  </p> 
+  <p><a class="twitter-share-button" href="https://twitter.com/intent/tweet?text=Java needs an immutable byte string&url=https://fluo.apache.org//blog/2016/11/10/immutable-bytes/&via=ApacheFluo&related=ApacheFluo" rel="nofollow" target="_blank" title="Share on Twitter">Twitter</a></p>
+</div>
+<div id="post-content">
+  <h2 id="fluo-data-model-and-transactions">Fluo Data Model and Transactions</h2>
+
+<p>Fluo uses a <a href="/tour/data-model/">data model</a> composed of key/values.  Each key has four fields :
+<em>row</em>,<em>family</em>,<em>qualifier</em>,<em>visibility</em>.  Each of these key fields is a sequence of bytes.  Fluo
+transactions read key/values from a snapshot of a table.  Any changes a transaction makes is
+buffered until commit.  At the time of commit the changes are only made if no other transaction
+modified any of the key values.</p>
+
+<p>While designing the Fluo API we were uncertain about making Fluo’s basic <a href="/tour/data-pojos/">POJOs</a> mutable or
+immutable.  In the end we decided to go with immutable types to make writing correct Fluo code
+easier.  One of the POJOs we created was <a href="https://javadoc.io/page/org.apache.fluo/fluo-api/1.2.0/org/apache/fluo/api/data/Bytes.html">Bytes</a>,  an immutable wrapper around a byte array.  We
+also created <a href="https://javadoc.io/page/org.apache.fluo/fluo-api/1.2.0/org/apache/fluo/api/data/Bytes.BytesBuilder.html">BytesBuilder</a>, which is analogous to StringBuilder, and makes it easy and efficient
+to construct Bytes.</p>
+
+<h3 id="what-about-the-copies">What about the copies?</h3>
+
+<p>Bytes requires a defensive copy at creation time.  When we were designing Fluo’s API we were worried
+about this at first.  However a simple truth became apparent.  If the API took a mutable type, then
+all boundary points between the user and Fluo would require defensive copies.  For example assume
+Fluo’s API took byte arrays and consider the following code.</p>
+
+<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">//A Fluo transaction</span>
+<span class="nc">Transaction</span> <span class="n">tx</span> <span class="o">=</span> <span class="o">...</span>
+<span class="kt">byte</span><span class="o">[]</span> <span class="n">row</span> <span class="o">=</span> <span class="o">...</span>
+
+<span class="n">tx</span><span class="o">.</span><span class="na">set</span><span class="o">(</span><span class="n">row</span><span class="o">,</span> <span class="n">column1</span><span class="o">,</span> <span class="n">value1</span><span class="o">);</span>
+<span class="n">tx</span><span class="o">.</span><span class="na">set</span><span class="o">(</span><span class="n">row</span><span class="o">,</span> <span class="n">column2</span><span class="o">,</span> <span class="n">value2</span><span class="o">);</span>
+<span class="n">tx</span><span class="o">.</span><span class="na">set</span><span class="o">(</span><span class="n">row</span><span class="o">,</span> <span class="n">column3</span><span class="o">,</span> <span class="n">value3</span><span class="o">);</span>
+</code></pre></div></div>
+
+<p>Fluo will buffer changes until a transaction is committed.  In the example above since Fluo accepts
+a mutable row, it would be prudent to do a defensive copy each time <code class="language-plaintext highlighter-rouge">set()</code> is called above.</p>
+
+<p>In the code below where an immutable byte array wrapper is used, the calls to <code class="language-plaintext highlighter-rouge">set()</code> do not need to
+do a defensive copy.  So when comparing the two examples, the immutable byte wrapper results in less
+defensive copies.</p>
+
+<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">//A Fluo transaction</span>
+<span class="nc">Transaction</span> <span class="n">tx</span> <span class="o">=</span> <span class="o">...</span>
+<span class="nc">Bytes</span> <span class="n">row</span> <span class="o">=</span> <span class="o">...</span>
+
+<span class="n">tx</span><span class="o">.</span><span class="na">set</span><span class="o">(</span><span class="n">row</span><span class="o">,</span> <span class="n">column1</span><span class="o">,</span> <span class="n">value1</span><span class="o">);</span>
+<span class="n">tx</span><span class="o">.</span><span class="na">set</span><span class="o">(</span><span class="n">row</span><span class="o">,</span> <span class="n">column2</span><span class="o">,</span> <span class="n">value2</span><span class="o">);</span>
+<span class="n">tx</span><span class="o">.</span><span class="na">set</span><span class="o">(</span><span class="n">row</span><span class="o">,</span> <span class="n">column3</span><span class="o">,</span> <span class="n">value3</span><span class="o">);</span>
+</code></pre></div></div>
+
+<p>We really did not want to create Bytes and BytesBuilder types, however we could not find what we
+needed in Java’s standard libraries.  The following sections discuss some of the options we
+considered.</p>
+
+<h2 id="why-not-use-string">Why not use String?</h2>
+
+<p>Java’s String type is an immutable wrapper around a char array.  In order to store a byte array in a
+String, Java must decode the byte array using a character set.  Some sequences of bytes do not map
+in some characters sets.  Therefore, trying to stuff arbitrary binary data in a String can corrupt
+the data.  The following little program shows this, it will print <code class="language-plaintext highlighter-rouge">false</code>.</p>
+
+<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    <span class="kt">byte</span> <span class="n">bytes1</span><span class="o">[]</span> <span class="o">=</span> <span class="k">new</span> <span class="kt">byte</span><span class="o">[</span><span class="mi">256</span><span class="o">];</span>
+    <span class="k">for</span><span class="o">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span> <span class="n">i</span><span class="o">&lt;</span><span class="mi">255</span><span class="o">;</span> <span class="n">i</span><span class="o">++)</span>
+      <span class="n">bytes1</span><span class="o">[</span><span class="n">i</span><span class="o">]</span> <span class="o">=</span> <span class="o">(</span><span class="kt">byte</span><span class="o">)</span><span class="n">i</span><span class="o">;</span>
+
+    <span class="kt">byte</span> <span class="n">bytes2</span><span class="o">[]</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">String</span><span class="o">(</span><span class="n">bytes1</span><span class="o">).</span><span class="na">getBytes</span><span class="o">();</span>
+
+    <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="nc">Arrays</span><span class="o">.</span><span class="na">equals</span><span class="o">(</span><span class="n">bytes1</span><span class="o">,</span> <span class="n">bytes2</span><span class="o">));</span>
+</code></pre></div></div>
+
+<p>String can be made to work by specifying an appropriate character set. The following program will
+print <code class="language-plaintext highlighter-rouge">true</code>.  However, this is error prone and inefficient.  It’s error prone in the case where the
+character set is wrong or omitted.  It’s inefficient because it results in copying from byte arrays
+to char arrays and visa versa.  Also, char arrays use twice as much memory.</p>
+
+<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    <span class="kt">byte</span> <span class="n">bytes1</span><span class="o">[]</span> <span class="o">=</span> <span class="k">new</span> <span class="kt">byte</span><span class="o">[</span><span class="mi">256</span><span class="o">];</span>
+    <span class="k">for</span><span class="o">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span> <span class="n">i</span><span class="o">&lt;</span><span class="mi">255</span><span class="o">;</span> <span class="n">i</span><span class="o">++)</span>
+      <span class="n">bytes1</span><span class="o">[</span><span class="n">i</span><span class="o">]</span> <span class="o">=</span> <span class="o">(</span><span class="kt">byte</span><span class="o">)</span><span class="n">i</span><span class="o">;</span>
+
+    <span class="nc">String</span> <span class="n">str</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">String</span><span class="o">(</span><span class="n">bytes1</span><span class="o">,</span> <span class="nc">StandardCharsets</span><span class="o">.</span><span class="na">ISO_8859_1</span><span class="o">);</span>
+    <span class="kt">byte</span> <span class="n">bytes2</span><span class="o">[]</span> <span class="o">=</span> <span class="n">str</span><span class="o">.</span><span class="na">getBytes</span><span class="o">(</span><span class="nc">StandardCharsets</span><span class="o">.</span><span class="na">ISO_8859_1</span><span class="o">);</span>
+
+    <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="nc">Arrays</span><span class="o">.</span><span class="na">equals</span><span class="o">(</span><span class="n">bytes1</span><span class="o">,</span> <span class="n">bytes2</span><span class="o">));</span>
+</code></pre></div></div>
+
+<h2 id="why-not-use-bytebuffer">Why not use ByteBuffer?</h2>
+
+<p>A read only ByteBuffer might seem like it would fit the bill of an immutable byte array wrapper.
+However, the following program shows two ways that ByteBuffer falls short.  ByteBuffers are great
+for I/O, but it would not be prudent to use them when immutability is desired.</p>
+
+<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    <span class="kt">byte</span><span class="o">[]</span> <span class="n">bytes1</span> <span class="o">=</span> <span class="k">new</span> <span class="kt">byte</span><span class="o">[]</span> <span class="o">{</span><span class="mi">1</span><span class="o">,</span><span class="mi">2</span><span class="o">,</span><span class="mi">3</span><span class="o">,(</span><span class="kt">byte</span>< [...]
+    <span class="nc">ByteBuffer</span> <span class="n">bb1</span> <span class="o">=</span> <span class="nc">ByteBuffer</span><span class="o">.</span><span class="na">wrap</span><span class="o">(</span><span class="n">bytes1</span><span class="o">).</span><span class="na">asReadOnlyBuffer</span><span class="o">();</span>
+
+    <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">bb1</span><span class="o">.</span><span class="na">hashCode</span><span class="o">());</span>
+    <span class="n">bytes1</span><span class="o">[</span><span class="mi">2</span><span class="o">]=</span><span class="mi">89</span><span class="o">;</span>
+    <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">bb1</span><span class="o">.</span><span class="na">hashCode</span><span class="o">());</span>
+    <span class="n">bb1</span><span class="o">.</span><span class="na">get</span><span class="o">();</span>
+    <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">bb1</span><span class="o">.</span><span class="na">hashCode</span><span class="o">());</span>
+</code></pre></div></div>
+
+<p>The program above prints the following, which is less than ideal :</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>747721
+830367
+26786
+</code></pre></div></div>
+
+<p>This little program shows two things.  First, the only guarantee we are getting from
+<code class="language-plaintext highlighter-rouge">asReadOnlyBuffer()</code> is that <code class="language-plaintext highlighter-rouge">bb1</code> can not be used to modify <code class="language-plaintext highlighter-rouge">bytes1</code>.  However, the originator of
+the read only buffer can still modify the wrapped byte array.   Java’s String and Fluo’s Bytes avoid
+this by always copying data into an internal private array that never escapes.</p>
+
+<p>The second issue is that <code class="language-plaintext highlighter-rouge">bb1</code> has a position and calling <code class="language-plaintext highlighter-rouge">bb1.get()</code> changes this position.
+Changing the position conceptually changes the contents of the ByteBuffer.  This is why <code class="language-plaintext highlighter-rouge">hashCode()</code>
+returns something different after <code class="language-plaintext highlighter-rouge">bb1.get()</code> is called.  So even though <code class="language-plaintext highlighter-rouge">bb1</code> does not enable
+mutating <code class="language-plaintext highlighter-rouge">bytes1</code>, <code class="language-plaintext highlighter-rouge">bb1</code> is itself mutable.</p>
+
+<h2 id="why-not-use-protobufs-bytestring">Why not use Protobuf’s ByteString?</h2>
+
+<p><a href="https://developers.google.com/protocol-buffers/">Protocol Buffers</a> has a beautiful implementation of an immutable byte array wrapper called
+<a href="https://developers.google.com/protocol-buffers/docs/reference/java/com/google/protobuf/ByteString">ByteString</a>.  I would encourage its use when possible.  I discovered this jewel after Bytes was
+implemented in Fluo.  Using it was considered, however in Fluo’s case its not really appropriate to
+use for two reasons.  First, any library designer should try to minimize what transitive dependencies
+they force on users.  Internally Fluo does not currently use Protocol Buffers in its implementation,
+so this would be a new dependency for Fluo users.  The second reason is going to require some
+background to explain.</p>
+
+<p>Technologies like <a href="https://www.osgi.org">OSGI</a> and <a href="http://openjdk.java.net/projects/jigsaw/">Jigsaw</a> seek to modularize Java libraries and provide dependency
+isolation.  Dependency isolation allows a user to use a library without having to share a libraries
+dependencies.  For example, consider the following hypothetical scenario.</p>
+
+<ul>
+  <li>Fluo’s implementation uses Protobuf version 2.5</li>
+  <li>Fluo user code uses Protobuf version 1.8</li>
+</ul>
+
+<p>Without dependency isolation, the user must converge dependencies and make their application and
+Fluo use the same version of Protobuf.  Sometimes this works without issue, but sometimes things
+will break because Protobuf dropped, changed, or added a method.</p>
+
+<p>With dependency isolation, Fluo’s implementation and Fluo user code can easily use different versions
+of Protobuf.  This is only true as long as Fluo’s API does not use Protobuf.  So, this is the second
+reason that Fluo should not use classes from Protobuf in its API.  If Fluo used Protobuf in its API
+then it forces the user to have to converge dependencies, even if they are using OSGI or Jigsaw.</p>
+
+<h2 id="java-should-have-an-immutable-byte-array-wrapper">Java should have an immutable byte array wrapper</h2>
+
+<p>So far, the following arguments have been presented:</p>
+
+<ul>
+  <li>An immutable byte array wrapper is useful and needed.</li>
+  <li>Java does not provide a good immutable byte array wrapper.</li>
+  <li>Using an immutable byte array wrapper from library X in library Y’s API may be problematic.</li>
+</ul>
+
+<p>These arguments all point to the need for an immutable byte array wrapper to exist in Java. This
+need could also be satisfied by a library outside of Java with some restrictions. Assume a new
+library called Lib Immutable Byte Array Wrapper (libibaw) was created.  In order for libibaw to be
+used in other libraries APIs, it would need to promise the following.</p>
+
+<ul>
+  <li>No dependencies other than Java.</li>
+  <li>Backwards compatibility.</li>
+</ul>
+
+<p>The reason backwards compatibility is important is that it would make dependency convergence super
+easy.  The following situation shows this.</p>
+
+<ul>
+  <li>Fluo uses libibaw 1.2 in its API</li>
+  <li>Fluo user code uses libibaw 1.1.</li>
+</ul>
+
+<p>If libibaw promises backward compatibility, then all the user needs to do is use version 1.2 of
+libibaw.  With the promise of backwards compatibility, using version 1.2 will not break the users
+code.</p>
+
+<p>Having a library would be nice, but having something in Java would minimize copies.  Outside
+of Java there will inevitably be multiple implementations and going between them will require a
+copy.  For example if a user uses Fluo and Protobuf they may be forced to copy Fluo’s Bytes to
+Protobuf’s ByteString. If Protobuf and Fluo both used an immutable byte sequence type from Java, this
+would not be needed.</p>
+
+
+</div>
+
+<div>
+  <p class="text-muted">View all posts in the <a href="/news/">news archive</a></p>
+</div>
+
+          </div>
+      </div>
+      <div class="row">
+        <div class="col-sm-12 center-block">
+          <footer>
+            <hr/>
+            <p>
+            <a href="https://www.apache.org/foundation/contributing"><img
+              src="https://www.apache.org/images/SupportApache-small.png"
+              id="asf-logo" height="100" alt="Apache"/></a>
+            </p>
+            <p>
+            Copyright &copy; 2020 <a
+              href="https://www.apache.org">The&nbsp;Apache&nbsp;Software&nbsp;Foundation</a>.
+            Licensed under the <a
+              href="https://www.apache.org/licenses/">Apache&nbsp;License,&nbsp;Version&nbsp;2.0</a>
+            </p>
+            <p>
+            Apache®, the names of Apache projects and their logos, and the multicolor feather
+            logo are registered trademarks or trademarks of The Apache Software Foundation
+            in the United States and/or other countries.
+            </p>
+          </footer>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>
diff --git a/output/blog/2016/12/22/spark-load/index.html b/output/blog/2016/12/22/spark-load/index.html
new file mode 100644
index 0000000..9d8356a
--- /dev/null
+++ b/output/blog/2016/12/22/spark-load/index.html
@@ -0,0 +1,365 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+
+    <link href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/cosmo/bootstrap.min.css" rel="stylesheet" integrity="sha384-h21C2fcDk/eFsW9sC9h0dhokq5pDinLNklTKoxIZRUn3+hvmgQSffLLQ4G4l2eEr" crossorigin="anonymous">
+    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
+    <link rel="stylesheet" href="/css/fluo.css">
+    <link rel="canonical" href="https://fluo.apache.org//blog/2016/12/22/spark-load/">
+    <link rel="icon" type="image/png" href="/resources/favicon.png">
+    
+    <title>Loading data into Fluo using Apache Spark | Apache Fluo</title>
+
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
+    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+    <!-- Place your <script> tags here. -->
+
+<script>window.twttr = (function(d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0],
+    t = window.twttr || {};
+  if (d.getElementById(id)) return t;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "https://platform.twitter.com/widgets.js";
+  fjs.parentNode.insertBefore(js, fjs);
+
+  t._e = [];
+  t.ready = function(f) {
+    t._e.push(f);
+  };
+
+  return t;
+}(document, "script", "twitter-wjs"));</script>
+
+  </head>
+  <body style="padding-top: 100px">
+    <nav id="fluo-nav" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <div class="navbar-toggle-wrapper visible-xs">
+            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".js-navbar-collapse">
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+            </button>
+          </div>
+          <a href="/" class="navbar-brand"><img id="fluo-img" height="40px" src="/resources/fluo-logo-dark.png" alt="Apache Fluo"></a>
+        </div>
+        <div class="collapse navbar-collapse js-navbar-collapse" style="margin-top: 20px">
+          <ul class="navbar-nav nav">
+            <li><a href="/releases/">Releases</a></li>
+            <li><a href="/tour/">Tour</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Docs<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/docs/fluo/1.2/">Fluo</a></li>
+                <li><a href="/docs/fluo-recipes/1.2/">Fluo Recipes</a></li>
+              </ul>
+            </li>
+            <li><a href="/api/">API</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Community<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/contactus/">Contact Us</a></li>
+                <li><a href="/news/">News Archive</a></li>
+                <li><a href="/people/">People</a></li>
+                <li><a href="/related-projects/">Related Projects</a></li>
+                <li><a href="/poweredby/">Powered By</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Contributing<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/how-to-contribute/">How To Contribute</a></li>
+                <li><a href="/release-process/">Release Process</a></li>
+              </ul>
+            </li>
+            <li><a href="/search/">Search</a></li>
+          </ul>
+          <ul class="navbar-nav nav navbar-right">
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#"><img alt="Apache Software Foundation" src="https://www.apache.org/images/feather-small.png" width="70"/><span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="https://www.apache.org">Apache Homepage</a></li>
+                <li><a href="https://www.apache.org/licenses/">License</a></li>
+                <li><a href="https://www.apache.org/foundation/sponsorship">Sponsorship</i></a></li>
+                <li><a href="https://www.apache.org/security">Security</a></li>
+                <li><a href="https://www.apache.org/foundation/thanks">Thanks</a></li>
+                <li><a href="https://www.apache.org/foundation/policies/conduct">Code of Conduct</a></li>
+                <li><a href="https://www.apache.org/events/current-event.html">Current Event</a></li>
+              </ul>
+            </li>
+          </ul>
+        </div>
+      </div>
+    </nav>
+    <div class="container">
+      <div class="row">
+          <div class="col-sm-12">
+            <div id="post-header">
+  <h1>Loading data into Fluo using Apache Spark</h1>
+  <p class="text-muted">
+     Author : Keith Turner <br>  
+     Reviewer(s) : Mike Walch <br> 
+    22 Dec 2016
+  </p> 
+  <p><a class="twitter-share-button" href="https://twitter.com/intent/tweet?text=Loading data into Fluo using Apache Spark&url=https://fluo.apache.org//blog/2016/12/22/spark-load/&via=ApacheFluo&related=ApacheFluo" rel="nofollow" target="_blank" title="Share on Twitter">Twitter</a></p>
+</div>
+<div id="post-content">
+  <p><a href="https://spark.apache.org">Apache Spark</a> can be used to preprocess and load batches of data into Fluo.  For example
+Spark could be used to group data within a batch and then Fluo transactions could load groups of
+related data. This blog post offers some tips to help you get started writing to Fluo from Spark.</p>
+
+<h3 id="executing-load-transactions-in-spark">Executing load transactions in Spark</h3>
+
+<p>Spark automatically serializes Java objects that are needed for remote execution.  When trying to
+use Fluo with Spark its important to understand what will serialize properly and what will not.
+Classes used to load data into Fluo like <a href="https://javadoc.io/page/org.apache.fluo/fluo-api/1.2.0/org/apache/fluo/api/client/FluoClient.html">FluoClient</a> and <a href="https://javadoc.io/page/org.apache.fluo/fluo-api/1.2.0/org/apache/fluo/api/client/LoaderExecutor.html">LoaderExecutor</a> are not suitable for
+serialization.  These classes may have thread pools, resources in Zookeeper, transactions that are
+committing in the background, etc .  Therefore these classes must be instantiated at each remote process
+Spark creates.  One way to do this is with Spark’s <code class="language-plaintext highlighter-rouge">foreachParition</code> method.  This method will
+execute code locally at each RDD partition. Within each partition, a <a href="https://javadoc.io/page/org.apache.fluo/fluo-api/1.2.0/org/apache/fluo/api/client/LoaderExecutor.html">LoaderExecutor</a>
+can be created.  That’s what the example below shows.</p>
+
+<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> 
+<span class="kd">public</span> <span class="kt">void</span> <span class="nf">dedupeAndLoad</span><span class="o">(</span><span class="nc">JavaRDD</span><span class="o">&lt;</span><span class="nc">Document</span><span class="o">&gt;</span> <span class="n">docRdd</span><span class="o">,</span> <span class="kt">int</span> <span class="n">numPartitions</span><span class="o">)</span> <span class="o">{</span>  
+
+  <span class="c1">// Remove duplicate documents.</span>
+  <span class="n">docRdd</span> <span class="o">=</span> <span class="n">docRdd</span><span class="o">.</span><span class="na">distinct</span><span class="o">(</span><span class="n">numPartitions</span><span class="o">);</span>
+  
+  <span class="c1">// Execute load transactions for unique documents.  Iin Java 8 lambda syntax below, </span>
+  <span class="c1">// iter is of type Iterator&lt;Document&gt;</span>
+  <span class="n">docRdd</span><span class="o">.</span><span class="na">foreachPartition</span><span class="o">(</span><span class="n">iter</span><span class="o">-&gt;{</span>
+    <span class="c1">// Assume fluo.properties file was submitted with application</span>
+    <span class="nc">FluoConfiguration</span> <span class="n">fconf</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">FluoConfiguration</span><span class="o">(</span><span class="k">new</span> <span class="nc">File</span><span class="o">(</span><span class="s">"fluo.properties"</span><span class="o">));</span>
+    <span class="k">try</span><span class="o">(</span><span class="nc">FluoClient</span> <span class="n">client</span> <span class="o">=</span> <span class="nc">FluoFactory</span><span class="o">.</span><span class="na">newClient</span><span class="o">(</span><span class="n">fconf</span><span class="o">);</span> 
+        <span class="nc">LoaderExecutor</span> <span class="n">le</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="na">newLoaderExecutor</span><span class="o">())</span>
+    <span class="o">{</span>
+      <span class="k">while</span><span class="o">(</span><span class="n">iter</span><span class="o">.</span><span class="na">hasNext</span><span class="o">())</span> <span class="o">{</span>
+        <span class="n">le</span><span class="o">.</span><span class="na">execute</span><span class="o">(</span><span class="k">new</span> <span class="nc">DocumentLoader</span><span class="o">(</span><span class="n">iter</span><span class="o">.</span><span class="na">next</span><span class="o">()));</span>
+      <span class="o">}</span>
+    <span class="o">}</span>
+  <span class="o">});</span>
+<span class="o">}</span>
+</code></pre></div></div>
+
+<p>The example above requires that <code class="language-plaintext highlighter-rouge">fluo.properties</code> is available locally for each
+partition.  This can be accomplished with <code class="language-plaintext highlighter-rouge">--files</code> option when launching a Spark job.</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>spark-submit --class myApp.Load --files &lt;fluo props dir&gt;/fluo.properties myApp.jar
+</code></pre></div></div>
+
+<p>If FluoConfiguration were serializable, then Spark could automatically serialize and make a
+FluoConfiguration object available for each partition.  However, FluoConfiguration is not
+serializable as of Fluo 1.0.0.  This will be fixed in future releases of Fluo.  See <a href="https://github.com/apache/incubator-fluo/issues/813">#813</a>
+for details and workarounds for 1.0.0.</p>
+
+<h3 id="initializing-fluo-table">Initializing Fluo table</h3>
+
+<p>If you have a lot of existing data, then you could use Spark to initialize your Fluo table with
+historical data. There are two general ways to do this.  The simplest way is to use the
+<a href="http://accumulo.apache.org/1.8/apidocs/org/apache/accumulo/core/client/mapred/AccumuloOutputFormat.html">AccumuloOutputFormat</a> to write <a href="http://accumulo.apache.org/1.8/apidocs/org/apache/accumulo/core/data/Mutation.html">Mutation</a> objects to Accumulo.  However, you need to write data
+using the Fluo data format.  Fluo provides an easy way to do this using the <a href="https://github.com/apache/incubator-fluo/blob/rel/fluo-1.0.0-incubating/modules/mapreduce/src/main/java/org/apache/fluo/mapreduce/FluoMutationGenerator.java">FluoMutationGenerator</a>.</p>
+
+<p>A slightly more complex way to initialize a Fluo table is using Accumulo’s bulk load mechanism.
+Bulk load is the process of generating Accumulo RFile’s containing Key/Values in a Spark job. Those
+files are then loaded into an Accumulo table.   This can be faster, but its more complex because it
+requires the user to properly partition data in their Spark job.  Ideally, these partitions would
+consist of non-overlapping ranges of Accumulo keys with roughly even amounts of data.  The default
+partitioning methods in Spark will not accomplish this.</p>
+
+<p>When following the bulk load approach, you would write <a href="http://accumulo.apache.org/1.8/apidocs/org/apache/accumulo/core/data/Key.html">Key</a> and <a href="http://accumulo.apache.org/1.8/apidocs/org/apache/accumulo/core/data/Value.html">Value</a> objects using the
+<a href="http://accumulo.apache.org/1.8/apidocs/org/apache/accumulo/core/client/mapred/AccumuloFileOutputFormat.html">AccumuloFileOutputFormat</a>. Fluo provides the <a href="https://github.com/apache/incubator-fluo/blob/rel/fluo-1.0.0-incubating/modules/mapreduce/src/main/java/org/apache/fluo/mapreduce/FluoKeyValueGenerator.java">FluoKeyValueGenerator</a> to create key/values in the
+Fluo data format.  Fluo Recipes builds on this and provides code that makes it easy to bulk import
+into Accumulo.  The <a href="https://javadoc.io/page/org.apache.fluo/fluo-recipes-spark/1.2.0/org/apache/fluo/recipes/spark/FluoSparkHelper.html#bulkImportRcvToFluo-org.apache.spark.api.java.JavaPairRDD-org.apache.fluo.recipes.spark.FluoSparkHelper.BulkImportOptions-">FluoSparkHelper.bulkImportRcvToFluo()</a> method will do the following :</p>
+
+<ul>
+  <li>Repartition data using the split points in the Fluo table</li>
+  <li>Convert data into expected format for a Fluo table</li>
+  <li>Create an RFile for each partition in a specified temp dir</li>
+  <li>Bulk import the RFiles into the Fluo table</li>
+</ul>
+
+<p>The <a href="https://github.com/apache/fluo-examples/tree/main/webindex">Webindex</a> example uses bulk load to initialize its Fluo table using the code in Fluo Recipes.
+Webindex uses multiple <a href="/docs/fluo-recipes/1.0.0-incubating/cfm/">Collision Free Maps</a> and initializes them using
+<a href="https://javadoc.io/page/org.apache.fluo/fluo-recipes-core/1.2.0/org/apache/fluo/recipes/core/map/CollisionFreeMap.html#getInitializer-java.lang.String-int-org.apache.fluo.recipes.core.serialization.SimpleSerializer-">CollisionFreeMap.getInitializer()</a>.  Webindex uses Spark to initialize the Fluo table with
+historical data.  Webindex also uses Spark to execute load transactions in parallel for
+incrementally loading data.</p>
+
+<h3 id="packaging-your-code-to-run-in-spark">Packaging your code to run in Spark</h3>
+
+<p>One simple way to execute your Spark code is to create a shaded jar.  This shaded jar should contain
+: Accumulo client code, Fluo client code, Zookeeper client code, and your Application code.  It
+would be best if the shaded jar contained the versions of Accumulo, Fluo, and Zookeeper running on
+the target system.  One way to achieve this goal is to make it easy for users of your Fluo
+application to build the shaded jar themselves.  The examples below shows a simple bash script and
+Maven pom file that achieve this goal.</p>
+
+<p>There is no need to include Spark code in the shaded jar as this will be provided by the Spark
+runtime environment.   Depending on your Spark environment, Hadoop client code may also be provided.
+Therefore, Hadoop may not need to be included in the shaded jar. One way to exclude these from the
+shaded jars is to make the scope of these dependencies <code class="language-plaintext highlighter-rouge">provided</code>, which is what the example does.
+You may also want to consider excluding other libraries that are provided in the Spark env like
+Guava, log4j, etc.</p>
+
+<div class="language-xml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>
+<span class="nt">&lt;project</span> <span class="na">xmlns=</span><span class="s">"http://maven.apache.org/POM/4.0.0"</span>
+<span class="na">xmlns:xsi=</span><span class="s">"http://www.w3.org/2001/XMLSchema-instance"</span>
+<span class="na">xsi:schemaLocation=</span><span class="s">"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"</span><span class="nt">&gt;</span>
+  <span class="nt">&lt;modelVersion&gt;</span>4.0.0<span class="nt">&lt;/modelVersion&gt;</span>
+
+  <span class="nt">&lt;groupId&gt;</span>com.foo<span class="nt">&lt;/groupId&gt;</span>
+  <span class="nt">&lt;artifactId&gt;</span>fluoAppShaded<span class="nt">&lt;/artifactId&gt;</span>
+  <span class="nt">&lt;version&gt;</span>0.0.1-SNAPSHOT<span class="nt">&lt;/version&gt;</span>
+  <span class="nt">&lt;packaging&gt;</span>jar<span class="nt">&lt;/packaging&gt;</span>
+
+  <span class="nt">&lt;name&gt;</span>Shaded Fluo App<span class="nt">&lt;/name&gt;</span>
+
+  <span class="nt">&lt;properties&gt;</span>
+    <span class="nt">&lt;accumulo.version&gt;</span>1.7.2<span class="nt">&lt;/accumulo.version&gt;</span>
+    <span class="nt">&lt;fluo.version&gt;</span>1.0.0-incubating<span class="nt">&lt;/fluo.version&gt;</span>
+    <span class="nt">&lt;zookeeper.version&gt;</span>3.4.9<span class="nt">&lt;/zookeeper.version&gt;</span>
+  <span class="nt">&lt;/properties&gt;</span>
+
+  <span class="nt">&lt;build&gt;</span>
+    <span class="nt">&lt;plugins&gt;</span>
+      <span class="nt">&lt;plugin&gt;</span>
+        <span class="nt">&lt;groupId&gt;</span>org.apache.maven.plugins<span class="nt">&lt;/groupId&gt;</span>
+        <span class="nt">&lt;artifactId&gt;</span>maven-shade-plugin<span class="nt">&lt;/artifactId&gt;</span>
+        <span class="nt">&lt;executions&gt;</span>
+          <span class="nt">&lt;execution&gt;</span>
+            <span class="nt">&lt;goals&gt;</span>
+              <span class="nt">&lt;goal&gt;</span>shade<span class="nt">&lt;/goal&gt;</span>
+            <span class="nt">&lt;/goals&gt;</span>
+            <span class="nt">&lt;phase&gt;</span>package<span class="nt">&lt;/phase&gt;</span>
+            <span class="nt">&lt;configuration&gt;</span>
+              <span class="nt">&lt;shadedArtifactAttached&gt;</span>true<span class="nt">&lt;/shadedArtifactAttached&gt;</span>
+              <span class="nt">&lt;shadedClassifierName&gt;</span>shaded<span class="nt">&lt;/shadedClassifierName&gt;</span>
+              <span class="nt">&lt;filters&gt;</span>
+                <span class="nt">&lt;filter&gt;</span>
+                  <span class="nt">&lt;artifact&gt;</span>*:*<span class="nt">&lt;/artifact&gt;</span>
+                  <span class="nt">&lt;excludes&gt;</span>
+                    <span class="nt">&lt;exclude&gt;</span>META-INF/*.SF<span class="nt">&lt;/exclude&gt;</span>
+                    <span class="nt">&lt;exclude&gt;</span>META-INF/*.DSA<span class="nt">&lt;/exclude&gt;</span>
+                    <span class="nt">&lt;exclude&gt;</span>META-INF/*.RSA<span class="nt">&lt;/exclude&gt;</span>
+                  <span class="nt">&lt;/excludes&gt;</span>
+                <span class="nt">&lt;/filter&gt;</span>
+              <span class="nt">&lt;/filters&gt;</span>
+            <span class="nt">&lt;/configuration&gt;</span>
+          <span class="nt">&lt;/execution&gt;</span>
+        <span class="nt">&lt;/executions&gt;</span>
+      <span class="nt">&lt;/plugin&gt;</span>
+    <span class="nt">&lt;/plugins&gt;</span>
+  <span class="nt">&lt;/build&gt;</span>
+
+  <span class="c">&lt;!--
+       The provided scope is used for dependencies that should not end up in
+       the shaded jar.  The shaded jar is used to run Spark jobs. The Spark 
+       launcher will provided Spark and Hadoop dependencies, so they are not
+       needed in the shaded jar.
+  --&gt;</span>
+
+  <span class="nt">&lt;dependencies&gt;</span>
+    <span class="c">&lt;!-- The dependency on your Fluo application code.  Version of your app could be made configurable. --&gt;</span>
+    <span class="nt">&lt;dependency&gt;</span>
+      <span class="nt">&lt;groupId&gt;</span>com.foo<span class="nt">&lt;/groupId&gt;</span>
+      <span class="nt">&lt;artifactId&gt;</span>fluoApp<span class="nt">&lt;/artifactId&gt;</span>
+      <span class="nt">&lt;version&gt;</span>1.2.3<span class="nt">&lt;/version&gt;</span>
+    <span class="nt">&lt;/dependency&gt;</span>
+    <span class="nt">&lt;dependency&gt;</span>
+      <span class="nt">&lt;groupId&gt;</span>org.apache.fluo<span class="nt">&lt;/groupId&gt;</span>
+      <span class="nt">&lt;artifactId&gt;</span>fluo-api<span class="nt">&lt;/artifactId&gt;</span>
+      <span class="nt">&lt;version&gt;</span>${fluo.version}<span class="nt">&lt;/version&gt;</span>
+    <span class="nt">&lt;/dependency&gt;</span>
+    <span class="nt">&lt;dependency&gt;</span>
+      <span class="nt">&lt;groupId&gt;</span>org.apache.fluo<span class="nt">&lt;/groupId&gt;</span>
+      <span class="nt">&lt;artifactId&gt;</span>fluo-core<span class="nt">&lt;/artifactId&gt;</span>
+      <span class="nt">&lt;version&gt;</span>${fluo.version}<span class="nt">&lt;/version&gt;</span>
+    <span class="nt">&lt;/dependency&gt;</span>
+    <span class="nt">&lt;dependency&gt;</span>
+      <span class="nt">&lt;groupId&gt;</span>org.apache.accumulo<span class="nt">&lt;/groupId&gt;</span>
+      <span class="nt">&lt;artifactId&gt;</span>accumulo-core<span class="nt">&lt;/artifactId&gt;</span>
+      <span class="nt">&lt;version&gt;</span>${accumulo.version}<span class="nt">&lt;/version&gt;</span>
+    <span class="nt">&lt;/dependency&gt;</span>
+    <span class="nt">&lt;dependency&gt;</span>
+      <span class="nt">&lt;groupId&gt;</span>org.apache.zookeeper<span class="nt">&lt;/groupId&gt;</span>
+      <span class="nt">&lt;artifactId&gt;</span>zookeeper<span class="nt">&lt;/artifactId&gt;</span>
+      <span class="nt">&lt;version&gt;</span>${zookeeper.version}<span class="nt">&lt;/version&gt;</span>
+    <span class="nt">&lt;/dependency&gt;</span>
+    <span class="nt">&lt;dependency&gt;</span>
+      <span class="nt">&lt;groupId&gt;</span>org.apache.hadoop<span class="nt">&lt;/groupId&gt;</span>
+      <span class="nt">&lt;artifactId&gt;</span>hadoop-client<span class="nt">&lt;/artifactId&gt;</span>
+      <span class="nt">&lt;version&gt;</span>2.7.2<span class="nt">&lt;/version&gt;</span>
+      <span class="nt">&lt;scope&gt;</span>provided<span class="nt">&lt;/scope&gt;</span>
+    <span class="nt">&lt;/dependency&gt;</span>
+    <span class="nt">&lt;dependency&gt;</span>
+      <span class="nt">&lt;groupId&gt;</span>org.apache.spark<span class="nt">&lt;/groupId&gt;</span>
+      <span class="nt">&lt;artifactId&gt;</span>spark-core_2.10<span class="nt">&lt;/artifactId&gt;</span>
+      <span class="nt">&lt;version&gt;</span>1.6.2<span class="nt">&lt;/version&gt;</span>
+      <span class="nt">&lt;scope&gt;</span>provided<span class="nt">&lt;/scope&gt;</span>
+    <span class="nt">&lt;/dependency&gt;</span>
+  <span class="nt">&lt;/dependencies&gt;</span>
+<span class="nt">&lt;/project&gt;</span>
+</code></pre></div></div>
+
+<p>The following bash script can use the pom above to build a shaded jar.</p>
+
+<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Get the versions of Accumulo and Fluo running on the system.  Could let the</span>
+<span class="c"># user of your Fluo application configure this and have this script read that</span>
+<span class="c"># config.</span>
+<span class="nv">ACCUMULO_VERSION</span><span class="o">=</span><span class="sb">`</span>accumulo version<span class="sb">`</span>
+<span class="nv">FLUO_VERSION</span><span class="o">=</span><span class="sb">`</span>fluo version<span class="sb">`</span>
+
+<span class="c"># Could not find an easy way to get zookeeper version automatically</span>
+<span class="nv">ZOOKEEPER_SERVER</span><span class="o">=</span>localhost
+<span class="nv">ZOOKEEPER_VERSION</span><span class="o">=</span><span class="sb">`</span><span class="nb">echo </span>status | nc <span class="nv">$ZOOKEEPER_SERVER</span> 2181 | <span class="nb">grep </span>version: | <span class="nb">sed</span> <span class="s1">'s/.*version: \([0-9.]*\).*/\1/'</span><span class="sb">`</span>
+
+<span class="c"># Build the shaded jar</span>
+mvn package <span class="nt">-Daccumulo</span>.version<span class="o">=</span><span class="nv">$ACCUMULO_VERSION</span> <span class="se">\</span>
+            <span class="nt">-Dfluo</span>.version<span class="o">=</span><span class="nv">$FLUO_VERSION</span> <span class="se">\</span>
+            <span class="nt">-Dzookeeper</span>.version<span class="o">=</span><span class="nv">$ZOOKEEPER_VERSION</span>
+</code></pre></div></div>
+
+<p>There are other possible ways to package and run your Fluo application for Spark.  This section
+suggested one possible way.  The core concept of this method is late binding of the Accumulo, Fluo,
+Hadoop, Spark, and Zookeeper libraries.  When choosing a method to create a shaded jar, the
+implications of early vs late binding is something to consider.</p>
+
+
+</div>
+
+<div>
+  <p class="text-muted">View all posts in the <a href="/news/">news archive</a></p>
+</div>
+
+          </div>
+      </div>
+      <div class="row">
+        <div class="col-sm-12 center-block">
+          <footer>
+            <hr/>
+            <p>
+            <a href="https://www.apache.org/foundation/contributing"><img
+              src="https://www.apache.org/images/SupportApache-small.png"
+              id="asf-logo" height="100" alt="Apache"/></a>
+            </p>
+            <p>
+            Copyright &copy; 2020 <a
+              href="https://www.apache.org">The&nbsp;Apache&nbsp;Software&nbsp;Foundation</a>.
+            Licensed under the <a
+              href="https://www.apache.org/licenses/">Apache&nbsp;License,&nbsp;Version&nbsp;2.0</a>
+            </p>
+            <p>
+            Apache®, the names of Apache projects and their logos, and the multicolor feather
+            logo are registered trademarks or trademarks of The Apache Software Foundation
+            in the United States and/or other countries.
+            </p>
+          </footer>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>
diff --git a/output/blog/2017/01/10/accumulo-summit-17/index.html b/output/blog/2017/01/10/accumulo-summit-17/index.html
new file mode 100644
index 0000000..f646947
--- /dev/null
+++ b/output/blog/2017/01/10/accumulo-summit-17/index.html
@@ -0,0 +1,154 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+
+    <link href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/cosmo/bootstrap.min.css" rel="stylesheet" integrity="sha384-h21C2fcDk/eFsW9sC9h0dhokq5pDinLNklTKoxIZRUn3+hvmgQSffLLQ4G4l2eEr" crossorigin="anonymous">
+    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
+    <link rel="stylesheet" href="/css/fluo.css">
+    <link rel="canonical" href="https://fluo.apache.org//blog/2017/01/10/accumulo-summit-17/">
+    <link rel="icon" type="image/png" href="/resources/favicon.png">
+    
+    <title>Fluo talks at Accumulo Summit 2016 | Apache Fluo</title>
+
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
+    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+    <!-- Place your <script> tags here. -->
+
+<script>window.twttr = (function(d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0],
+    t = window.twttr || {};
+  if (d.getElementById(id)) return t;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "https://platform.twitter.com/widgets.js";
+  fjs.parentNode.insertBefore(js, fjs);
+
+  t._e = [];
+  t.ready = function(f) {
+    t._e.push(f);
+  };
+
+  return t;
+}(document, "script", "twitter-wjs"));</script>
+
+  </head>
+  <body style="padding-top: 100px">
+    <nav id="fluo-nav" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <div class="navbar-toggle-wrapper visible-xs">
+            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".js-navbar-collapse">
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+            </button>
+          </div>
+          <a href="/" class="navbar-brand"><img id="fluo-img" height="40px" src="/resources/fluo-logo-dark.png" alt="Apache Fluo"></a>
+        </div>
+        <div class="collapse navbar-collapse js-navbar-collapse" style="margin-top: 20px">
+          <ul class="navbar-nav nav">
+            <li><a href="/releases/">Releases</a></li>
+            <li><a href="/tour/">Tour</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Docs<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/docs/fluo/1.2/">Fluo</a></li>
+                <li><a href="/docs/fluo-recipes/1.2/">Fluo Recipes</a></li>
+              </ul>
+            </li>
+            <li><a href="/api/">API</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Community<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/contactus/">Contact Us</a></li>
+                <li><a href="/news/">News Archive</a></li>
+                <li><a href="/people/">People</a></li>
+                <li><a href="/related-projects/">Related Projects</a></li>
+                <li><a href="/poweredby/">Powered By</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Contributing<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/how-to-contribute/">How To Contribute</a></li>
+                <li><a href="/release-process/">Release Process</a></li>
+              </ul>
+            </li>
+            <li><a href="/search/">Search</a></li>
+          </ul>
+          <ul class="navbar-nav nav navbar-right">
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#"><img alt="Apache Software Foundation" src="https://www.apache.org/images/feather-small.png" width="70"/><span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="https://www.apache.org">Apache Homepage</a></li>
+                <li><a href="https://www.apache.org/licenses/">License</a></li>
+                <li><a href="https://www.apache.org/foundation/sponsorship">Sponsorship</i></a></li>
+                <li><a href="https://www.apache.org/security">Security</a></li>
+                <li><a href="https://www.apache.org/foundation/thanks">Thanks</a></li>
+                <li><a href="https://www.apache.org/foundation/policies/conduct">Code of Conduct</a></li>
+                <li><a href="https://www.apache.org/events/current-event.html">Current Event</a></li>
+              </ul>
+            </li>
+          </ul>
+        </div>
+      </div>
+    </nav>
+    <div class="container">
+      <div class="row">
+          <div class="col-sm-12">
+            <div id="post-header">
+  <h1>Fluo talks at Accumulo Summit 2016</h1>
+  <p class="text-muted">
+     Author : Keith Turner <br>  
+    
+    10 Jan 2017
+  </p> 
+  <p><a class="twitter-share-button" href="https://twitter.com/intent/tweet?text=Fluo talks at Accumulo Summit 2016&url=https://fluo.apache.org//blog/2017/01/10/accumulo-summit-17/&via=ApacheFluo&related=ApacheFluo" rel="nofollow" target="_blank" title="Share on Twitter">Twitter</a></p>
+</div>
+<div id="post-content">
+  <p>Two Apache Fluo talks were given at the <a href="http://accumulosummit.com/">2016 Accumulo Summit</a> on October 11, 2016.  Below are links to
+the talks.</p>
+
+<ul>
+  <li><em>Tips For Writing Fluo Applications</em> : <a href="http://accumulosummit.com/program/talks/tips-for-writing-fluo-applications/">Summit page</a>, <a href="http://www.slideshare.net/AccumuloSummit/accumulo-summit-2016-tips-for-writing-fluo-applications">Slides</a>, <a href="https://youtu.be/06KC0QvmiNk?list=PLRV6DJeV4e-VFbWRNO1QerVPwIlXS1P3f">Video</a></li>
+  <li><em>Accumulo Indexing Strategies for Searching Semantic Networks</em> : <a href="http://accumulosummit.com/program/talks/indexing-strategies-for-searching-semantic-networks/">Summit page</a>, <a href="http://www.slideshare.net/AccumuloSummit/accumulo-summit-2016-accumulo-indexing-strategies-for-searching-semantic-networks">Slides</a>, <a href="https://youtu.be/6b8-iyi3fws?list=PLRV6DJeV4e-VFbWRNO1QerVPwIlXS1P3f">Video</a></li>
+</ul>
+
+
+</div>
+
+<div>
+  <p class="text-muted">View all posts in the <a href="/news/">news archive</a></p>
+</div>
+
+          </div>
+      </div>
+      <div class="row">
+        <div class="col-sm-12 center-block">
+          <footer>
+            <hr/>
+            <p>
+            <a href="https://www.apache.org/foundation/contributing"><img
+              src="https://www.apache.org/images/SupportApache-small.png"
+              id="asf-logo" height="100" alt="Apache"/></a>
+            </p>
+            <p>
+            Copyright &copy; 2020 <a
+              href="https://www.apache.org">The&nbsp;Apache&nbsp;Software&nbsp;Foundation</a>.
+            Licensed under the <a
+              href="https://www.apache.org/licenses/">Apache&nbsp;License,&nbsp;Version&nbsp;2.0</a>
+            </p>
+            <p>
+            Apache®, the names of Apache projects and their logos, and the multicolor feather
+            logo are registered trademarks or trademarks of The Apache Software Foundation
+            in the United States and/or other countries.
+            </p>
+          </footer>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>
diff --git a/output/blog/2017/07/26/fluo-graduates-from-apache-incubator/index.html b/output/blog/2017/07/26/fluo-graduates-from-apache-incubator/index.html
new file mode 100644
index 0000000..e0b4e90
--- /dev/null
+++ b/output/blog/2017/07/26/fluo-graduates-from-apache-incubator/index.html
@@ -0,0 +1,158 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+
+    <link href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/cosmo/bootstrap.min.css" rel="stylesheet" integrity="sha384-h21C2fcDk/eFsW9sC9h0dhokq5pDinLNklTKoxIZRUn3+hvmgQSffLLQ4G4l2eEr" crossorigin="anonymous">
+    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
+    <link rel="stylesheet" href="/css/fluo.css">
+    <link rel="canonical" href="https://fluo.apache.org//blog/2017/07/26/fluo-graduates-from-apache-incubator/">
+    <link rel="icon" type="image/png" href="/resources/favicon.png">
+    
+    <title>Fluo graduates from the Apache incubator! | Apache Fluo</title>
+
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
+    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+    <!-- Place your <script> tags here. -->
+
+<script>window.twttr = (function(d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0],
+    t = window.twttr || {};
+  if (d.getElementById(id)) return t;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "https://platform.twitter.com/widgets.js";
+  fjs.parentNode.insertBefore(js, fjs);
+
+  t._e = [];
+  t.ready = function(f) {
+    t._e.push(f);
+  };
+
+  return t;
+}(document, "script", "twitter-wjs"));</script>
+
+  </head>
+  <body style="padding-top: 100px">
+    <nav id="fluo-nav" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <div class="navbar-toggle-wrapper visible-xs">
+            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".js-navbar-collapse">
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+            </button>
+          </div>
+          <a href="/" class="navbar-brand"><img id="fluo-img" height="40px" src="/resources/fluo-logo-dark.png" alt="Apache Fluo"></a>
+        </div>
+        <div class="collapse navbar-collapse js-navbar-collapse" style="margin-top: 20px">
+          <ul class="navbar-nav nav">
+            <li><a href="/releases/">Releases</a></li>
+            <li><a href="/tour/">Tour</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Docs<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/docs/fluo/1.2/">Fluo</a></li>
+                <li><a href="/docs/fluo-recipes/1.2/">Fluo Recipes</a></li>
+              </ul>
+            </li>
+            <li><a href="/api/">API</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Community<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/contactus/">Contact Us</a></li>
+                <li><a href="/news/">News Archive</a></li>
+                <li><a href="/people/">People</a></li>
+                <li><a href="/related-projects/">Related Projects</a></li>
+                <li><a href="/poweredby/">Powered By</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Contributing<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/how-to-contribute/">How To Contribute</a></li>
+                <li><a href="/release-process/">Release Process</a></li>
+              </ul>
+            </li>
+            <li><a href="/search/">Search</a></li>
+          </ul>
+          <ul class="navbar-nav nav navbar-right">
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#"><img alt="Apache Software Foundation" src="https://www.apache.org/images/feather-small.png" width="70"/><span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="https://www.apache.org">Apache Homepage</a></li>
+                <li><a href="https://www.apache.org/licenses/">License</a></li>
+                <li><a href="https://www.apache.org/foundation/sponsorship">Sponsorship</i></a></li>
+                <li><a href="https://www.apache.org/security">Security</a></li>
+                <li><a href="https://www.apache.org/foundation/thanks">Thanks</a></li>
+                <li><a href="https://www.apache.org/foundation/policies/conduct">Code of Conduct</a></li>
+                <li><a href="https://www.apache.org/events/current-event.html">Current Event</a></li>
+              </ul>
+            </li>
+          </ul>
+        </div>
+      </div>
+    </nav>
+    <div class="container">
+      <div class="row">
+          <div class="col-sm-12">
+            <div id="post-header">
+  <h1>Fluo graduates from the Apache incubator!</h1>
+  <p class="text-muted">
+     
+    
+    26 Jul 2017
+  </p> 
+  <p><a class="twitter-share-button" href="https://twitter.com/intent/tweet?text=Fluo graduates from the Apache incubator!&url=https://fluo.apache.org//blog/2017/07/26/fluo-graduates-from-apache-incubator/&via=ApacheFluo&related=ApacheFluo" rel="nofollow" target="_blank" title="Share on Twitter">Twitter</a></p>
+</div>
+<div id="post-content">
+  <p>Apache Fluo graduated from the <a href="http://incubator.apache.org/">Apache Incubator</a> to become a Top-Level Project!
+Graduation signifies Fluo’s commitment to the meritocratic process and principles of the Apache
+Software Foundation. For more information, see the following press announcements :</p>
+
+<ul>
+  <li><a href="https://blogs.apache.org/foundation/entry/the-apache-software-foundation-announces5">Apache Software Foundation blog post</a></li>
+  <li><a href="https://twitter.com/TheASF/status/890149770551078914">@TheASF Tweet</a></li>
+  <li><a href="https://globenewswire.com/news-release/2017/07/26/1062705/0/en/The-Apache-Software-Foundation-Announces-Apache-Fluo-as-a-Top-Level-Project.html">NASDAQ GlobeNewswire</a></li>
+</ul>
+
+<p>For general information about Fluo, checkout the <a href="/">home page</a>.</p>
+
+
+</div>
+
+<div>
+  <p class="text-muted">View all posts in the <a href="/news/">news archive</a></p>
+</div>
+
+          </div>
+      </div>
+      <div class="row">
+        <div class="col-sm-12 center-block">
+          <footer>
+            <hr/>
+            <p>
+            <a href="https://www.apache.org/foundation/contributing"><img
+              src="https://www.apache.org/images/SupportApache-small.png"
+              id="asf-logo" height="100" alt="Apache"/></a>
+            </p>
+            <p>
+            Copyright &copy; 2020 <a
+              href="https://www.apache.org">The&nbsp;Apache&nbsp;Software&nbsp;Foundation</a>.
+            Licensed under the <a
+              href="https://www.apache.org/licenses/">Apache&nbsp;License,&nbsp;Version&nbsp;2.0</a>
+            </p>
+            <p>
+            Apache®, the names of Apache projects and their logos, and the multicolor feather
+            logo are registered trademarks or trademarks of The Apache Software Foundation
+            in the United States and/or other countries.
+            </p>
+          </footer>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>
diff --git a/output/blog/2019/09/30/scan-executors/index.html b/output/blog/2019/09/30/scan-executors/index.html
new file mode 100644
index 0000000..cb2a6a1
--- /dev/null
+++ b/output/blog/2019/09/30/scan-executors/index.html
@@ -0,0 +1,202 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+
+    <link href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/cosmo/bootstrap.min.css" rel="stylesheet" integrity="sha384-h21C2fcDk/eFsW9sC9h0dhokq5pDinLNklTKoxIZRUn3+hvmgQSffLLQ4G4l2eEr" crossorigin="anonymous">
+    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
+    <link rel="stylesheet" href="/css/fluo.css">
+    <link rel="canonical" href="https://fluo.apache.org//blog/2019/09/30/scan-executors/">
+    <link rel="icon" type="image/png" href="/resources/favicon.png">
+    
+    <title>How Fluo Leveraged Scan Executors | Apache Fluo</title>
+
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
+    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+    <!-- Place your <script> tags here. -->
+
+<script>window.twttr = (function(d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0],
+    t = window.twttr || {};
+  if (d.getElementById(id)) return t;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "https://platform.twitter.com/widgets.js";
+  fjs.parentNode.insertBefore(js, fjs);
+
+  t._e = [];
+  t.ready = function(f) {
+    t._e.push(f);
+  };
+
+  return t;
+}(document, "script", "twitter-wjs"));</script>
+
+  </head>
+  <body style="padding-top: 100px">
+    <nav id="fluo-nav" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <div class="navbar-toggle-wrapper visible-xs">
+            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".js-navbar-collapse">
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+            </button>
+          </div>
+          <a href="/" class="navbar-brand"><img id="fluo-img" height="40px" src="/resources/fluo-logo-dark.png" alt="Apache Fluo"></a>
+        </div>
+        <div class="collapse navbar-collapse js-navbar-collapse" style="margin-top: 20px">
+          <ul class="navbar-nav nav">
+            <li><a href="/releases/">Releases</a></li>
+            <li><a href="/tour/">Tour</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Docs<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/docs/fluo/1.2/">Fluo</a></li>
+                <li><a href="/docs/fluo-recipes/1.2/">Fluo Recipes</a></li>
+              </ul>
+            </li>
+            <li><a href="/api/">API</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Community<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/contactus/">Contact Us</a></li>
+                <li><a href="/news/">News Archive</a></li>
+                <li><a href="/people/">People</a></li>
+                <li><a href="/related-projects/">Related Projects</a></li>
+                <li><a href="/poweredby/">Powered By</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Contributing<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/how-to-contribute/">How To Contribute</a></li>
+                <li><a href="/release-process/">Release Process</a></li>
+              </ul>
+            </li>
+            <li><a href="/search/">Search</a></li>
+          </ul>
+          <ul class="navbar-nav nav navbar-right">
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#"><img alt="Apache Software Foundation" src="https://www.apache.org/images/feather-small.png" width="70"/><span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="https://www.apache.org">Apache Homepage</a></li>
+                <li><a href="https://www.apache.org/licenses/">License</a></li>
+                <li><a href="https://www.apache.org/foundation/sponsorship">Sponsorship</i></a></li>
+                <li><a href="https://www.apache.org/security">Security</a></li>
+                <li><a href="https://www.apache.org/foundation/thanks">Thanks</a></li>
+                <li><a href="https://www.apache.org/foundation/policies/conduct">Code of Conduct</a></li>
+                <li><a href="https://www.apache.org/events/current-event.html">Current Event</a></li>
+              </ul>
+            </li>
+          </ul>
+        </div>
+      </div>
+    </nav>
+    <div class="container">
+      <div class="row">
+          <div class="col-sm-12">
+            <div id="post-header">
+  <h1>How Fluo Leveraged Scan Executors</h1>
+  <p class="text-muted">
+     Author : Keith Turner <br>  
+    
+    30 Sep 2019
+  </p> 
+  <p><a class="twitter-share-button" href="https://twitter.com/intent/tweet?text=How Fluo Leveraged Scan Executors&url=https://fluo.apache.org//blog/2019/09/30/scan-executors/&via=ApacheFluo&related=ApacheFluo" rel="nofollow" target="_blank" title="Share on Twitter">Twitter</a></p>
+</div>
+<div id="post-content">
+  <p>Accumulo 2.0 introduced <a href="https://accumulo.apache.org/docs/2.x/administration/scan-executors">Scan Executors</a> giving control over processing of
+scans in Accumulo tablet servers. Fluo has a good use case for scan executors:
+notification scans.  Fluo workers continually scan for notifications to find
+transactions to execute. All workers continually scanning for notifications
+puts load on Accumulo tablet servers which could negatively impact
+transactions.  Scan executors provides a way to limit this load.</p>
+
+<p>Fluo utilizes this feature by <a href="https://github.com/apache/fluo/blob/57b154e13c5c0877bb565fcabf620aa0f30c9f24/modules/core/src/main/java/org/apache/fluo/core/worker/finder/hash/ScanTask.java#L197">setting scan hints</a> for notification scans
+indicating <code class="language-plaintext highlighter-rouge">scan_type=fluo-ntfy</code>.  These hints are passed to Accumulo tablet
+servers and are ignored by default. For these scan types, Accumulo could be
+configured to either send them to a special thread pool and/or prioritize them
+differently within a thread pool.  Below is an example of Accumulo shell
+commands that set up a special executor for notification scans.</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>config -s tserver.scan.executors.fnotify.threads=1
+config -t fluo_table -s table.scan.dispatcher=org.apache.accumulo.core.spi.scan.SimpleScanDispatcher
+config -t fluo_table -s table.scan.dispatcher.opts.executor.fluo-ntfy=fnotify
+</code></pre></div></div>
+
+<p>The system setting <code class="language-plaintext highlighter-rouge">tserver.scan.executors.fnotify.threads=1</code> creates a single-threaded
+scan executor in each tablet server named <code class="language-plaintext highlighter-rouge">fnotify</code>. The two per-table
+settings configure a scan dispatcher (the <code class="language-plaintext highlighter-rouge">SimpleScanDispatcher</code> is built into
+Accumulo) on the table <code class="language-plaintext highlighter-rouge">fluo_table</code>.  The scan dispatcher is configured such that when
+a scan hint of <code class="language-plaintext highlighter-rouge">scan_type=fluo-ntfy</code> is seen, it runs on the executor <code class="language-plaintext highlighter-rouge">fnotify</code>.
+All other scans will run on the default executor. This has the effect running
+all notification scans on a single dedicated thread in each tablet server.</p>
+
+<p>The above setting were tested in a scenario where 20 Fluo worker were run
+against a single tablet server with 20 tablets.  The Fluo stress test was run
+with a low ingest rate, resulting in continual notification scanning by the 20
+workers.  While the test was running, <code class="language-plaintext highlighter-rouge">jstack</code> and <code class="language-plaintext highlighter-rouge">top</code> were used to inspect the
+tablet server. This inspection revealed that notification scans were all
+running in a single thread which was using 100% of a single core.  This left all
+of the other cores free to process transactions.  Further testing to see how
+this impacts throughput is needed. Observing the worker debug logs, all of them
+seemed to complete notification scans, quickly finding new work.</p>
+
+<p>Fluo took a descriptive approach to using scan hints, where it described to Accumulo
+the type of scan it was running.  However, Fluo does not care what, if
+anything, Accumulo does with that information.  This allows administrators to
+configure Accumulo in many different ways to handle notification scans, without
+any changes to Fluo.</p>
+
+<p>For my first pass at using scan executors, I tried a prescriptive approach. I
+attempted to use scan hints to explicitly name an executor for notification
+scans.  I realized this would require Fluo configuration to provide the name of
+the scan executor. Forcing a user to specify Accumulo and Fluo configuration
+was very cumbersome so I abandoned the prescriptive approach.  The descriptive
+approach I settled on in its place is less cumbersome (it only requires Accumulo
+config) and more flexible (it supports executors and/or prioritization instead
+of only executors).</p>
+
+<p>At the time of this writing, no released version of Fluo supports Accumulo 2.0.
+Once Fluo 1.3.0 is released with Accumulo 2.0, Hadoop 3.0, and Java 11 support,
+it will include support for scan executors.</p>
+
+
+</div>
+
+<div>
+  <p class="text-muted">View all posts in the <a href="/news/">news archive</a></p>
+</div>
+
+          </div>
+      </div>
+      <div class="row">
+        <div class="col-sm-12 center-block">
+          <footer>
+            <hr/>
+            <p>
+            <a href="https://www.apache.org/foundation/contributing"><img
+              src="https://www.apache.org/images/SupportApache-small.png"
+              id="asf-logo" height="100" alt="Apache"/></a>
+            </p>
+            <p>
+            Copyright &copy; 2020 <a
+              href="https://www.apache.org">The&nbsp;Apache&nbsp;Software&nbsp;Foundation</a>.
+            Licensed under the <a
+              href="https://www.apache.org/licenses/">Apache&nbsp;License,&nbsp;Version&nbsp;2.0</a>
+            </p>
+            <p>
+            Apache®, the names of Apache projects and their logos, and the multicolor feather
+            logo are registered trademarks or trademarks of The Apache Software Foundation
+            in the United States and/or other countries.
+            </p>
+          </footer>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>
diff --git a/output/blog/index.html b/output/blog/index.html
new file mode 100644
index 0000000..443b060
--- /dev/null
+++ b/output/blog/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en-US">
+  <meta charset="utf-8">
+  <title>Redirecting&hellip;</title>
+  <link rel="canonical" href="https://fluo.apache.org//news/">
+  <script>location="https://fluo.apache.org//news/"</script>
+  <meta http-equiv="refresh" content="0; url=https://fluo.apache.org//news/">
+  <meta name="robots" content="noindex">
+  <h1>Redirecting&hellip;</h1>
+  <a href="https://fluo.apache.org//news/">Click here if you are not redirected.</a>
+</html>
diff --git a/output/contactus/index.html b/output/contactus/index.html
new file mode 100644
index 0000000..a367011
--- /dev/null
+++ b/output/contactus/index.html
@@ -0,0 +1,212 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+
+    <link href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/cosmo/bootstrap.min.css" rel="stylesheet" integrity="sha384-h21C2fcDk/eFsW9sC9h0dhokq5pDinLNklTKoxIZRUn3+hvmgQSffLLQ4G4l2eEr" crossorigin="anonymous">
+    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
+    <link rel="stylesheet" href="/css/fluo.css">
+    <link rel="canonical" href="https://fluo.apache.org//contactus/">
+    <link rel="icon" type="image/png" href="/resources/favicon.png">
+    
+    <title>Contact Us | Apache Fluo</title>
+
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
+    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+    <!-- Place your <script> tags here. -->
+
+<script>window.twttr = (function(d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0],
+    t = window.twttr || {};
+  if (d.getElementById(id)) return t;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "https://platform.twitter.com/widgets.js";
+  fjs.parentNode.insertBefore(js, fjs);
+
+  t._e = [];
+  t.ready = function(f) {
+    t._e.push(f);
+  };
+
+  return t;
+}(document, "script", "twitter-wjs"));</script>
+
+  </head>
+  <body style="padding-top: 100px">
+    <nav id="fluo-nav" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <div class="navbar-toggle-wrapper visible-xs">
+            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".js-navbar-collapse">
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+            </button>
+          </div>
+          <a href="/" class="navbar-brand"><img id="fluo-img" height="40px" src="/resources/fluo-logo-dark.png" alt="Apache Fluo"></a>
+        </div>
+        <div class="collapse navbar-collapse js-navbar-collapse" style="margin-top: 20px">
+          <ul class="navbar-nav nav">
+            <li><a href="/releases/">Releases</a></li>
+            <li><a href="/tour/">Tour</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Docs<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/docs/fluo/1.2/">Fluo</a></li>
+                <li><a href="/docs/fluo-recipes/1.2/">Fluo Recipes</a></li>
+              </ul>
+            </li>
+            <li><a href="/api/">API</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Community<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/contactus/">Contact Us</a></li>
+                <li><a href="/news/">News Archive</a></li>
+                <li><a href="/people/">People</a></li>
+                <li><a href="/related-projects/">Related Projects</a></li>
+                <li><a href="/poweredby/">Powered By</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Contributing<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/how-to-contribute/">How To Contribute</a></li>
+                <li><a href="/release-process/">Release Process</a></li>
+              </ul>
+            </li>
+            <li><a href="/search/">Search</a></li>
+          </ul>
+          <ul class="navbar-nav nav navbar-right">
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#"><img alt="Apache Software Foundation" src="https://www.apache.org/images/feather-small.png" width="70"/><span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="https://www.apache.org">Apache Homepage</a></li>
+                <li><a href="https://www.apache.org/licenses/">License</a></li>
+                <li><a href="https://www.apache.org/foundation/sponsorship">Sponsorship</i></a></li>
+                <li><a href="https://www.apache.org/security">Security</a></li>
+                <li><a href="https://www.apache.org/foundation/thanks">Thanks</a></li>
+                <li><a href="https://www.apache.org/foundation/policies/conduct">Code of Conduct</a></li>
+                <li><a href="https://www.apache.org/events/current-event.html">Current Event</a></li>
+              </ul>
+            </li>
+          </ul>
+        </div>
+      </div>
+    </nav>
+    <div class="container">
+      <div class="row">
+          <div class="col-sm-12">
+            <div class="page">
+
+  <header class="post-header">
+    <h2 class="post-title">Contact Us</h2>
+  </header>
+
+  <article id="page-content">
+    <p>Contact us if you need help with :</p>
+
+<ul>
+  <li>Deciding if Fluo is the right solution for your problem</li>
+  <li>Designing a Fluo application</li>
+  <li>Debugging issues with a Fluo application</li>
+  <li>Reporting a bug or requesting a feature</li>
+  <li>Getting started contributing.</li>
+  <li>Any other question relating to Fluo.</li>
+</ul>
+
+<p>Below are the different ways to get in touch with the Fluo community.</p>
+
+<h3 id="mailing-lists">Mailing lists</h3>
+
+<p>The <code class="language-plaintext highlighter-rouge">dev</code> mailing list is for user questions, general discussion, announcing releases, organizing
+meet ups, etc.</p>
+
+<p>The <code class="language-plaintext highlighter-rouge">notifications</code> and <code class="language-plaintext highlighter-rouge">commits</code> mailing lists receive email from automated services
+and can be used to observe project activity.  Design and code review discussion happen on GitHub issues and pull request.  These discussions are archived
+to the notifications list.</p>
+
+<table>
+  <tbody>
+    <tr>
+      <td>dev@fluo.apache.org</td>
+      <td><a href="mailto:dev-subscribe@fluo.apache.org">Subscribe</a></td>
+      <td><a href="mailto:dev-unsubscribe@fluo.apache.org">Unsubscribe</a></td>
+      <td><a href="https://lists.apache.org/list.html?dev@fluo.apache.org">Archive</a></td>
+    </tr>
+    <tr>
+      <td>notifications@fluo.apache.org</td>
+      <td><a href="mailto:notifications-subscribe@fluo.apache.org">Subscribe</a></td>
+      <td><a href="mailto:notifications-unsubscribe@fluo.apache.org">Unsubscribe</a></td>
+      <td><a href="https://lists.apache.org/list.html?notifications@fluo.apache.org">Archive</a></td>
+    </tr>
+    <tr>
+      <td>commits@fluo.apache.org</td>
+      <td><a href="mailto:commits-subscribe@fluo.apache.org">Subscribe</a></td>
+      <td><a href="mailto:commits-unsubscribe@fluo.apache.org">Unsubscribe</a></td>
+      <td><a href="https://lists.apache.org/list.html?commits@fluo.apache.org">Archive</a></td>
+    </tr>
+  </tbody>
+</table>
+
+<h3 id="slack">Slack</h3>
+
+<p>Drop by and chat about Fluo at the <code class="language-plaintext highlighter-rouge">#fluo</code> channel on the <a href="https://the-asf.slack.com/">ASF Slack workspace</a>. Join using this <a href="https://s.apache.org/slack-invite">invite link</a>. If you have trouble joining, email <code class="language-plaintext highlighter-rouge">dev@fluo.apache.org</code> for an invite.</p>
+
+<h3 id="issues">Issues</h3>
+
+<p>Fluo uses GitHub issues to track bugs and new features.  Fluo has multiple git repositories, each
+with its own issues.  Use the following links to report bugs, request new features, or search
+current issues.</p>
+
+<ul>
+  <li><a href="https://github.com/apache/fluo/issues">Fluo issues</a></li>
+  <li><a href="https://github.com/apache/fluo-recipes/issues">Fluo Recipes issues</a></li>
+  <li><a href="https://github.com/apache/fluo-website/issues">Fluo Website issues</a></li>
+  <li><a href="https://github.com/apache/fluo-yarn/issues">Fluo Yarn issues</a></li>
+  <li><a href="https://github.com/apache/fluo-docker/issues">Fluo Docker issues</a></li>
+  <li><a href="https://github.com/apache/fluo-bytes/issues">Fluo Bytes issues</a></li>
+  <li><a href="https://github.com/apache/fluo-uno/issues">Fluo Uno issues</a></li>
+  <li><a href="https://github.com/apache/fluo-muchos/issues">Fluo Mucho issues</a></li>
+  <li><a href="https://github.com/apache/fluo-examples/issues">Fluo Examples issues</a></li>
+</ul>
+
+<h3 id="contributions">Contributions</h3>
+
+<p>Contributions are welcome to all Apache Fluo projects! If you would like help getting started contributing, please contact us on the dev list.  We will work with you to help find something that interest you.  All projects follow a <a href="https://www.apache.org/foundation/glossary.html#ReviewThenCommit">review-then-commit</a> process. If you are interested in contributing, read our <a href="/how-to-contribute/">How To Contribute</a> page.</p>
+
+
+  </article>
+
+</div>
+
+          </div>
+      </div>
+      <div class="row">
+        <div class="col-sm-12 center-block">
+          <footer>
+            <hr/>
+            <p>
+            <a href="https://www.apache.org/foundation/contributing"><img
+              src="https://www.apache.org/images/SupportApache-small.png"
+              id="asf-logo" height="100" alt="Apache"/></a>
+            </p>
+            <p>
+            Copyright &copy; 2020 <a
+              href="https://www.apache.org">The&nbsp;Apache&nbsp;Software&nbsp;Foundation</a>.
+            Licensed under the <a
+              href="https://www.apache.org/licenses/">Apache&nbsp;License,&nbsp;Version&nbsp;2.0</a>
+            </p>
+            <p>
+            Apache®, the names of Apache projects and their logos, and the multicolor feather
+            logo are registered trademarks or trademarks of The Apache Software Foundation
+            in the United States and/or other countries.
+            </p>
+          </footer>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>
diff --git a/output/css/fluo.css b/output/css/fluo.css
new file mode 100644
index 0000000..e19ed76
--- /dev/null
+++ b/output/css/fluo.css
@@ -0,0 +1,236 @@
+.highlight .hll { background-color: #d6d6d6; }
+
+.highlight { background: #f5f5f5; color: #4d4d4c; }
+
+.highlight .c { color: #8e908c; }
+
+/* Comment */
+.highlight .err { color: #c82829; }
+
+/* Error */
+.highlight .k { color: #8959a8; }
+
+/* Keyword */
+.highlight .l { color: #f5871f; }
+
+/* Literal */
+.highlight .n { color: #4d4d4c; }
+
+/* Name */
+.highlight .o { color: #3e999f; }
+
+/* Operator */
+.highlight .p { color: #4d4d4c; }
+
+/* Punctuation */
+.highlight .cm { color: #8e908c; }
+
+/* Comment.Multiline */
+.highlight .cp { color: #8e908c; }
+
+/* Comment.Preproc */
+.highlight .c1 { color: #8e908c; }
+
+/* Comment.Single */
+.highlight .cs { color: #8e908c; }
+
+/* Comment.Special */
+.highlight .gd { color: #c82829; }
+
+/* Generic.Deleted */
+.highlight .ge { font-style: italic; }
+
+/* Generic.Emph */
+.highlight .gh { color: #4d4d4c; font-weight: bold; }
+
+/* Generic.Heading */
+.highlight .gi { color: #718c00; }
+
+/* Generic.Inserted */
+.highlight .gp { color: #8e908c; font-weight: bold; }
+
+/* Generic.Prompt */
+.highlight .gs { font-weight: bold; }
+
+/* Generic.Strong */
+.highlight .gu { color: #3e999f; font-weight: bold; }
+
+/* Generic.Subheading */
+.highlight .kc { color: #8959a8; }
+
+/* Keyword.Constant */
+.highlight .kd { color: #8959a8; }
+
+/* Keyword.Declaration */
+.highlight .kn { color: #3e999f; }
+
+/* Keyword.Namespace */
+.highlight .kp { color: #8959a8; }
+
+/* Keyword.Pseudo */
+.highlight .kr { color: #8959a8; }
+
+/* Keyword.Reserved */
+.highlight .kt { color: #917f0d; }
+
+/* Keyword.Type */
+.highlight .ld { color: #718c00; }
+
+/* Literal.Date */
+.highlight .m { color: #f5871f; }
+
+/* Literal.Number */
+.highlight .s { color: #718c00; }
+
+/* Literal.String */
+.highlight .na { color: #4271ae; }
+
+/* Name.Attribute */
+.highlight .nb { color: #4d4d4c; }
+
+/* Name.Builtin */
+.highlight .nc { color: #917f0d; }
+
+/* Name.Class */
+.highlight .no { color: #c82829; }
+
+/* Name.Constant */
+.highlight .nd { color: #3e999f; }
+
+/* Name.Decorator */
+.highlight .ni { color: #4d4d4c; }
+
+/* Name.Entity */
+.highlight .ne { color: #c82829; }
+
+/* Name.Exception */
+.highlight .nf { color: #4271ae; }
+
+/* Name.Function */
+.highlight .nl { color: #4d4d4c; }
+
+/* Name.Label */
+.highlight .nn { color: #917f0d; }
+
+/* Name.Namespace */
+.highlight .nx { color: #4271ae; }
+
+/* Name.Other */
+.highlight .py { color: #4d4d4c; }
+
+/* Name.Property */
+.highlight .nt { color: #3e999f; }
+
+/* Name.Tag */
+.highlight .nv { color: #c82829; }
+
+/* Name.Variable */
+.highlight .ow { color: #3e999f; }
+
+/* Operator.Word */
+.highlight .w { color: #4d4d4c; }
+
+/* Text.Whitespace */
+.highlight .mf { color: #f5871f; }
+
+/* Literal.Number.Float */
+.highlight .mh { color: #f5871f; }
+
+/* Literal.Number.Hex */
+.highlight .mi { color: #f5871f; }
+
+/* Literal.Number.Integer */
+.highlight .mo { color: #f5871f; }
+
+/* Literal.Number.Oct */
+.highlight .sb { color: #718c00; }
+
+/* Literal.String.Backtick */
+.highlight .sc { color: #4d4d4c; }
+
+/* Literal.String.Char */
+.highlight .sd { color: #8e908c; }
+
+/* Literal.String.Doc */
+.highlight .s2 { color: #718c00; }
+
+/* Literal.String.Double */
+.highlight .se { color: #f5871f; }
+
+/* Literal.String.Escape */
+.highlight .sh { color: #718c00; }
+
+/* Literal.String.Heredoc */
+.highlight .si { color: #f5871f; }
+
+/* Literal.String.Interpol */
+.highlight .sx { color: #718c00; }
+
+/* Literal.String.Other */
+.highlight .sr { color: #718c00; }
+
+/* Literal.String.Regex */
+.highlight .s1 { color: #718c00; }
+
+/* Literal.String.Single */
+.highlight .ss { color: #718c00; }
+
+/* Literal.String.Symbol */
+.highlight .bp { color: #4d4d4c; }
+
+/* Name.Builtin.Pseudo */
+.highlight .vc { color: #c82829; }
+
+/* Name.Variable.Class */
+.highlight .vg { color: #c82829; }
+
+/* Name.Variable.Global */
+.highlight .vi { color: #c82829; }
+
+/* Name.Variable.Instance */
+.highlight .il { color: #f5871f; }
+
+/* Literal.Number.Integer.Long */
+table { margin: 10px 0px 30px 0px; padding: 10px 5px 10px 5px; }
+
+th, td { padding: 10px 100px 10px 5px; border-bottom: 1px solid #ddd; }
+
+p { line-height: 25px; padding-top: 5px; font-size: 16px; }
+
+li { line-height: 25px; }
+
+code { background-color: #f5f5f5; color: #555; }
+
+.text-muted { margin-left: 0px; }
+
+.doc-sidebar-link { font-size: 14px; margin-bottom: 10px; margin-left: 0px; }
+
+tr:nth-child(even) { background: #F3F3F3; }
+
+tr:nth-child(odd) { background: #FFF; }
+
+.post-title-home a { color: inherit; }
+
+footer { margin: 10px 0 30px; color: #aaa; padding: 8px 8px; text-align: center; vertical-align: middle; }
+
+footer > hr { width: 80%; }
+
+footer > p { line-height: 1.5em; padding-top: 1em; font-size: 12px; width: 60%; margin: auto; }
+
+#asf-logo { float: left; }
+
+#welcome-jumbotron { padding-top: 32px; padding-bottom: 32px; }
+
+#news-header { margin-bottom: 15px; }
+
+#news-archive-link { margin-top: 15px; margin-bottom: 10px; }
+
+#post-header { margin-top: 20px; }
+
+#post-content { margin-bottom: 20px; }
+
+#page-content { margin-top: 20px; }
+
+/* Turn off sidebar affix for small screens */
+@media (max-width: 975px) { .affix { position: static; } }
+@media (max-width: 800px) { #fluo-img { height: 30px; } }
diff --git a/output/doap/fluo-recipes.rdf b/output/doap/fluo-recipes.rdf
new file mode 100644
index 0000000..5bcd740
--- /dev/null
+++ b/output/doap/fluo-recipes.rdf
@@ -0,0 +1,72 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl"?>
+<rdf:RDF xmlns="http://usefulinc.com/ns/doap#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:asfext="http://projects.apache.org/ns/asfext#" xmlns:foaf="http://xmlns.com/foaf/0.1/" xml:lang="en">
+  <!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+  <Project rdf:about="https://fluo.apache.org">
+    <created>2012-03-26</created>
+    <license rdf:resource="http://usefulinc.com/doap/licenses/asl20"/>
+    <name>Apache Fluo Recipes</name>
+    <homepage rdf:resource="https://fluo.apache.org"/>
+    <asfext:pmc rdf:resource="https://fluo.apache.org"/>
+    <description>Apache Fluo Recipes build on the Fluo API to offer additional
+      functionality to developers. They are published separately from Fluo on
+      their own release schedule. This allows Fluo Recipes to iterate and
+      innovate faster than Fluo (which will maintain a more minimal API on a
+      slower release cycle). Fluo Recipes offers code to implement common
+      patterns on top of Fluo's API. It also offers glue code to external
+      libraries like Spark and Kryo.</description>
+    <bug-database rdf:resource="https://github.com/apache/fluo-recipes/issues"/>
+    <mailing-list rdf:resource="https://fluo.apache.org/contactus"/>
+    <download-page rdf:resource="https://fluo.apache.org/releases/"/>
+    <programming-language>Java</programming-language>
+    <category rdf:resource="http://projects.apache.org/category/big-data"/>
+    <release>
+      <Version>
+        <name>Apache Fluo Recipes</name>
+        <created>2018-03-06</created>
+        <revision>1.2.0</revision>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>Apache Fluo Recipes</name>
+        <created>2017-06-22</created>
+        <revision>1.1.0-incubating</revision>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>Apache Fluo Recipes</name>
+        <created>2016-10-14</created>
+        <revision>1.0.0-incubating</revision>
+      </Version>
+    </release>
+    <repository>
+      <GitRepository>
+        <location rdf:resource="https://gitbox.apache.org/repos/asf/fluo-recipes.git"/>
+        <browse rdf:resource="https://gitbox.apache.org/repos/asf?p=fluo-recipes.git"/>
+      </GitRepository>
+    </repository>
+    <maintainer>
+      <foaf:Person>
+        <foaf:name>Keith Turner</foaf:name>
+        <foaf:mbox rdf:resource="mailto:kturner@apache.org"/>
+      </foaf:Person>
+    </maintainer>
+  </Project>
+</rdf:RDF>
diff --git a/output/doap/fluo-yarn.rdf b/output/doap/fluo-yarn.rdf
new file mode 100644
index 0000000..3cd806a
--- /dev/null
+++ b/output/doap/fluo-yarn.rdf
@@ -0,0 +1,53 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl"?>
+<rdf:RDF xmlns="http://usefulinc.com/ns/doap#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:asfext="http://projects.apache.org/ns/asfext#" xmlns:foaf="http://xmlns.com/foaf/0.1/" xml:lang="en">
+  <!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+  <Project rdf:about="https://fluo.apache.org">
+    <created>2012-03-26</created>
+    <license rdf:resource="http://usefulinc.com/doap/licenses/asl20"/>
+    <name>Apache Fluo YARN</name>
+    <homepage rdf:resource="https://fluo.apache.org"/>
+    <asfext:pmc rdf:resource="https://fluo.apache.org"/>
+    <description>Apache Fluo YARN is a tool for running Apache Fluo
+      applications in Apache Hadoop YARN.</description>
+    <bug-database rdf:resource="https://github.com/apache/fluo-yarn/issues"/>
+    <mailing-list rdf:resource="https://fluo.apache.org/contactus"/>
+    <download-page rdf:resource="https://fluo.apache.org/releases/"/>
+    <programming-language>Java</programming-language>
+    <category rdf:resource="http://projects.apache.org/category/big-data"/>
+    <release>
+      <Version>
+        <name>Apache Fluo YARN</name>
+        <created>2018-03-06</created>
+        <revision>1.0.0</revision>
+      </Version>
+    </release>
+    <repository>
+      <GitRepository>
+        <location rdf:resource="https://gitbox.apache.org/repos/asf/fluo-yarn.git"/>
+        <browse rdf:resource="https://gitbox.apache.org/repos/asf?p=fluo-yarn.git"/>
+      </GitRepository>
+    </repository>
+    <maintainer>
+      <foaf:Person>
+        <foaf:name>Keith Turner</foaf:name>
+        <foaf:mbox rdf:resource="mailto:kturner@apache.org"/>
+      </foaf:Person>
+    </maintainer>
+  </Project>
+</rdf:RDF>
diff --git a/output/doap/fluo.rdf b/output/doap/fluo.rdf
new file mode 100644
index 0000000..1bccd07
--- /dev/null
+++ b/output/doap/fluo.rdf
@@ -0,0 +1,71 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl"?>
+<rdf:RDF xmlns="http://usefulinc.com/ns/doap#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:asfext="http://projects.apache.org/ns/asfext#" xmlns:foaf="http://xmlns.com/foaf/0.1/" xml:lang="en">
+  <!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+  <Project rdf:about="https://fluo.apache.org">
+    <created>2012-03-26</created>
+    <license rdf:resource="http://usefulinc.com/doap/licenses/asl20"/>
+    <name>Apache Fluo</name>
+    <homepage rdf:resource="https://fluo.apache.org"/>
+    <asfext:pmc rdf:resource="https://fluo.apache.org"/>
+    <description>Apache Fluo is a distributed processing system that lets users
+      make incremental updates to large data sets. With Apache Fluo, users can
+      set up workflows that execute cross node transactions when data changes.
+      These workflows enable users to continuously join new data into large
+      existing data sets without reprocessing all data. Apache Fluo is built on
+      Apache Accumulo.</description>
+    <bug-database rdf:resource="https://github.com/apache/fluo/issues"/>
+    <mailing-list rdf:resource="https://fluo.apache.org/contactus"/>
+    <download-page rdf:resource="https://fluo.apache.org/releases/"/>
+    <programming-language>Java</programming-language>
+    <category rdf:resource="http://projects.apache.org/category/big-data"/>
+    <release>
+      <Version>
+        <name>Apache Fluo</name>
+        <created>2018-02-26</created>
+        <revision>1.2.0</revision>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>Apache Fluo</name>
+        <created>2017-06-12</created>
+        <revision>1.1.0-incubating</revision>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>Apache Fluo</name>
+        <created>2016-10-14</created>
+        <revision>1.0.0-incubating</revision>
+      </Version>
+    </release>
+    <repository>
+      <GitRepository>
+        <location rdf:resource="https://gitbox.apache.org/repos/asf/fluo.git"/>
+        <browse rdf:resource="https://gitbox.apache.org/repos/asf?p=fluo.git"/>
+      </GitRepository>
+    </repository>
+    <maintainer>
+      <foaf:Person>
+        <foaf:name>Keith Turner</foaf:name>
+        <foaf:mbox rdf:resource="mailto:kturner@apache.org"/>
+      </foaf:Person>
+    </maintainer>
+  </Project>
+</rdf:RDF>
diff --git a/output/docs/1.0.0-alpha-1/index.html b/output/docs/1.0.0-alpha-1/index.html
new file mode 100644
index 0000000..59bc7cf
--- /dev/null
+++ b/output/docs/1.0.0-alpha-1/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en-US">
+  <meta charset="utf-8">
+  <title>Redirecting&hellip;</title>
+  <link rel="canonical" href="https://fluo.apache.org//docs/fluo/1.0.0-alpha-1/">
+  <script>location="https://fluo.apache.org//docs/fluo/1.0.0-alpha-1/"</script>
+  <meta http-equiv="refresh" content="0; url=https://fluo.apache.org//docs/fluo/1.0.0-alpha-1/">
+  <meta name="robots" content="noindex">
+  <h1>Redirecting&hellip;</h1>
+  <a href="https://fluo.apache.org//docs/fluo/1.0.0-alpha-1/">Click here if you are not redirected.</a>
+</html>
diff --git a/output/docs/1.0.0-beta-1/index.html b/output/docs/1.0.0-beta-1/index.html
new file mode 100644
index 0000000..8927d6a
--- /dev/null
+++ b/output/docs/1.0.0-beta-1/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en-US">
+  <meta charset="utf-8">
+  <title>Redirecting&hellip;</title>
+  <link rel="canonical" href="https://fluo.apache.org//docs/fluo/1.0.0-beta-1/">
+  <script>location="https://fluo.apache.org//docs/fluo/1.0.0-beta-1/"</script>
+  <meta http-equiv="refresh" content="0; url=https://fluo.apache.org//docs/fluo/1.0.0-beta-1/">
+  <meta name="robots" content="noindex">
+  <h1>Redirecting&hellip;</h1>
+  <a href="https://fluo.apache.org//docs/fluo/1.0.0-beta-1/">Click here if you are not redirected.</a>
+</html>
diff --git a/output/docs/1.0.0-beta-2/index.html b/output/docs/1.0.0-beta-2/index.html
new file mode 100644
index 0000000..d22e770
--- /dev/null
+++ b/output/docs/1.0.0-beta-2/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en-US">
+  <meta charset="utf-8">
+  <title>Redirecting&hellip;</title>
+  <link rel="canonical" href="https://fluo.apache.org//docs/fluo/1.0.0-beta-2/">
+  <script>location="https://fluo.apache.org//docs/fluo/1.0.0-beta-2/"</script>
+  <meta http-equiv="refresh" content="0; url=https://fluo.apache.org//docs/fluo/1.0.0-beta-2/">
+  <meta name="robots" content="noindex">
+  <h1>Redirecting&hellip;</h1>
+  <a href="https://fluo.apache.org//docs/fluo/1.0.0-beta-2/">Click here if you are not redirected.</a>
+</html>
diff --git a/output/docs/archive/index.html b/output/docs/archive/index.html
new file mode 100644
index 0000000..eb42bc0
--- /dev/null
+++ b/output/docs/archive/index.html
@@ -0,0 +1,158 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+
+    <link href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/cosmo/bootstrap.min.css" rel="stylesheet" integrity="sha384-h21C2fcDk/eFsW9sC9h0dhokq5pDinLNklTKoxIZRUn3+hvmgQSffLLQ4G4l2eEr" crossorigin="anonymous">
+    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
+    <link rel="stylesheet" href="/css/fluo.css">
+    <link rel="canonical" href="https://fluo.apache.org//docs/archive/">
+    <link rel="icon" type="image/png" href="/resources/favicon.png">
+    
+    <title>Pre-ASF Documentation Archive | Apache Fluo</title>
+
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
+    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+    <!-- Place your <script> tags here. -->
+
+<script>window.twttr = (function(d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0],
+    t = window.twttr || {};
+  if (d.getElementById(id)) return t;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "https://platform.twitter.com/widgets.js";
+  fjs.parentNode.insertBefore(js, fjs);
+
+  t._e = [];
+  t.ready = function(f) {
+    t._e.push(f);
+  };
+
+  return t;
+}(document, "script", "twitter-wjs"));</script>
+
+  </head>
+  <body style="padding-top: 100px">
+    <nav id="fluo-nav" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <div class="navbar-toggle-wrapper visible-xs">
+            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".js-navbar-collapse">
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+            </button>
+          </div>
+          <a href="/" class="navbar-brand"><img id="fluo-img" height="40px" src="/resources/fluo-logo-dark.png" alt="Apache Fluo"></a>
+        </div>
+        <div class="collapse navbar-collapse js-navbar-collapse" style="margin-top: 20px">
+          <ul class="navbar-nav nav">
+            <li><a href="/releases/">Releases</a></li>
+            <li><a href="/tour/">Tour</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Docs<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/docs/fluo/1.2/">Fluo</a></li>
+                <li><a href="/docs/fluo-recipes/1.2/">Fluo Recipes</a></li>
+              </ul>
+            </li>
+            <li><a href="/api/">API</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Community<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/contactus/">Contact Us</a></li>
+                <li><a href="/news/">News Archive</a></li>
+                <li><a href="/people/">People</a></li>
+                <li><a href="/related-projects/">Related Projects</a></li>
+                <li><a href="/poweredby/">Powered By</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Contributing<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/how-to-contribute/">How To Contribute</a></li>
+                <li><a href="/release-process/">Release Process</a></li>
+              </ul>
+            </li>
+            <li><a href="/search/">Search</a></li>
+          </ul>
+          <ul class="navbar-nav nav navbar-right">
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#"><img alt="Apache Software Foundation" src="https://www.apache.org/images/feather-small.png" width="70"/><span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="https://www.apache.org">Apache Homepage</a></li>
+                <li><a href="https://www.apache.org/licenses/">License</a></li>
+                <li><a href="https://www.apache.org/foundation/sponsorship">Sponsorship</i></a></li>
+                <li><a href="https://www.apache.org/security">Security</a></li>
+                <li><a href="https://www.apache.org/foundation/thanks">Thanks</a></li>
+                <li><a href="https://www.apache.org/foundation/policies/conduct">Code of Conduct</a></li>
+                <li><a href="https://www.apache.org/events/current-event.html">Current Event</a></li>
+              </ul>
+            </li>
+          </ul>
+        </div>
+      </div>
+    </nav>
+    <div class="container">
+      <div class="row">
+          <div class="col-sm-12">
+            <div class="page">
+
+  <header class="post-header">
+    <h2 class="post-title">Pre-ASF Documentation Archive</h2>
+  </header>
+
+  <article id="page-content">
+    <div class="alert alert-danger" role="alert">Please note - This page links to documentation for non-ASF releases of Fluo.  These releases were made before Apache Fluo became an ASF project and are not endorsed by the ASF.</div>
+
+<h4 id="fluo-documentation-before-apache">Fluo documentation (before Apache)</h4>
+
+<ul>
+  <li><a href="/docs/fluo/1.0.0-beta-2/">1.0.0-beta-2</a> - January 12, 2016</li>
+  <li><a href="/docs/fluo/1.0.0-beta-1/">1.0.0-beta-1</a> - June 9, 2015</li>
+  <li><a href="/docs/fluo/1.0.0-alpha-1/">1.0.0-alpha-1</a> - October 2, 2014</li>
+</ul>
+
+<h4 id="fluo-recipes-documentation-before-apache">Fluo Recipes documentation (before Apache)</h4>
+
+<ul>
+  <li><a href="/docs/fluo-recipes/1.0.0-beta-2/">1.0.0-beta-2</a> - March 19, 2016</li>
+  <li><a href="/docs/fluo-recipes/1.0.0-beta-1/">1.0.0-beta-1</a> - January 13, 2016</li>
+</ul>
+
+
+  </article>
+
+</div>
+
+          </div>
+      </div>
+      <div class="row">
+        <div class="col-sm-12 center-block">
+          <footer>
+            <hr/>
+            <p>
+            <a href="https://www.apache.org/foundation/contributing"><img
+              src="https://www.apache.org/images/SupportApache-small.png"
+              id="asf-logo" height="100" alt="Apache"/></a>
+            </p>
+            <p>
+            Copyright &copy; 2020 <a
+              href="https://www.apache.org">The&nbsp;Apache&nbsp;Software&nbsp;Foundation</a>.
+            Licensed under the <a
+              href="https://www.apache.org/licenses/">Apache&nbsp;License,&nbsp;Version&nbsp;2.0</a>
+            </p>
+            <p>
+            Apache®, the names of Apache projects and their logos, and the multicolor feather
+            logo are registered trademarks or trademarks of The Apache Software Foundation
+            in the United States and/or other countries.
+            </p>
+          </footer>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>
diff --git a/output/docs/fluo-recipes/1.0.0-beta-1/cfm/index.html b/output/docs/fluo-recipes/1.0.0-beta-1/cfm/index.html
new file mode 100644
index 0000000..80d8aea
--- /dev/null
+++ b/output/docs/fluo-recipes/1.0.0-beta-1/cfm/index.html
@@ -0,0 +1,381 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+
+    <link href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/cosmo/bootstrap.min.css" rel="stylesheet" integrity="sha384-h21C2fcDk/eFsW9sC9h0dhokq5pDinLNklTKoxIZRUn3+hvmgQSffLLQ4G4l2eEr" crossorigin="anonymous">
+    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
+    <link rel="stylesheet" href="/css/fluo.css">
+    <link rel="canonical" href="https://fluo.apache.org//docs/fluo-recipes/1.0.0-beta-1/cfm/">
+    <link rel="icon" type="image/png" href="/resources/favicon.png">
+    
+    <title>Collision Free Map Recipe | Apache Fluo</title>
+
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
+    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+    <!-- Place your <script> tags here. -->
+
+<script>window.twttr = (function(d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0],
+    t = window.twttr || {};
+  if (d.getElementById(id)) return t;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "https://platform.twitter.com/widgets.js";
+  fjs.parentNode.insertBefore(js, fjs);
+
+  t._e = [];
+  t.ready = function(f) {
+    t._e.push(f);
+  };
+
+  return t;
+}(document, "script", "twitter-wjs"));</script>
+
+  </head>
+  <body style="padding-top: 100px">
+    <nav id="fluo-nav" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <div class="navbar-toggle-wrapper visible-xs">
+            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".js-navbar-collapse">
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+            </button>
+          </div>
+          <a href="/" class="navbar-brand"><img id="fluo-img" height="40px" src="/resources/fluo-logo-dark.png" alt="Apache Fluo"></a>
+        </div>
+        <div class="collapse navbar-collapse js-navbar-collapse" style="margin-top: 20px">
+          <ul class="navbar-nav nav">
+            <li><a href="/releases/">Releases</a></li>
+            <li><a href="/tour/">Tour</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Docs<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/docs/fluo/1.2/">Fluo</a></li>
+                <li><a href="/docs/fluo-recipes/1.2/">Fluo Recipes</a></li>
+              </ul>
+            </li>
+            <li><a href="/api/">API</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Community<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/contactus/">Contact Us</a></li>
+                <li><a href="/news/">News Archive</a></li>
+                <li><a href="/people/">People</a></li>
+                <li><a href="/related-projects/">Related Projects</a></li>
+                <li><a href="/poweredby/">Powered By</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Contributing<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/how-to-contribute/">How To Contribute</a></li>
+                <li><a href="/release-process/">Release Process</a></li>
+              </ul>
+            </li>
+            <li><a href="/search/">Search</a></li>
+          </ul>
+          <ul class="navbar-nav nav navbar-right">
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#"><img alt="Apache Software Foundation" src="https://www.apache.org/images/feather-small.png" width="70"/><span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="https://www.apache.org">Apache Homepage</a></li>
+                <li><a href="https://www.apache.org/licenses/">License</a></li>
+                <li><a href="https://www.apache.org/foundation/sponsorship">Sponsorship</i></a></li>
+                <li><a href="https://www.apache.org/security">Security</a></li>
+                <li><a href="https://www.apache.org/foundation/thanks">Thanks</a></li>
+                <li><a href="https://www.apache.org/foundation/policies/conduct">Code of Conduct</a></li>
+                <li><a href="https://www.apache.org/events/current-event.html">Current Event</a></li>
+              </ul>
+            </li>
+          </ul>
+        </div>
+      </div>
+    </nav>
+    <div class="container">
+      <div class="row">
+          <div class="col-sm-12">
+            <div class="fluo-doc">
+
+  
+  <div class="alert alert-danger" role="alert">These docs are for Fluo Recipes 1.0.0-beta-1 which is an old version! Check out the <a href="/docs/fluo-recipes/1.2">latest docs</a>!</div>
+  
+
+  
+  <div class="alert alert-danger" role="alert">These docs are for a release of Fluo Recipes made before Apache incubation.</div>
+  
+
+  <header class="post-header">
+    <h2 class="post-title">Collision Free Map Recipe</h2>
+  </header>
+
+  <article id="page-content">
+    <h2 id="background">Background</h2>
+
+<p>When many transactions are trying to modify the same keys, collisions will occur.
+These collisions will cause the transactions to fail and throughput to nose
+dive.  For example consider the <a href="https://github.com/fluo-io/phrasecount">phrasecount</a> example.  In this example many
+transactions are processing documents as input.  Each transaction counts the
+phrases in its document and then tries to update global phrase counts.  With
+each transaction attempting to update many phrase counts, the probability of
+two transactions colliding is very high.</p>
+
+<h2 id="solution">Solution</h2>
+
+<p>This recipe provides a reusable solution for the problem of many transactions
+updating many keys while avoiding collisions.  As an added bonus, this recipe
+also organizes updates into batches for efficiency in order to improve
+throughput.</p>
+
+<p>The central idea behind this recipe is that updates to a key are queued up to
+be processed by another transaction triggered by weak notifications.  In the
+phrase count example transactions processing documents would queue updates,
+but would not actually update the counts.  Below is an example of how
+transactions would compute phrasecounts using this recipe.</p>
+
+<ul>
+  <li>TX1 queues <code class="language-plaintext highlighter-rouge">+1</code> update  for phrase <code class="language-plaintext highlighter-rouge">we want lambdas now</code></li>
+  <li>TX2 queues <code class="language-plaintext highlighter-rouge">+1</code> update  for phrase <code class="language-plaintext highlighter-rouge">we want lambdas now</code></li>
+  <li>TX3 reads the updates and current value for the phrase <code class="language-plaintext highlighter-rouge">we want lambdas now</code>.  There is no current value and the updates sum to 2, so a new value of 2 is written.</li>
+  <li>TX4 queues <code class="language-plaintext highlighter-rouge">+2</code> update  for phrase <code class="language-plaintext highlighter-rouge">we want lambdas now</code></li>
+  <li>TX5 queues <code class="language-plaintext highlighter-rouge">-1</code> update  for phrase <code class="language-plaintext highlighter-rouge">we want lambdas now</code></li>
+  <li>TX6 reads the updates and current value for the phrase <code class="language-plaintext highlighter-rouge">we want lambdas now</code>.  The current value is 2 and the updates sum to 1, so a new value of 3 is written.</li>
+</ul>
+
+<p>Transactions processing updates have the ability to make additional updates.
+For example in addition to updating the current value for a phrase, the new
+value could also be placed on an export queue to update an external database.</p>
+
+<h3 id="buckets">Buckets</h3>
+
+<p>A simple implementation of this recipe would be to have an update queue for
+each key.  However the implementation does something slightly more complex.
+Each update queue is in a bucket and transactions that process updates, process
+all of the updates in a bucket.  This allows more efficient processing of
+updates for the following reasons :</p>
+
+<ul>
+  <li>When updates are queued, notifications are made per bucket(instead of per a key).</li>
+  <li>The transaction doing the update can scan the entire bucket reading updates, this avoids a seek for each key being updated.</li>
+  <li>Also the transaction can request a batch lookup to get the current value of all the keys being updated.</li>
+  <li>Any additional actions taken on update (like adding something to an export queue) can also be batched.</li>
+  <li>Data is organized to make reading exiting values for keys in a bucket more efficient.</li>
+</ul>
+
+<p>Which bucket a key goes to is decided using hash and modulus so that multiple
+updates for the same key always go to the same bucket.</p>
+
+<h2 id="example-use">Example Use</h2>
+
+<p>The following code snippets show how to setup and use this recipe for
+wordcount.  The first step in using this recipe is to configure it before
+initializing Fluo.  When initializing an ID will need to be provided.  This ID
+is used in two ways.  First, the ID is used as a row prefix in the table.
+Therefore nothing else should use that row range in the table.  Second, the ID
+is used in generating configuration keys associated with the instance of the
+Collision Free Map.</p>
+
+<p>The following snippet shows how to setup a collision free map.</p>
+
+<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  <span class="nc">FluoConfiguration</span> <span class="n">fluoConfig</span> <span class="o">=</span> <span class="o">...;</span>
+
+  <span class="kt">int</span> <span class="n">numBuckets</span> <span class="o">=</span> <span class="mi">119</span><span class="o">;</span>
+
+  <span class="nc">WordCountMap</span><span class="o">.</span><span class="na">configure</span><span class="o">(</span><span class="n">fluoConfig</span><span class="o">,</span> <span class="mi">119</span><span class="o">);</span>
+
+  <span class="c1">//initialize Fluo using fluoConfig</span>
+
+</code></pre></div></div>
+
+<p>Assume the following observer is triggered when a documents contents are
+updated.  It examines new and old document content and determines changes in
+word counts.  These changes are pushed to a collision free map.</p>
+
+<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">class</span> <span class="nc">DocumentObserver</span> <span class="kd">extends</span> <span class="nc">TypedObserver</span> <span class="o">{</span>
+
+  <span class="nc">CollisionFreeMap</span><span class="o">&lt;</span><span class="nc">String</span><span class="o">,</span> <span class="nc">Long</span><span class="o">&gt;</span> <span class="n">wcm</span><span class="o">;</span>
+
+  <span class="nd">@Override</span>
+  <span class="kd">public</span> <span class="kt">void</span> <span class="nf">init</span><span class="o">(</span><span class="nc">Context</span> <span class="n">context</span><span class="o">)</span> <span class="kd">throws</span> <span class="nc">Exception</span> <span class="o">{</span>
+    <span class="n">wcm</span> <span class="o">=</span> <span class="nc">CollisionFreeMap</span><span class="o">.</span><span class="na">getInstance</span><span class="o">(</span><span class="nc">WordCountMap</span><span class="o">.</span><span class="na">ID</span><span class="o">,</span> <span class="n">context</span><span class="o">.</span><span class="na">getAppConfiguration</span><span class="o">());</span>
+  <span class="o">}</span>
+
+  <span class="nd">@Override</span>
+  <span class="kd">public</span> <span class="nc">ObservedColumn</span> <span class="nf">getObservedColumn</span><span class="o">()</span> <span class="o">{</span>
+    <span class="k">return</span> <span class="k">new</span> <span class="nf">ObservedColumn</span><span class="o">(</span><span class="k">new</span> <span class="nc">Column</span><span class="o">(</span><span class="s">"content"</span><span class="o">,</span> <span class="s">"new"</span><span class="o">),</span> <span class="nc">NotificationType</span><span class="o">.</span><span class="na">STRONG</span><span class="o">);</span>
+  <span class="o">}</span>
+
+  <span class="nd">@Override</span>
+  <span class="kd">public</span> <span class="kt">void</span> <span class="nf">process</span><span class="o">(</span><span class="nc">TypedTransactionBase</span> <span class="n">tx</span><span class="o">,</span> <span class="nc">Bytes</span> <span class="n">row</span><span class="o">,</span> <span class="nc">Column</span> <span class="n">col</span><span class="o">)</span> <span class="o">{</span>
+    <span class="nc">String</span> <span class="n">newContent</span> <span class="o">=</span> <span class="n">tx</span><span class="o">.</span><span class="na">get</span><span class="o">().</span><span class="na">row</span><span class="o">(</span><span class="n">row</span><span class="o">).</span><span class="na">col</span><span class="o">(</span><span class="n">col</span><span class="o">).</span><span class="na">toString</span><span class="o">();</span>
+    <span class="nc">String</span> <span class="n">currentContent</span> <span class="o">=</span> <span class="n">tx</span><span class="o">.</span><span class="na">get</span><span class="o">().</span><span class="na">row</span><span class="o">(</span><span class="n">row</span><span class="o">).</span><span class="na">fam</span><span class="o">(</span><span class="s">"content"</span><span class="o">).</span><span class="na">qual</span><span class="o">(</span><span class="s">"current"</spa [...]
+
+    <span class="nc">Map</span><span class="o">&lt;</span><span class="nc">String</span><span class="o">,</span> <span class="nc">Long</span><span class="o">&gt;</span> <span class="n">newWordCounts</span> <span class="o">=</span> <span class="n">getWordCounts</span><span class="o">(</span><span class="n">newContent</span><span class="o">);</span>
+    <span class="nc">Map</span><span class="o">&lt;</span><span class="nc">String</span><span class="o">,</span> <span class="nc">Long</span><span class="o">&gt;</span> <span class="n">currentWordCounts</span> <span class="o">=</span> <span class="n">getWordCounts</span><span class="o">(</span><span class="n">currentContent</span><span class="o">);</span>
+
+    <span class="c1">//determine changes in word counts between old and new document content</span>
+    <span class="nc">Map</span><span class="o">&lt;</span><span class="nc">String</span><span class="o">,</span> <span class="nc">Long</span><span class="o">&gt;</span> <span class="n">changes</span> <span class="o">=</span> <span class="n">calculateChanges</span><span class="o">(</span><span class="n">newWordCounts</span><span class="o">,</span> <span class="n">currentWordCounts</span><span class="o">);</span>    
+
+    <span class="c1">//queue updates to word counts for processing by other transactions</span>
+    <span class="n">wcm</span><span class="o">.</span><span class="na">update</span><span class="o">(</span><span class="n">tx</span><span class="o">,</span> <span class="n">changes</span><span class="o">);</span>
+
+    <span class="c1">//update the current content and delete the new content</span>
+    <span class="n">tx</span><span class="o">.</span><span class="na">mutate</span><span class="o">().</span><span class="na">row</span><span class="o">(</span><span class="n">row</span><span class="o">).</span><span class="na">fam</span><span class="o">(</span><span class="s">"content"</span><span class="o">).</span><span class="na">qual</span><span class="o">(</span><span class="s">"current"</span><span class="o">).</span><span class="na">set</span><span class="o">(</span><span class=" [...]
+    <span class="n">tx</span><span class="o">.</span><span class="na">mutate</span><span class="o">().</span><span class="na">row</span><span class="o">(</span><span class="n">row</span><span class="o">).</span><span class="na">col</span><span class="o">(</span><span class="n">col</span><span class="o">).</span><span class="na">delete</span><span class="o">();</span>
+  <span class="o">}</span>
+
+  <span class="kd">private</span> <span class="kd">static</span> <span class="nc">Map</span><span class="o">&lt;</span><span class="nc">String</span><span class="o">,</span> <span class="nc">Long</span><span class="o">&gt;</span> <span class="nf">getWordCounts</span><span class="o">(</span><span class="nc">String</span> <span class="n">doc</span><span class="o">)</span> <span class="o">{</span>
+   <span class="c1">//TODO extract words from doc</span>
+  <span class="o">}</span>
+
+  <span class="kd">private</span> <span class="kd">static</span> <span class="nc">Map</span><span class="o">&lt;</span><span class="nc">String</span><span class="o">,</span> <span class="nc">Long</span><span class="o">&gt;</span> <span class="nf">calculateChanges</span><span class="o">(</span><span class="nc">Map</span><span class="o">&lt;</span><span class="nc">String</span><span class="o">,</span> <span class="nc">Long</span><span class="o">&gt;</span> <span class="n">newCounts</span>< [...]
+      <span class="nc">Map</span><span class="o">&lt;</span><span class="nc">String</span><span class="o">,</span> <span class="nc">Long</span><span class="o">&gt;</span> <span class="n">currCounts</span><span class="o">)</span> <span class="o">{</span>
+    <span class="nc">Map</span><span class="o">&lt;</span><span class="nc">String</span><span class="o">,</span> <span class="nc">Long</span><span class="o">&gt;</span> <span class="n">changes</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">HashMap</span><span class="o">&lt;&gt;();</span>
+
+    <span class="c1">// guava Maps class</span>
+    <span class="nc">MapDifference</span><span class="o">&lt;</span><span class="nc">String</span><span class="o">,</span> <span class="nc">Long</span><span class="o">&gt;</span> <span class="n">diffs</span> <span class="o">=</span> <span class="nc">Maps</span><span class="o">.</span><span class="na">difference</span><span class="o">(</span><span class="n">currCounts</span><span class="o">,</span> <span class="n">newCounts</span><span class="o">);</span>
+
+    <span class="c1">// compute the diffs for words that changed</span>
+    <span class="n">changes</span><span class="o">.</span><span class="na">putAll</span><span class="o">(</span><span class="nc">Maps</span><span class="o">.</span><span class="na">transformValues</span><span class="o">(</span><span class="n">diffs</span><span class="o">.</span><span class="na">entriesDiffering</span><span class="o">(),</span>
+        <span class="n">vDiff</span> <span class="o">-&gt;</span> <span class="n">vDiff</span><span class="o">.</span><span class="na">rightValue</span><span class="o">()</span> <span class="o">-</span> <span class="n">vDiff</span><span class="o">.</span><span class="na">leftValue</span><span class="o">()));</span>
+
+    <span class="c1">// add all new words</span>
+    <span class="n">changes</span><span class="o">.</span><span class="na">putAll</span><span class="o">(</span><span class="n">diffs</span><span class="o">.</span><span class="na">entriesOnlyOnRight</span><span class="o">());</span>
+
+    <span class="c1">// subtract all words no longer present</span>
+    <span class="n">changes</span><span class="o">.</span><span class="na">putAll</span><span class="o">(</span><span class="nc">Maps</span><span class="o">.</span><span class="na">transformValues</span><span class="o">(</span><span class="n">diffs</span><span class="o">.</span><span class="na">entriesOnlyOnLeft</span><span class="o">(),</span> <span class="n">l</span> <span class="o">-&gt;</span> <span class="n">l</span> <span class="o">*</span> <span class="o">-</span><span class="mi"> [...]
+
+    <span class="k">return</span> <span class="n">changes</span><span class="o">;</span>
+  <span class="o">}</span>
+
+<span class="o">}</span>
+</code></pre></div></div>
+
+<p>Each collision free map has two extension points, a combiner and an update
+observer.  These two extension points are defined below as <code class="language-plaintext highlighter-rouge">WordCountCombiner</code>
+and  <code class="language-plaintext highlighter-rouge">WordCountObserver</code>.  The collision free map configures a Fluo observer that
+will process queued updates.  When processing these queued updates the two
+extension points are called.  In this example <code class="language-plaintext highlighter-rouge">WordCountCombiner</code> is called to
+combine updates that were queued by <code class="language-plaintext highlighter-rouge">DocumentObserver</code>. The collision free map
+will process a batch of keys, calling the combiner for each key.  When finished
+processing a batch, it will call the update observer <code class="language-plaintext highlighter-rouge">WordCountObserver</code>.</p>
+
+<p>An update observer can do additional processing when a batch of key values are
+updated.  In <code class="language-plaintext highlighter-rouge">WordCountObserver</code>, updates are queued for export to an external
+database.  The export is given the new and old value allowing it to delete the
+old value if needed.</p>
+
+<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cm">/**
+ * This class exists to provide a single place to put all code related to the
+ * word count map.
+ */</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">WordCountMap</span> <span class="o">{</span>
+
+  <span class="kd">public</span> <span class="kd">static</span> <span class="kd">final</span> <span class="nc">String</span> <span class="no">ID</span> <span class="o">=</span> <span class="s">"wc"</span><span class="o">;</span>
+
+  <span class="cm">/**
+   * A helper method for configuring the word count map.
+   */</span>
+  <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">configure</span><span class="o">(</span><span class="nc">FluoConfiguration</span> <span class="n">fluoConfig</span><span class="o">,</span> <span class="kt">int</span> <span class="n">numBuckets</span><span class="o">)</span> <span class="o">{</span>
+    <span class="nc">CollisionFreeMap</span><span class="o">.</span><span class="na">configure</span><span class="o">(</span><span class="n">fluoConfig</span><span class="o">,</span> <span class="k">new</span> <span class="nc">Options</span><span class="o">(</span><span class="no">ID</span><span class="o">,</span> <span class="nc">WordCountCombiner</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> 
+        <span class="nc">WordCountObserver</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="nc">String</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="nc">Long</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">numBuckets</span><span class="o">));</span>
+  <span class="o">}</span>
+
+  <span class="kd">public</span> <span class="kd">static</span> <span class="kd">class</span> <span class="nc">WordCountCombiner</span> <span class="kd">implements</span> <span class="nc">Combiner</span><span class="o">&lt;</span><span class="nc">String</span><span class="o">,</span> <span class="nc">Long</span><span class="o">&gt;</span> <span class="o">{</span>
+    <span class="nd">@Override</span>
+    <span class="kd">public</span> <span class="nc">Optional</span><span class="o">&lt;</span><span class="nc">Long</span><span class="o">&gt;</span> <span class="nf">combine</span><span class="o">(</span><span class="nc">String</span> <span class="n">key</span><span class="o">,</span> <span class="nc">Iterator</span><span class="o">&lt;</span><span class="nc">Long</span><span class="o">&gt;</span> <span class="n">updates</span><span class="o">)</span> <span class="o">{</span>
+      <span class="kt">long</span> <span class="n">sum</span> <span class="o">=</span> <span class="mi">0L</span><span class="o">;</span>
+
+      <span class="k">while</span> <span class="o">(</span><span class="n">updates</span><span class="o">.</span><span class="na">hasNext</span><span class="o">())</span> <span class="o">{</span>
+        <span class="n">sum</span> <span class="o">+=</span> <span class="n">updates</span><span class="o">.</span><span class="na">next</span><span class="o">();</span>
+      <span class="o">}</span>
+
+      <span class="k">if</span> <span class="o">(</span><span class="n">sum</span> <span class="o">==</span> <span class="mi">0</span><span class="o">)</span> <span class="o">{</span>
+        <span class="c1">//returning absent will cause the collision free map to delete the current key</span>
+        <span class="k">return</span> <span class="nc">Optional</span><span class="o">.</span><span class="na">absent</span><span class="o">();</span>
+      <span class="o">}</span> <span class="k">else</span> <span class="o">{</span>
+        <span class="k">return</span> <span class="nc">Optional</span><span class="o">.</span><span class="na">of</span><span class="o">(</span><span class="n">sum</span><span class="o">);</span>
+      <span class="o">}</span>
+    <span class="o">}</span>
+  <span class="o">}</span>
+
+  <span class="kd">public</span> <span class="kd">static</span> <span class="kd">class</span> <span class="nc">WordCountObserver</span> <span class="kd">extends</span> <span class="nc">UpdateObserver</span><span class="o">&lt;</span><span class="nc">String</span><span class="o">,</span> <span class="nc">Long</span><span class="o">&gt;</span> <span class="o">{</span>
+
+    <span class="kd">private</span> <span class="nc">ExportQueue</span><span class="o">&lt;</span><span class="nc">String</span><span class="o">,</span> <span class="nc">MyDatabaseExport</span><span class="o">&gt;</span> <span class="n">exportQ</span><span class="o">;</span>
+
+    <span class="nd">@Override</span>
+    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">init</span><span class="o">(</span><span class="nc">String</span> <span class="n">mapId</span><span class="o">,</span> <span class="nc">Context</span> <span class="n">observerContext</span><span class="o">)</span> <span class="kd">throws</span> <span class="nc">Exception</span> <span class="o">{</span>
+      <span class="n">exportQ</span> <span class="o">=</span> <span class="nc">ExportQueue</span><span class="o">.</span><span class="na">getInstance</span><span class="o">(</span><span class="nc">MyExportQ</span><span class="o">.</span><span class="na">ID</span><span class="o">,</span> <span class="n">observerContext</span><span class="o">.</span><span class="na">getAppConfiguration</span><span class="o">());</span>
+    <span class="o">}</span>
+
+    <span class="nd">@Override</span>
+    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">updatingValues</span><span class="o">(</span><span class="nc">TransactionBase</span> <span class="n">tx</span><span class="o">,</span> <span class="nc">Iterator</span><span class="o">&lt;</span><span class="nc">Update</span><span class="o">&lt;</span><span class="nc">String</span><span class="o">,</span> <span class="nc">Long</span><span class="o">&gt;&gt;</span> <span class="n">updates</span><span class="o" [...]
+      <span class="k">while</span> <span class="o">(</span><span class="n">updates</span><span class="o">.</span><span class="na">hasNext</span><span class="o">())</span> <span class="o">{</span>
+        <span class="nc">Update</span><span class="o">&lt;</span><span class="nc">String</span><span class="o">,</span> <span class="nc">Long</span><span class="o">&gt;</span> <span class="n">update</span> <span class="o">=</span> <span class="n">updates</span><span class="o">.</span><span class="na">next</span><span class="o">();</span>
+
+        <span class="nc">String</span> <span class="n">word</span> <span class="o">=</span> <span class="n">update</span><span class="o">.</span><span class="na">getKey</span><span class="o">();</span>
+        <span class="nc">Optional</span><span class="o">&lt;</span><span class="nc">Long</span><span class="o">&gt;</span> <span class="n">oldVal</span> <span class="o">=</span> <span class="n">update</span><span class="o">.</span><span class="na">getOldValue</span><span class="o">();</span>
+        <span class="nc">Optional</span><span class="o">&lt;</span><span class="nc">Long</span><span class="o">&gt;</span> <span class="n">newVal</span> <span class="o">=</span> <span class="n">update</span><span class="o">.</span><span class="na">getNewValue</span><span class="o">();</span>
+
+        <span class="c1">//queue an export to let an external database know the word count has changed</span>
+        <span class="n">exportQ</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">word</span><span class="o">,</span> <span class="k">new</span> <span class="nc">MyDatabaseExport</span><span class="o">(</span><span class="n">oldVal</span><span class="o">,</span> <span class="n">newVal</span><span class="o">));</span>
+      <span class="o">}</span>
+    <span class="o">}</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre></div></div>
+
+<h2 id="guarantees">Guarantees</h2>
+
+<p>This recipe makes two important guarantees about updates for a key when it
+calls <code class="language-plaintext highlighter-rouge">updatingValues()</code> on an <code class="language-plaintext highlighter-rouge">UpdateObserver</code>.</p>
+
+<ul>
+  <li>The new value reported for an update will be derived from combining all
+updates that were committed before the transaction that’s processing updates
+started.  The implementation may have to make multiple passes over queued
+updates to achieve this.  In the situation where TX1 queues a <code class="language-plaintext highlighter-rouge">+1</code> and later
+TX2 queues a <code class="language-plaintext highlighter-rouge">-1</code> for the same key, there is no need to worry about only seeing
+the <code class="language-plaintext highlighter-rouge">-1</code> processed.  A transaction that started processing updates after TX2
+committed would process both.</li>
+  <li>The old value will always be what was reported as the new value in the
+previous transaction that called <code class="language-plaintext highlighter-rouge">updatingValues()</code>.</li>
+</ul>
+
+
+  </article>
+
+</div>
+
+          </div>
+      </div>
+      <div class="row">
+        <div class="col-sm-12 center-block">
+          <footer>
+            <hr/>
+            <p>
+            <a href="https://www.apache.org/foundation/contributing"><img
+              src="https://www.apache.org/images/SupportApache-small.png"
+              id="asf-logo" height="100" alt="Apache"/></a>
+            </p>
+            <p>
+            Copyright &copy; 2020 <a
+              href="https://www.apache.org">The&nbsp;Apache&nbsp;Software&nbsp;Foundation</a>.
+            Licensed under the <a
+              href="https://www.apache.org/licenses/">Apache&nbsp;License,&nbsp;Version&nbsp;2.0</a>
+            </p>
+            <p>
+            Apache®, the names of Apache projects and their logos, and the multicolor feather
+            logo are registered trademarks or trademarks of The Apache Software Foundation
+            in the United States and/or other countries.
+            </p>
+          </footer>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>
diff --git a/output/docs/fluo-recipes/1.0.0-beta-1/export-queue/index.html b/output/docs/fluo-recipes/1.0.0-beta-1/export-queue/index.html
new file mode 100644
index 0000000..e26e10a
--- /dev/null
+++ b/output/docs/fluo-recipes/1.0.0-beta-1/export-queue/index.html
@@ -0,0 +1,427 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+
+    <link href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/cosmo/bootstrap.min.css" rel="stylesheet" integrity="sha384-h21C2fcDk/eFsW9sC9h0dhokq5pDinLNklTKoxIZRUn3+hvmgQSffLLQ4G4l2eEr" crossorigin="anonymous">
+    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
+    <link rel="stylesheet" href="/css/fluo.css">
+    <link rel="canonical" href="https://fluo.apache.org//docs/fluo-recipes/1.0.0-beta-1/export-queue/">
+    <link rel="icon" type="image/png" href="/resources/favicon.png">
+    
+    <title>Export Queue Recipe | Apache Fluo</title>
+
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
+    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+    <!-- Place your <script> tags here. -->
+
+<script>window.twttr = (function(d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0],
+    t = window.twttr || {};
+  if (d.getElementById(id)) return t;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "https://platform.twitter.com/widgets.js";
+  fjs.parentNode.insertBefore(js, fjs);
+
+  t._e = [];
+  t.ready = function(f) {
+    t._e.push(f);
+  };
+
+  return t;
+}(document, "script", "twitter-wjs"));</script>
+
+  </head>
+  <body style="padding-top: 100px">
+    <nav id="fluo-nav" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <div class="navbar-toggle-wrapper visible-xs">
+            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".js-navbar-collapse">
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+            </button>
+          </div>
+          <a href="/" class="navbar-brand"><img id="fluo-img" height="40px" src="/resources/fluo-logo-dark.png" alt="Apache Fluo"></a>
+        </div>
+        <div class="collapse navbar-collapse js-navbar-collapse" style="margin-top: 20px">
+          <ul class="navbar-nav nav">
+            <li><a href="/releases/">Releases</a></li>
+            <li><a href="/tour/">Tour</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Docs<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/docs/fluo/1.2/">Fluo</a></li>
+                <li><a href="/docs/fluo-recipes/1.2/">Fluo Recipes</a></li>
+              </ul>
+            </li>
+            <li><a href="/api/">API</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Community<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/contactus/">Contact Us</a></li>
+                <li><a href="/news/">News Archive</a></li>
+                <li><a href="/people/">People</a></li>
+                <li><a href="/related-projects/">Related Projects</a></li>
+                <li><a href="/poweredby/">Powered By</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Contributing<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/how-to-contribute/">How To Contribute</a></li>
+                <li><a href="/release-process/">Release Process</a></li>
+              </ul>
+            </li>
+            <li><a href="/search/">Search</a></li>
+          </ul>
+          <ul class="navbar-nav nav navbar-right">
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#"><img alt="Apache Software Foundation" src="https://www.apache.org/images/feather-small.png" width="70"/><span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="https://www.apache.org">Apache Homepage</a></li>
+                <li><a href="https://www.apache.org/licenses/">License</a></li>
+                <li><a href="https://www.apache.org/foundation/sponsorship">Sponsorship</i></a></li>
+                <li><a href="https://www.apache.org/security">Security</a></li>
+                <li><a href="https://www.apache.org/foundation/thanks">Thanks</a></li>
+                <li><a href="https://www.apache.org/foundation/policies/conduct">Code of Conduct</a></li>
+                <li><a href="https://www.apache.org/events/current-event.html">Current Event</a></li>
+              </ul>
+            </li>
+          </ul>
+        </div>
+      </div>
+    </nav>
+    <div class="container">
+      <div class="row">
+          <div class="col-sm-12">
+            <div class="fluo-doc">
+
+  
+  <div class="alert alert-danger" role="alert">These docs are for Fluo Recipes 1.0.0-beta-1 which is an old version! Check out the <a href="/docs/fluo-recipes/1.2">latest docs</a>!</div>
+  
+
+  
+  <div class="alert alert-danger" role="alert">These docs are for a release of Fluo Recipes made before Apache incubation.</div>
+  
+
+  <header class="post-header">
+    <h2 class="post-title">Export Queue Recipe</h2>
+  </header>
+
+  <article id="page-content">
+    <h2 id="background">Background</h2>
+
+<p>Fluo is not suited for servicing low latency queries for two reasons.  The
+first reason is that the implementation of transactions are designed for
+throughput.  To get throughput, transactions recover lazily from failures and
+may wait on another transaction that is writing.  Both of these design decisions
+can lead to delays for an individual transaction, but do not negatively impact
+throughput.   The second reason is that Fluo observers executing transactions
+will likely cause a large number of random accesses.  This could lead to high
+response time variability for an individual random access.  This variability
+would not impede throughput but would impede the goal of latency.</p>
+
+<p>One way to make data transformed by Fluo available for low latency queries is
+to export that data to another system.  For example Fluo could be running
+cluster A, continually transforming a large data set, and exporting data to
+Accumulo tables on cluster B.  The tables on cluster B would service user
+queries.  This recipe could be used to export to systems other than Accumulo,
+like Redis, Elasticsearch, MySQL, etc.</p>
+
+<p>Exporting data from Fluo is easy to get wrong which is why this recipe exists.
+To understand what can go wrong consider the following example observer
+transaction.</p>
+
+<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">class</span> <span class="nc">MyObserver</span> <span class="kd">extends</span> <span class="nc">AbstractObserver</span> <span class="o">{</span>
+
+    <span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="no">TYPEL</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">TypeLayer</span><span class="o">(</span><span class="k">new</span> <span class="nc">StringEncoder</span><span class="o">());</span>
+
+    <span class="c1">//represents a Query system external to Fluo that is updated by Fluo</span>
+    <span class="nc">QuerySystem</span> <span class="n">querySystem</span><span class="o">;</span>
+
+    <span class="nd">@Override</span>
+    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">process</span><span class="o">(</span><span class="nc">TransactionBase</span> <span class="n">tx</span><span class="o">,</span> <span class="nc">Bytes</span> <span class="n">row</span><span class="o">,</span> <span class="nc">Column</span> <span class="n">col</span><span class="o">)</span> <span class="o">{</span>
+
+        <span class="nc">TypedTransactionBase</span> <span class="n">ttx</span> <span class="o">=</span> <span class="no">TYPEL</span><span class="o">.</span><span class="na">wrap</span><span class="o">(</span><span class="n">tx</span><span class="o">);</span>
+        <span class="kt">int</span> <span class="n">oldCount</span> <span class="o">=</span> <span class="n">ttx</span><span class="o">.</span><span class="na">get</span><span class="o">().</span><span class="na">row</span><span class="o">(</span><span class="n">row</span><span class="o">).</span><span class="na">fam</span><span class="o">(</span><span class="s">"meta"</span><span class="o">).</span><span class="na">qual</span><span class="o">(</span><span class="s">"counter1"</span><spa [...]
+        <span class="kt">int</span> <span class="n">numUpdates</span> <span class="o">=</span> <span class="n">ttx</span><span class="o">.</span><span class="na">get</span><span class="o">().</span><span class="na">row</span><span class="o">(</span><span class="n">row</span><span class="o">).</span><span class="na">fam</span><span class="o">(</span><span class="s">"meta"</span><span class="o">).</span><span class="na">qual</span><span class="o">(</span><span class="s">"numUpdates"</span> [...]
+        <span class="kt">int</span> <span class="n">newCount</span> <span class="o">=</span> <span class="n">oldCount</span> <span class="o">+</span> <span class="n">numUpdates</span><span class="o">;</span>
+        <span class="n">ttx</span><span class="o">.</span><span class="na">mutate</span><span class="o">().</span><span class="na">row</span><span class="o">(</span><span class="n">row</span><span class="o">).</span><span class="na">fam</span><span class="o">(</span><span class="s">"meta"</span><span class="o">).</span><span class="na">qual</span><span class="o">(</span><span class="s">"counter1"</span><span class="o">).</span><span class="na">set</span><span class="o">(</span><span clas [...]
+        <span class="n">ttx</span><span class="o">.</span><span class="na">mutate</span><span class="o">().</span><span class="na">row</span><span class="o">(</span><span class="n">row</span><span class="o">).</span><span class="na">fam</span><span class="o">(</span><span class="s">"meta"</span><span class="o">).</span><span class="na">qual</span><span class="o">(</span><span class="s">"numUpdates"</span><span class="o">).</span><span class="na">set</span><span class="o">(</span><span cl [...]
+
+        <span class="c1">//Build an inverted index in the query system, based on count from the</span>
+        <span class="c1">//meta:counter1 column in fluo.  Do this by creating rows for the</span>
+        <span class="c1">//external query system based on the count.        </span>
+        <span class="nc">String</span> <span class="n">oldCountRow</span> <span class="o">=</span> <span class="nc">String</span><span class="o">.</span><span class="na">format</span><span class="o">(</span><span class="s">"%06d"</span><span class="o">,</span> <span class="n">oldCount</span><span class="o">);</span>
+        <span class="nc">String</span> <span class="n">newCountRow</span> <span class="o">=</span> <span class="nc">String</span><span class="o">.</span><span class="na">format</span><span class="o">(</span><span class="s">"%06d"</span><span class="o">,</span> <span class="n">newCount</span><span class="o">);</span>
+        
+        <span class="c1">//add a new entry to the inverted index</span>
+        <span class="n">querySystem</span><span class="o">.</span><span class="na">insertRow</span><span class="o">(</span><span class="n">newCountRow</span><span class="o">,</span> <span class="n">row</span><span class="o">);</span>
+        <span class="c1">//remove the old entry from the inverted index</span>
+        <span class="n">querySystem</span><span class="o">.</span><span class="na">deleteRow</span><span class="o">(</span><span class="n">oldCountRow</span><span class="o">,</span> <span class="n">row</span><span class="o">);</span>
+    <span class="o">}</span>
+<span class="o">}</span>
+</code></pre></div></div>
+
+<p>The above example would keep the external index up to date beautifully as long
+as the following conditions are met.</p>
+
+<ul>
+  <li>Threads executing transactions always complete successfully.</li>
+  <li>Only a single thread ever responds to a notification.</li>
+</ul>
+
+<p>However these conditions are not guaranteed by Fluo.  Multiple threads may
+attempt to process a notification concurrently (only one may succeed).  Also at
+any point in time a transaction may fail (for example the computer executing it
+may reboot).   Both of these problems will occur and will lead to corruption of
+the external index in the example.  The inverted index and Fluo  will become
+inconsistent.  The inverted index will end up with multiple entries (that are
+never cleaned up) for single entity even though the intent is to only have one.</p>
+
+<p>The root of the problem in the example above is that its exporting uncommitted
+data.  There is no guarantee that setting the column <code class="language-plaintext highlighter-rouge">&lt;row&gt;:meta:counter1</code> to
+<code class="language-plaintext highlighter-rouge">newCount</code> will succeed until the transaction is successfully committed.
+However, <code class="language-plaintext highlighter-rouge">newCountRow</code> is derived from <code class="language-plaintext highlighter-rouge">newCount</code> and written to the external query
+system before the transaction is committed (Note : for observers, the
+transaction is committed by the framework after <code class="language-plaintext highlighter-rouge">process(...)</code> is called).  So
+if the transaction fails, the next time it runs it could compute a completely
+different value for <code class="language-plaintext highlighter-rouge">newCountRow</code> (and it would not delete what was written by the
+failed transaction).</p>
+
+<h2 id="solution">Solution</h2>
+
+<p>The simple solution to the problem of exporting uncommitted data is to only
+export committed data.  There are multiple ways to accomplish this.  This
+recipe offers a reusable implementation of one method.  This recipe has the
+following elements:</p>
+
+<ul>
+  <li>An export queue that transactions can add key/values to.  Only if the transaction commits successfully will the key/value end up in the queue.  A Fluo application can have multiple export queues, each one must have a unique id.</li>
+  <li>When a key/value is added to the export queue, its given a sequence number.  This sequence number is based on the transactions start timestamp.</li>
+  <li>Each export queue is configured with an observer that processes key/values that were successfully committed to the queue.</li>
+  <li>When key/values in an export queue are processed, they are deleted so the export queue does not keep any long term data.</li>
+  <li>Key/values in an export queue are placed in buckets.  This is done so that all of the updates in a bucket can be processed in a single transaction.  This allows an efficient implementation of this recipe in Fluo.  It can also lead to efficiency in a system being exported to, if the system can benefit from batching updates.  The number of buckets in an export queue is configurable.</li>
+</ul>
+
+<p>There are three requirements for using this recipe :</p>
+
+<ul>
+  <li>Must configure export queues before initializing a Fluo application.</li>
+  <li>Transactions adding to an export queue must get an instance of the queue using its unique QID.</li>
+  <li>Must implement a class that extends <a href="https://javadoc.io/doc/io.fluo/fluo-recipes-core/1.0.0-beta-1/io/fluo/recipes/export/Exporter.html">Exporter</a> in order to process exports.</li>
+</ul>
+
+<h2 id="schema">Schema</h2>
+
+<p>Each export queue stores its data in the Fluo table in a contiguous row range.
+This row range is defined by using the export queue id as a row prefix for all
+data in the export queue.  So the row range defined by the export queue id
+should not be used by anything else.</p>
+
+<p>All data stored in an export queue is <a href="../transient/">transient</a>. When an export
+queue is configured, it will recommend split points using the <a href="../table-optimization/">table
+optimization process</a>.</p>
+
+<h2 id="example-use">Example Use</h2>
+
+<p>This example will show how to build an inverted index in an external
+query system using an export queue.  The class below is simple POJO to hold the
+count update, this will be used as the value for the export queue.</p>
+
+<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">class</span> <span class="nc">CountUpdate</span> <span class="o">{</span>
+  <span class="kd">public</span> <span class="kt">int</span> <span class="n">oldCount</span><span class="o">;</span>
+  <span class="kd">public</span> <span class="kt">int</span> <span class="n">newCount</span><span class="o">;</span>
+  
+  <span class="kd">public</span> <span class="nf">CountUpdate</span><span class="o">(</span><span class="kt">int</span> <span class="n">oc</span><span class="o">,</span> <span class="kt">int</span> <span class="n">nc</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">this</span><span class="o">.</span><span class="na">oldCount</span> <span class="o">=</span> <span class="n">oc</span><span class="o">;</span>
+    <span class="k">this</span><span class="o">.</span><span class="na">newCount</span> <span class="o">=</span> <span class="n">nc</span><span class="o">;</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre></div></div>
+
+<p>The following code shows how to configure an export queue.  This code will
+modify the FluoConfiguration object with options needed for the export queue.
+This FluoConfiguration object should be used to initialize the fluo
+application.</p>
+
+<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code>   <span class="nc">FluoConfiguration</span> <span class="n">fluoConfig</span> <span class="o">=</span> <span class="o">...;</span>
+
+   <span class="c1">//queue id "ici" means inverted count index, would probably use static final in real application</span>
+   <span class="nc">String</span> <span class="n">exportQueueID</span> <span class="o">=</span> <span class="s">"ici"</span><span class="o">;</span>  
+   <span class="nc">Class</span><span class="o">&lt;</span><span class="nc">CountExporter</span><span class="o">&gt;</span> <span class="n">exporterType</span> <span class="o">=</span> <span class="nc">CountExporter</span><span class="o">.</span><span class="na">class</span><span class="o">;</span>
+   <span class="nc">Class</span><span class="o">&lt;</span><span class="nc">Bytes</span><span class="o">&gt;</span> <span class="n">keyType</span> <span class="o">=</span> <span class="nc">Bytes</span><span class="o">.</span><span class="na">class</span><span class="o">;</span>
+   <span class="nc">Class</span><span class="o">&lt;</span><span class="nc">CountUpdate</span><span class="o">&gt;</span> <span class="n">valueType</span> <span class="o">=</span> <span class="nc">CountUpdate</span><span class="o">.</span><span class="na">class</span><span class="o">;</span>
+   <span class="kt">int</span> <span class="n">numBuckets</span> <span class="o">=</span> <span class="mi">1009</span><span class="o">;</span>
+
+   <span class="nc">ExportQueue</span><span class="o">.</span><span class="na">Options</span> <span class="n">eqOptions</span> <span class="o">=</span>
+        <span class="k">new</span> <span class="nc">ExportQueue</span><span class="o">.</span><span class="na">Options</span><span class="o">(</span><span class="n">exportQueueId</span><span class="o">,</span> <span class="n">exporterType</span><span class="o">,</span> <span class="n">keyType</span><span class="o">,</span> <span class="n">valueType</span><span class="o">,</span> <span class="n">numBuckets</span><span class="o">);</span>
+   <span class="nc">ExportQueue</span><span class="o">.</span><span class="na">configure</span><span class="o">(</span><span class="n">fluoConfig</span><span class="o">,</span> <span class="n">eqOptions</span><span class="o">);</span>
+
+   <span class="c1">//initialize Fluo using fluoConfig</span>
+</code></pre></div></div>
+
+<p>Below is updated version of the observer from above that’s now using the export
+queue.</p>
+
+<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">class</span> <span class="nc">MyObserver</span> <span class="kd">extends</span> <span class="nc">AbstractObserver</span> <span class="o">{</span>
+
+    <span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="no">TYPEL</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">TypeLayer</span><span class="o">(</span><span class="k">new</span> <span class="nc">StringEncoder</span><span class="o">());</span>
+
+    <span class="kd">private</span> <span class="nc">ExportQueue</span><span class="o">&lt;</span><span class="nc">Bytes</span><span class="o">,</span> <span class="nc">CountUpdate</span><span class="o">&gt;</span> <span class="n">exportQueue</span><span class="o">;</span>
+
+    <span class="nd">@Override</span>
+    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">init</span><span class="o">(</span><span class="nc">Context</span> <span class="n">context</span><span class="o">)</span> <span class="kd">throws</span> <span class="nc">Exception</span> <span class="o">{</span>
+      <span class="n">exportQueue</span> <span class="o">=</span> <span class="nc">ExportQueue</span><span class="o">.</span><span class="na">getInstance</span><span class="o">(</span><span class="s">"ici"</span><span class="o">,</span> <span class="n">context</span><span class="o">.</span><span class="na">getAppConfiguration</span><span class="o">());</span>
+    <span class="o">}</span>
+
+    <span class="nd">@Override</span>
+    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">process</span><span class="o">(</span><span class="nc">TransactionBase</span> <span class="n">tx</span><span class="o">,</span> <span class="nc">Bytes</span> <span class="n">row</span><span class="o">,</span> <span class="nc">Column</span> <span class="n">col</span><span class="o">)</span> <span class="o">{</span>
+
+        <span class="nc">TypedTransactionBase</span> <span class="n">ttx</span> <span class="o">=</span> <span class="no">TYPEL</span><span class="o">.</span><span class="na">wrap</span><span class="o">(</span><span class="n">tx</span><span class="o">);</span>
+        <span class="kt">int</span> <span class="n">oldCount</span> <span class="o">=</span> <span class="n">ttx</span><span class="o">.</span><span class="na">get</span><span class="o">().</span><span class="na">row</span><span class="o">(</span><span class="n">row</span><span class="o">).</span><span class="na">fam</span><span class="o">(</span><span class="s">"meta"</span><span class="o">).</span><span class="na">qual</span><span class="o">(</span><span class="s">"counter1"</span><spa [...]
+        <span class="kt">int</span> <span class="n">numUpdates</span> <span class="o">=</span> <span class="n">ttx</span><span class="o">.</span><span class="na">get</span><span class="o">().</span><span class="na">row</span><span class="o">(</span><span class="n">row</span><span class="o">).</span><span class="na">fam</span><span class="o">(</span><span class="s">"meta"</span><span class="o">).</span><span class="na">qual</span><span class="o">(</span><span class="s">"numUpdates"</span> [...]
+        <span class="kt">int</span> <span class="n">newCount</span> <span class="o">=</span> <span class="n">oldCount</span> <span class="o">+</span> <span class="n">numUpdates</span><span class="o">;</span>
+        <span class="n">ttx</span><span class="o">.</span><span class="na">mutate</span><span class="o">().</span><span class="na">row</span><span class="o">(</span><span class="n">row</span><span class="o">).</span><span class="na">fam</span><span class="o">(</span><span class="s">"meta"</span><span class="o">).</span><span class="na">qual</span><span class="o">(</span><span class="s">"counter1"</span><span class="o">).</span><span class="na">set</span><span class="o">(</span><span clas [...]
+        <span class="n">ttx</span><span class="o">.</span><span class="na">mutate</span><span class="o">().</span><span class="na">row</span><span class="o">(</span><span class="n">row</span><span class="o">).</span><span class="na">fam</span><span class="o">(</span><span class="s">"meta"</span><span class="o">).</span><span class="na">qual</span><span class="o">(</span><span class="s">"numUpdates"</span><span class="o">).</span><span class="na">set</span><span class="o">(</span><span cl [...]
+
+        <span class="c1">//Because the update to the export queue is part of the transaction,</span>
+        <span class="c1">//either the update to meta:counter1 is made and an entry is added to</span>
+        <span class="c1">//the export queue or neither happens.</span>
+        <span class="n">exportQueue</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">tx</span><span class="o">,</span> <span class="n">row</span><span class="o">,</span> <span class="k">new</span> <span class="nc">CountUpdate</span><span class="o">(</span><span class="n">oldCount</span><span class="o">,</span> <span class="n">newCount</span><span class="o">));</span>
+    <span class="o">}</span>
+<span class="o">}</span>
+</code></pre></div></div>
+
+<p>The observer setup for the export queue will call the <code class="language-plaintext highlighter-rouge">processExports()</code> method
+on the class below to process entries in the export queue.  It possible the
+call to <code class="language-plaintext highlighter-rouge">processExports()</code> can fail part way through and/or be called multiple
+times.  In the case of failures the exporter will eventually be called again
+with the exact same data.  The possibility of the same export entry being
+processed on multiple computer at different times can cause exports to arrive
+out of order.  The system receiving exports has to be resilient to data
+arriving out of order and multiple times.  The purpose of the sequence number
+is to help systems receiving data from Fluo process out of order and redundant
+data.</p>
+
+<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  <span class="kd">public</span> <span class="kd">class</span> <span class="nc">CountExporter</span> <span class="kd">extends</span> <span class="nc">Exporter</span><span class="o">&lt;</span><span class="nc">Bytes</span><span class="o">,</span> <span class="nc">CountUpdate</span><span class="o">&gt;</span> <span class="o">{</span>
+    <span class="c1">//represents the external query system we want to update from Fluo</span>
+    <span class="nc">QuerySystem</span> <span class="n">querySystem</span><span class="o">;</span>
+
+    <span class="nd">@Override</span>
+    <span class="kd">protected</span> <span class="kt">void</span> <span class="nf">processExports</span><span class="o">(</span><span class="nc">Iterator</span><span class="o">&lt;</span><span class="nc">SequencedExport</span><span class="o">&lt;</span><span class="nc">Bytes</span><span class="o">,</span> <span class="nc">CountUpdate</span><span class="o">&gt;&gt;</span> <span class="n">exportIterator</span><span class="o">)</span> <span class="o">{</span>
+      <span class="nc">BatchUpdater</span> <span class="n">batchUpdater</span> <span class="o">=</span> <span class="n">querySystem</span><span class="o">.</span><span class="na">getBatchUpdater</span><span class="o">();</span>
+      <span class="k">while</span><span class="o">(</span><span class="n">exportIterator</span><span class="o">.</span><span class="na">hasNext</span><span class="o">()){</span>
+        <span class="nc">SequencedExport</span><span class="o">&lt;</span><span class="nc">Bytes</span><span class="o">,</span> <span class="nc">CountUpdate</span><span class="o">&gt;</span> <span class="n">exportEntry</span> <span class="o">=</span>  <span class="n">exportItertor</span><span class="o">.</span><span class="na">next</span><span class="o">();</span>
+        <span class="nc">Bytes</span> <span class="n">row</span> <span class="o">=</span>  <span class="n">exportEntry</span><span class="o">.</span><span class="na">getKey</span><span class="o">();</span>
+        <span class="nc">UpdateCount</span> <span class="n">uc</span> <span class="o">=</span> <span class="n">exportEntry</span><span class="o">.</span><span class="na">getValue</span><span class="o">();</span>
+        <span class="kt">long</span> <span class="n">seqNum</span> <span class="o">=</span> <span class="n">exportEntry</span><span class="o">.</span><span class="na">getSequence</span><span class="o">();</span>
+
+        <span class="nc">String</span> <span class="n">oldCountRow</span> <span class="o">=</span> <span class="nc">String</span><span class="o">.</span><span class="na">format</span><span class="o">(</span><span class="s">"%06d"</span><span class="o">,</span> <span class="n">uc</span><span class="o">.</span><span class="na">oldCount</span><span class="o">);</span>
+        <span class="nc">String</span> <span class="n">newCountRow</span> <span class="o">=</span> <span class="nc">String</span><span class="o">.</span><span class="na">format</span><span class="o">(</span><span class="s">"%06d"</span><span class="o">,</span> <span class="n">uc</span><span class="o">.</span><span class="na">newCount</span><span class="o">);</span>
+
+        <span class="c1">//add a new entry to the inverted index</span>
+        <span class="n">batchUpdater</span><span class="o">.</span><span class="na">insertRow</span><span class="o">(</span><span class="n">newCountRow</span><span class="o">,</span> <span class="n">row</span><span class="o">,</span> <span class="n">seqNum</span><span class="o">);</span>
+        <span class="c1">//remove the old entry from the inverted index</span>
+        <span class="n">batchUpdater</span><span class="o">.</span><span class="na">deleteRow</span><span class="o">(</span><span class="n">oldCountRow</span><span class="o">,</span> <span class="n">row</span><span class="o">,</span> <span class="n">seqNum</span><span class="o">);</span>
+      <span class="o">}</span>
+
+      <span class="c1">//flush all of the updates to the external query system</span>
+      <span class="n">batchUpdater</span><span class="o">.</span><span class="na">close</span><span class="o">();</span>
+    <span class="o">}</span>
+  <span class="o">}</span>
+</code></pre></div></div>
+
+<h2 id="concurrency">Concurrency</h2>
+
+<p>Additions to the export queue will never collide.  If two transactions add the
+same key at around the same time and successfully commit, then two entries with
+different sequence numbers will always be added to the queue.  The sequence
+number is based on the start timestamp of the transactions.</p>
+
+<p>If the key used to add items to the export queue is deterministically derived
+from something the transaction is writing to, then that will cause a collision.
+For example consider the following interleaving of two transactions adding to
+the same export queue in a manner that will collide. Note, TH1 is shorthand for
+thread 1, ek() is a function the creates the export key, and ev() is a function
+that creates the export value.</p>
+
+<ol>
+  <li>TH1 : key1 = ek(<code class="language-plaintext highlighter-rouge">row1</code>,<code class="language-plaintext highlighter-rouge">fam1:qual1</code>)</li>
+  <li>TH1 : val1 = ev(tx1.get(<code class="language-plaintext highlighter-rouge">row1</code>,<code class="language-plaintext highlighter-rouge">fam1:qual1</code>), tx1.get(<code class="language-plaintext highlighter-rouge">rowA</code>,<code class="language-plaintext highlighter-rouge">fam1:qual2</code>))</li>
+  <li>TH1 : exportQueueA.add(tx1, key1, val1)</li>
+  <li>TH2 : key2 = ek(<code class="language-plaintext highlighter-rouge">row1</code>,<code class="language-plaintext highlighter-rouge">fam1:qual1</code>)</li>
+  <li>TH2 : val2 = ev(tx2.get(<code class="language-plaintext highlighter-rouge">row1</code>,<code class="language-plaintext highlighter-rouge">fam1:qual1</code>), tx2.get(<code class="language-plaintext highlighter-rouge">rowB</code>,<code class="language-plaintext highlighter-rouge">fam1:qual2</code>))</li>
+  <li>TH2 : exportQueueA.add(tx2, key2, val2)</li>
+  <li>TH1 : tx1.set(<code class="language-plaintext highlighter-rouge">row1</code>,<code class="language-plaintext highlighter-rouge">fam1:qual1</code>, val1)</li>
+  <li>TH2 : tx2.set(<code class="language-plaintext highlighter-rouge">row1</code>,<code class="language-plaintext highlighter-rouge">fam1:qual1</code>, val2)</li>
+</ol>
+
+<p>In the example above only one transaction will succeed because both are setting
+<code class="language-plaintext highlighter-rouge">row1 fam1:qual1</code>.  Since adding to the export queue is part of the
+transaction, only the transaction that succeeds will add something to the
+queue.  If the function ek() in the example is deterministic, then both
+transactions would have been trying to add the same key to the export queue.</p>
+
+<p>With the above method, we know that transactions adding entries to the queue for
+the same key must have executed <a href="https://en.wikipedia.org/wiki/Serializability">serially</a>. Knowing that transactions which
+added the same key did not overlap in time makes reasoning about those export
+entries very simple.</p>
+
+<p>The example below is a slight modification of the example above.  In this
+example both transactions will successfully add entries to the queue using the
+same key.  Both transactions succeed because they are writing to different
+cells (<code class="language-plaintext highlighter-rouge">rowB fam1:qual2</code> and <code class="language-plaintext highlighter-rouge">rowA fam1:qual2</code>).  This approach makes it more
+difficult to reason about export entries with the same key, because the
+transactions adding those entries could have overlapped in time.  This is an
+example of write skew mentioned in the Percolator paper.</p>
+
+<ol>
+  <li>TH1 : key1 = ek(<code class="language-plaintext highlighter-rouge">row1</code>,<code class="language-plaintext highlighter-rouge">fam1:qual1</code>)</li>
+  <li>TH1 : val1 = ev(tx1.get(<code class="language-plaintext highlighter-rouge">row1</code>,<code class="language-plaintext highlighter-rouge">fam1:qual1</code>), tx1.get(<code class="language-plaintext highlighter-rouge">rowA</code>,<code class="language-plaintext highlighter-rouge">fam1:qual2</code>))</li>
+  <li>TH1 : exportQueueA.add(tx1, key1, val1)</li>
+  <li>TH2 : key2 = ek(<code class="language-plaintext highlighter-rouge">row1</code>,<code class="language-plaintext highlighter-rouge">fam1:qual1</code>)</li>
+  <li>TH2 : val2 = ev(tx2.get(<code class="language-plaintext highlighter-rouge">row1</code>,<code class="language-plaintext highlighter-rouge">fam1:qual1</code>), tx2.get(<code class="language-plaintext highlighter-rouge">rowB</code>,<code class="language-plaintext highlighter-rouge">fam1:qual2</code>))</li>
+  <li>TH2 : exportQueueA.add(tx2, key2, val2)</li>
+  <li>TH1 : tx1.set(<code class="language-plaintext highlighter-rouge">rowA</code>,<code class="language-plaintext highlighter-rouge">fam1:qual2</code>, val1)</li>
+  <li>TH2 : tx2.set(<code class="language-plaintext highlighter-rouge">rowB</code>,<code class="language-plaintext highlighter-rouge">fam1:qual2</code>, val2)</li>
+</ol>
+
+
+  </article>
+
+</div>
+
+          </div>
+      </div>
+      <div class="row">
+        <div class="col-sm-12 center-block">
+          <footer>
+            <hr/>
+            <p>
+            <a href="https://www.apache.org/foundation/contributing"><img
+              src="https://www.apache.org/images/SupportApache-small.png"
+              id="asf-logo" height="100" alt="Apache"/></a>
+            </p>
+            <p>
+            Copyright &copy; 2020 <a
+              href="https://www.apache.org">The&nbsp;Apache&nbsp;Software&nbsp;Foundation</a>.
+            Licensed under the <a
+              href="https://www.apache.org/licenses/">Apache&nbsp;License,&nbsp;Version&nbsp;2.0</a>
+            </p>
+            <p>
+            Apache®, the names of Apache projects and their logos, and the multicolor feather
+            logo are registered trademarks or trademarks of The Apache Software Foundation
+            in the United States and/or other countries.
+            </p>
+          </footer>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>
diff --git a/output/docs/fluo-recipes/1.0.0-beta-1/index.html b/output/docs/fluo-recipes/1.0.0-beta-1/index.html
new file mode 100644
index 0000000..7a42f5b
--- /dev/null
+++ b/output/docs/fluo-recipes/1.0.0-beta-1/index.html
@@ -0,0 +1,170 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+
+    <link href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/cosmo/bootstrap.min.css" rel="stylesheet" integrity="sha384-h21C2fcDk/eFsW9sC9h0dhokq5pDinLNklTKoxIZRUn3+hvmgQSffLLQ4G4l2eEr" crossorigin="anonymous">
+    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
+    <link rel="stylesheet" href="/css/fluo.css">
+    <link rel="canonical" href="https://fluo.apache.org//docs/fluo-recipes/1.0.0-beta-1/">
+    <link rel="icon" type="image/png" href="/resources/favicon.png">
+    
+    <title>Fluo Recipes 1.0.0-beta-1 Documentation | Apache Fluo</title>
+
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
+    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+    <!-- Place your <script> tags here. -->
+
+<script>window.twttr = (function(d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0],
+    t = window.twttr || {};
+  if (d.getElementById(id)) return t;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "https://platform.twitter.com/widgets.js";
+  fjs.parentNode.insertBefore(js, fjs);
+
+  t._e = [];
+  t.ready = function(f) {
+    t._e.push(f);
+  };
+
+  return t;
+}(document, "script", "twitter-wjs"));</script>
+
+  </head>
+  <body style="padding-top: 100px">
+    <nav id="fluo-nav" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <div class="navbar-toggle-wrapper visible-xs">
+            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".js-navbar-collapse">
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+            </button>
+          </div>
+          <a href="/" class="navbar-brand"><img id="fluo-img" height="40px" src="/resources/fluo-logo-dark.png" alt="Apache Fluo"></a>
+        </div>
+        <div class="collapse navbar-collapse js-navbar-collapse" style="margin-top: 20px">
+          <ul class="navbar-nav nav">
+            <li><a href="/releases/">Releases</a></li>
+            <li><a href="/tour/">Tour</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Docs<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/docs/fluo/1.2/">Fluo</a></li>
+                <li><a href="/docs/fluo-recipes/1.2/">Fluo Recipes</a></li>
+              </ul>
+            </li>
+            <li><a href="/api/">API</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Community<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/contactus/">Contact Us</a></li>
+                <li><a href="/news/">News Archive</a></li>
+                <li><a href="/people/">People</a></li>
+                <li><a href="/related-projects/">Related Projects</a></li>
+                <li><a href="/poweredby/">Powered By</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Contributing<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/how-to-contribute/">How To Contribute</a></li>
+                <li><a href="/release-process/">Release Process</a></li>
+              </ul>
+            </li>
+            <li><a href="/search/">Search</a></li>
+          </ul>
+          <ul class="navbar-nav nav navbar-right">
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#"><img alt="Apache Software Foundation" src="https://www.apache.org/images/feather-small.png" width="70"/><span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="https://www.apache.org">Apache Homepage</a></li>
+                <li><a href="https://www.apache.org/licenses/">License</a></li>
+                <li><a href="https://www.apache.org/foundation/sponsorship">Sponsorship</i></a></li>
+                <li><a href="https://www.apache.org/security">Security</a></li>
+                <li><a href="https://www.apache.org/foundation/thanks">Thanks</a></li>
+                <li><a href="https://www.apache.org/foundation/policies/conduct">Code of Conduct</a></li>
+                <li><a href="https://www.apache.org/events/current-event.html">Current Event</a></li>
+              </ul>
+            </li>
+          </ul>
+        </div>
+      </div>
+    </nav>
+    <div class="container">
+      <div class="row">
+          <div class="col-sm-12">
+            <div class="fluo-doc">
+
+  
+  <div class="alert alert-danger" role="alert">These docs are for Fluo Recipes 1.0.0-beta-1 which is an old version! Check out the <a href="/docs/fluo-recipes/1.2">latest docs</a>!</div>
+  
+
+  
+  <div class="alert alert-danger" role="alert">These docs are for a release of Fluo Recipes made before Apache incubation.</div>
+  
+
+  <header class="post-header">
+    <h2 class="post-title">Fluo Recipes 1.0.0-beta-1 Documentation</h2>
+  </header>
+
+  <article id="page-content">
+    <p>Common code for Fluo application developers.</p>
+
+<h3 id="available-recipes">Available Recipes</h3>
+
+<ul>
+  <li><a href="/docs/fluo-recipes/1.0.0-beta-1/cfm/">Collision Free Map</a> - A recipe for making many to many updates.</li>
+  <li><a href="/docs/fluo-recipes/1.0.0-beta-1/export-queue/">Export Queue</a> - A recipe for exporting data from Fluo to external systems.</li>
+  <li><a href="/docs/fluo-recipes/1.0.0-beta-1/recording-tx/">RecordingTransaction</a> - A wrapper for a Fluo transaction that records all transaction
+operations to a log which can be used to export data from Fluo.</li>
+</ul>
+
+<h3 id="common-functionality">Common Functionality</h3>
+
+<p>Recipes have common needs that are broken down into the following reusable components.</p>
+
+<ul>
+  <li><a href="/docs/fluo-recipes/1.0.0-beta-1/serialization/">Serialization</a> - Common code for serializing POJOs.</li>
+  <li><a href="/docs/fluo-recipes/1.0.0-beta-1/transient/">Transient Ranges</a> - Standardized process for dealing with transient data.</li>
+  <li><a href="/docs/fluo-recipes/1.0.0-beta-1/table-optimization/">Table optimization</a> - Standardized process for optimizing the Fluo table.</li>
+</ul>
+
+
+  </article>
+
+</div>
+
+          </div>
+      </div>
+      <div class="row">
+        <div class="col-sm-12 center-block">
+          <footer>
+            <hr/>
+            <p>
+            <a href="https://www.apache.org/foundation/contributing"><img
+              src="https://www.apache.org/images/SupportApache-small.png"
+              id="asf-logo" height="100" alt="Apache"/></a>
+            </p>
+            <p>
+            Copyright &copy; 2020 <a
+              href="https://www.apache.org">The&nbsp;Apache&nbsp;Software&nbsp;Foundation</a>.
+            Licensed under the <a
+              href="https://www.apache.org/licenses/">Apache&nbsp;License,&nbsp;Version&nbsp;2.0</a>
+            </p>
+            <p>
+            Apache®, the names of Apache projects and their logos, and the multicolor feather
+            logo are registered trademarks or trademarks of The Apache Software Foundation
+            in the United States and/or other countries.
+            </p>
+          </footer>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>
diff --git a/output/docs/fluo-recipes/1.0.0-beta-1/recording-tx/index.html b/output/docs/fluo-recipes/1.0.0-beta-1/recording-tx/index.html
new file mode 100644
index 0000000..3fd05b4
--- /dev/null
+++ b/output/docs/fluo-recipes/1.0.0-beta-1/recording-tx/index.html
@@ -0,0 +1,211 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+
+    <link href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/cosmo/bootstrap.min.css" rel="stylesheet" integrity="sha384-h21C2fcDk/eFsW9sC9h0dhokq5pDinLNklTKoxIZRUn3+hvmgQSffLLQ4G4l2eEr" crossorigin="anonymous">
+    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
+    <link rel="stylesheet" href="/css/fluo.css">
+    <link rel="canonical" href="https://fluo.apache.org//docs/fluo-recipes/1.0.0-beta-1/recording-tx/">
+    <link rel="icon" type="image/png" href="/resources/favicon.png">
+    
+    <title>RecordingTransaction recipe | Apache Fluo</title>
+
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
+    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+    <!-- Place your <script> tags here. -->
+
+<script>window.twttr = (function(d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0],
+    t = window.twttr || {};
+  if (d.getElementById(id)) return t;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "https://platform.twitter.com/widgets.js";
+  fjs.parentNode.insertBefore(js, fjs);
+
+  t._e = [];
+  t.ready = function(f) {
+    t._e.push(f);
+  };
+
+  return t;
+}(document, "script", "twitter-wjs"));</script>
+
+  </head>
+  <body style="padding-top: 100px">
+    <nav id="fluo-nav" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <div class="navbar-toggle-wrapper visible-xs">
+            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".js-navbar-collapse">
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+            </button>
+          </div>
+          <a href="/" class="navbar-brand"><img id="fluo-img" height="40px" src="/resources/fluo-logo-dark.png" alt="Apache Fluo"></a>
+        </div>
+        <div class="collapse navbar-collapse js-navbar-collapse" style="margin-top: 20px">
+          <ul class="navbar-nav nav">
+            <li><a href="/releases/">Releases</a></li>
+            <li><a href="/tour/">Tour</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Docs<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/docs/fluo/1.2/">Fluo</a></li>
+                <li><a href="/docs/fluo-recipes/1.2/">Fluo Recipes</a></li>
+              </ul>
+            </li>
+            <li><a href="/api/">API</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Community<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/contactus/">Contact Us</a></li>
+                <li><a href="/news/">News Archive</a></li>
+                <li><a href="/people/">People</a></li>
+                <li><a href="/related-projects/">Related Projects</a></li>
+                <li><a href="/poweredby/">Powered By</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Contributing<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/how-to-contribute/">How To Contribute</a></li>
+                <li><a href="/release-process/">Release Process</a></li>
+              </ul>
+            </li>
+            <li><a href="/search/">Search</a></li>
+          </ul>
+          <ul class="navbar-nav nav navbar-right">
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#"><img alt="Apache Software Foundation" src="https://www.apache.org/images/feather-small.png" width="70"/><span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="https://www.apache.org">Apache Homepage</a></li>
+                <li><a href="https://www.apache.org/licenses/">License</a></li>
+                <li><a href="https://www.apache.org/foundation/sponsorship">Sponsorship</i></a></li>
+                <li><a href="https://www.apache.org/security">Security</a></li>
+                <li><a href="https://www.apache.org/foundation/thanks">Thanks</a></li>
+                <li><a href="https://www.apache.org/foundation/policies/conduct">Code of Conduct</a></li>
+                <li><a href="https://www.apache.org/events/current-event.html">Current Event</a></li>
+              </ul>
+            </li>
+          </ul>
+        </div>
+      </div>
+    </nav>
+    <div class="container">
+      <div class="row">
+          <div class="col-sm-12">
+            <div class="fluo-doc">
+
+  
+  <div class="alert alert-danger" role="alert">These docs are for Fluo Recipes 1.0.0-beta-1 which is an old version! Check out the <a href="/docs/fluo-recipes/1.2">latest docs</a>!</div>
+  
+
+  
+  <div class="alert alert-danger" role="alert">These docs are for a release of Fluo Recipes made before Apache incubation.</div>
+  
+
+  <header class="post-header">
+    <h2 class="post-title">RecordingTransaction recipe</h2>
+  </header>
+
+  <article id="page-content">
+    <p>A <code class="language-plaintext highlighter-rouge">RecordingTransaction</code> is an implementation of <code class="language-plaintext highlighter-rouge">Transaction</code> that logs all transaction operations
+(i.e GET, SET, or DELETE) to a <code class="language-plaintext highlighter-rouge">TxLog</code> object for later uses such as exporting data.  The code below
+shows how a RecordingTransaction is created by wrapping a Transaction object:</p>
+
+<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nc">RecordingTransactionBase</span> <span class="n">rtx</span> <span class="o">=</span> <span class="nc">RecordingTransactionBase</span><span class="o">.</span><span class="na">wrap</span><span class="o">(</span><span class="n">tx</span><span class="o">);</span>
+</code></pre></div></div>
+
+<p>A predicate function can be passed to wrap method to select which log entries to record.  The code
+below only records log entries whose column family is <code class="language-plaintext highlighter-rouge">meta</code>:</p>
+
+<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nc">RecordingTransactionBase</span> <span class="n">rtx</span> <span class="o">=</span> <span class="nc">RecordingTransactionBase</span><span class="o">.</span><span class="na">wrap</span><span class="o">(</span><span class="n">tx</span><span class="o">,</span>
+                               <span class="n">le</span> <span class="o">-&gt;</span> <span class="n">le</span><span class="o">.</span><span class="na">getColumn</span><span class="o">().</span><span class="na">getFamily</span><span class="o">().</span><span class="na">toString</span><span class="o">().</span><span class="na">equals</span><span class="o">(</span><span class="s">"meta"</span><span class="o">));</span>
+</code></pre></div></div>
+
+<p>After creating a RecordingTransaction, users can use it as they would use a Transaction object.</p>
+
+<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nc">Bytes</span> <span class="n">value</span> <span class="o">=</span> <span class="n">rtx</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="nc">Bytes</span><span class="o">.</span><span class="na">of</span><span class="o">(</span><span class="s">"r1"</span><span class="o">),</span> <span class="k">new</span> <span class="nc">Column</sp [...]
+</code></pre></div></div>
+
+<p>While SET or DELETE operations are always recorded to the log, GET operations are only recorded if a
+value was found at the requested row/column.  Also, if a GET method returns an iterator, only the GET
+operations that are retrieved from the iterator are logged.  GET operations are logged as they are
+necessary if you want to determine the changes made by the transaction.</p>
+
+<p>When you are done operating on the transaction, you can retrieve the TxLog using the following code:</p>
+
+<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nc">TxLog</span> <span class="n">myTxLog</span> <span class="o">=</span> <span class="n">rtx</span><span class="o">.</span><span class="na">getTxLog</span><span class="o">()</span>
+</code></pre></div></div>
+
+<p>Below is example code of how a RecordingTransaction can be used in an observer to record all operations
+performed by the transaction in a TxLog.  In this example, a GET (if data exists) and SET operation
+will be logged.  This TxLog can be added to an export queue and later used to export updates from 
+Fluo.</p>
+
+<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">class</span> <span class="nc">MyObserver</span> <span class="kd">extends</span> <span class="nc">AbstractObserver</span> <span class="o">{</span>
+
+    <span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="no">TYPEL</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">TypeLayer</span><span class="o">(</span><span class="k">new</span> <span class="nc">StringEncoder</span><span class="o">());</span>
+    
+    <span class="kd">private</span> <span class="nc">ExportQueue</span><span class="o">&lt;</span><span class="nc">Bytes</span><span class="o">,</span> <span class="nc">TxLog</span><span class="o">&gt;</span> <span class="n">exportQueue</span><span class="o">;</span>
+
+    <span class="nd">@Override</span>
+    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">process</span><span class="o">(</span><span class="nc">TransactionBase</span> <span class="n">tx</span><span class="o">,</span> <span class="nc">Bytes</span> <span class="n">row</span><span class="o">,</span> <span class="nc">Column</span> <span class="n">col</span><span class="o">)</span> <span class="o">{</span>
+
+        <span class="c1">// create recording transaction (rtx)</span>
+        <span class="nc">RecordingTransactionBase</span> <span class="n">rtx</span> <span class="o">=</span> <span class="nc">RecordingTransactionBase</span><span class="o">.</span><span class="na">wrap</span><span class="o">(</span><span class="n">tx</span><span class="o">);</span>
+        
+        <span class="c1">// use rtx to create a typed transaction &amp; perform operations</span>
+        <span class="nc">TypedTransactionBase</span> <span class="n">ttx</span> <span class="o">=</span> <span class="no">TYPEL</span><span class="o">.</span><span class="na">wrap</span><span class="o">(</span><span class="n">rtx</span><span class="o">);</span>
+        <span class="kt">int</span> <span class="n">count</span> <span class="o">=</span> <span class="n">ttx</span><span class="o">.</span><span class="na">get</span><span class="o">().</span><span class="na">row</span><span class="o">(</span><span class="n">row</span><span class="o">).</span><span class="na">fam</span><span class="o">(</span><span class="s">"meta"</span><span class="o">).</span><span class="na">qual</span><span class="o">(</span><span class="s">"counter1"</span><span c [...]
+        <span class="n">ttx</span><span class="o">.</span><span class="na">mutate</span><span class="o">().</span><span class="na">row</span><span class="o">(</span><span class="n">row</span><span class="o">).</span><span class="na">fam</span><span class="o">(</span><span class="s">"meta"</span><span class="o">).</span><span class="na">qual</span><span class="o">(</span><span class="s">"counter1"</span><span class="o">).</span><span class="na">set</span><span class="o">(</span><span clas [...]
+        
+        <span class="c1">// when finished performing operations, retrieve transaction log</span>
+        <span class="nc">TxLog</span> <span class="n">txLog</span> <span class="o">=</span> <span class="n">rtx</span><span class="o">.</span><span class="na">getTxLog</span><span class="o">()</span>
+
+        <span class="c1">// add txLog to exportQueue if not empty</span>
+        <span class="k">if</span> <span class="o">(!</span><span class="n">txLog</span><span class="o">.</span><span class="na">isEmpty</span><span class="o">())</span> <span class="o">{</span>
+          <span class="c1">//do not pass rtx to exportQueue.add()</span>
+          <span class="n">exportQueue</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">tx</span><span class="o">,</span> <span class="n">row</span><span class="o">,</span> <span class="n">txLog</span><span class="o">)</span>
+        <span class="o">}</span>
+    <span class="o">}</span>
+<span class="o">}</span>
+</code></pre></div></div>
+
+  </article>
+
+</div>
+
+          </div>
+      </div>
+      <div class="row">
+        <div class="col-sm-12 center-block">
+          <footer>
+            <hr/>
+            <p>
+            <a href="https://www.apache.org/foundation/contributing"><img
+              src="https://www.apache.org/images/SupportApache-small.png"
+              id="asf-logo" height="100" alt="Apache"/></a>
+            </p>
+            <p>
+            Copyright &copy; 2020 <a
+              href="https://www.apache.org">The&nbsp;Apache&nbsp;Software&nbsp;Foundation</a>.
+            Licensed under the <a
+              href="https://www.apache.org/licenses/">Apache&nbsp;License,&nbsp;Version&nbsp;2.0</a>
+            </p>
+            <p>
+            Apache®, the names of Apache projects and their logos, and the multicolor feather
+            logo are registered trademarks or trademarks of The Apache Software Foundation
+            in the United States and/or other countries.
+            </p>
+          </footer>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>
diff --git a/output/docs/fluo-recipes/1.0.0-beta-1/serialization/index.html b/output/docs/fluo-recipes/1.0.0-beta-1/serialization/index.html
new file mode 100644
index 0000000..e713962
--- /dev/null
+++ b/output/docs/fluo-recipes/1.0.0-beta-1/serialization/index.html
@@ -0,0 +1,214 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+
+    <link href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/cosmo/bootstrap.min.css" rel="stylesheet" integrity="sha384-h21C2fcDk/eFsW9sC9h0dhokq5pDinLNklTKoxIZRUn3+hvmgQSffLLQ4G4l2eEr" crossorigin="anonymous">
+    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
+    <link rel="stylesheet" href="/css/fluo.css">
+    <link rel="canonical" href="https://fluo.apache.org//docs/fluo-recipes/1.0.0-beta-1/serialization/">
+    <link rel="icon" type="image/png" href="/resources/favicon.png">
+    
+    <title>Serializing Data | Apache Fluo</title>
+
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
+    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+    <!-- Place your <script> tags here. -->
+
+<script>window.twttr = (function(d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0],
+    t = window.twttr || {};
+  if (d.getElementById(id)) return t;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "https://platform.twitter.com/widgets.js";
+  fjs.parentNode.insertBefore(js, fjs);
+
+  t._e = [];
+  t.ready = function(f) {
+    t._e.push(f);
+  };
+
+  return t;
+}(document, "script", "twitter-wjs"));</script>
+
+  </head>
+  <body style="padding-top: 100px">
+    <nav id="fluo-nav" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <div class="navbar-toggle-wrapper visible-xs">
+            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".js-navbar-collapse">
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+            </button>
+          </div>
+          <a href="/" class="navbar-brand"><img id="fluo-img" height="40px" src="/resources/fluo-logo-dark.png" alt="Apache Fluo"></a>
+        </div>
+        <div class="collapse navbar-collapse js-navbar-collapse" style="margin-top: 20px">
+          <ul class="navbar-nav nav">
+            <li><a href="/releases/">Releases</a></li>
+            <li><a href="/tour/">Tour</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Docs<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/docs/fluo/1.2/">Fluo</a></li>
+                <li><a href="/docs/fluo-recipes/1.2/">Fluo Recipes</a></li>
+              </ul>
+            </li>
+            <li><a href="/api/">API</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Community<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/contactus/">Contact Us</a></li>
+                <li><a href="/news/">News Archive</a></li>
+                <li><a href="/people/">People</a></li>
+                <li><a href="/related-projects/">Related Projects</a></li>
+                <li><a href="/poweredby/">Powered By</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Contributing<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/how-to-contribute/">How To Contribute</a></li>
+                <li><a href="/release-process/">Release Process</a></li>
+              </ul>
+            </li>
+            <li><a href="/search/">Search</a></li>
+          </ul>
+          <ul class="navbar-nav nav navbar-right">
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#"><img alt="Apache Software Foundation" src="https://www.apache.org/images/feather-small.png" width="70"/><span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="https://www.apache.org">Apache Homepage</a></li>
+                <li><a href="https://www.apache.org/licenses/">License</a></li>
+                <li><a href="https://www.apache.org/foundation/sponsorship">Sponsorship</i></a></li>
+                <li><a href="https://www.apache.org/security">Security</a></li>
+                <li><a href="https://www.apache.org/foundation/thanks">Thanks</a></li>
+                <li><a href="https://www.apache.org/foundation/policies/conduct">Code of Conduct</a></li>
+                <li><a href="https://www.apache.org/events/current-event.html">Current Event</a></li>
+              </ul>
+            </li>
+          </ul>
+        </div>
+      </div>
+    </nav>
+    <div class="container">
+      <div class="row">
+          <div class="col-sm-12">
+            <div class="fluo-doc">
+
+  
+  <div class="alert alert-danger" role="alert">These docs are for Fluo Recipes 1.0.0-beta-1 which is an old version! Check out the <a href="/docs/fluo-recipes/1.2">latest docs</a>!</div>
+  
+
+  
+  <div class="alert alert-danger" role="alert">These docs are for a release of Fluo Recipes made before Apache incubation.</div>
+  
+
+  <header class="post-header">
+    <h2 class="post-title">Serializing Data</h2>
+  </header>
+
+  <article id="page-content">
+    <p>Various Fluo Recipes deal with POJOs and need to serialize them.  The
+serialization mechanism is configurable and defaults to using <a href="https://github.com/EsotericSoftware/kryo">Kryo</a>.</p>
+
+<h2 id="custom-serialization">Custom Serialization</h2>
+
+<p>In order to use a custom serialization method, two steps need to be taken.  The
+first step is to implement <a href="https://static.javadoc.io/io.fluo/fluo-recipes-core/1.0.0-beta-1/io/fluo/recipes/serialization/SimpleSerializer.html">SimpleSerializer</a>.  The second step is to
+configure Fluo Recipes to use the custom implementation.  This needs to be done
+before initializing Fluo.  Below is an example of how to do this.</p>
+
+<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  <span class="nc">FluoConfiguration</span> <span class="n">fluoConfig</span> <span class="o">=</span> <span class="o">...;</span>
+  <span class="c1">//assume MySerializer implements SimpleSerializer</span>
+  <span class="nc">SimpleSerializer</span><span class="o">.</span><span class="na">setSetserlializer</span><span class="o">(</span><span class="n">fluoConfig</span><span class="o">,</span> <span class="nc">MySerializer</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
+  <span class="c1">//initialize Fluo using fluoConfig</span>
+</code></pre></div></div>
+
+<h2 id="kryo-factory">Kryo Factory</h2>
+
+<p>If using the default Kryo serializer implementation, then creating a
+KryoFactory implementation can lead to smaller serialization size.  When Kryo
+serializes an object graph, it will by default include the fully qualified
+names of the classes in the serialized data.  This can be avoided by
+<a href="https://github.com/EsotericSoftware/kryo#registration">registering classes</a> that will be serialized.  Registration is done by
+creating a KryoFactory and then configuring Fluo Recipes to use it.   The
+example below shows how to do this.</p>
+
+<p>For example assume the POJOs named <code class="language-plaintext highlighter-rouge">Node</code> and <code class="language-plaintext highlighter-rouge">Edge</code> will be serialized and
+need to be registered with Kryo.  This could be done by creating a KryoFactory
+like the following.</p>
+
+<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code>
+<span class="kn">package</span> <span class="nn">com.foo</span><span class="o">;</span>
+
+<span class="kn">import</span> <span class="nn">com.esotericsoftware.kryo.Kryo</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">com.esotericsoftware.kryo.pool.KryoFactory</span><span class="o">;</span>
+
+<span class="kn">import</span> <span class="nn">com.foo.data.Edge</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">com.foo.data.Node</span><span class="o">;</span>
+
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">MyKryoFactory</span> <span class="kd">implements</span> <span class="nc">KryoFactory</span> <span class="o">{</span>
+  <span class="nd">@Override</span>
+  <span class="kd">public</span> <span class="nc">Kryo</span> <span class="nf">create</span><span class="o">()</span> <span class="o">{</span>
+    <span class="nc">Kryo</span> <span class="n">kryo</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">Kryo</span><span class="o">();</span>
+    
+    <span class="c1">//Explicitly assign each class a unique id here to ensure its stable over</span>
+    <span class="c1">//time and in different environments with different dependencies.</span>
+    <span class="n">kryo</span><span class="o">.</span><span class="na">register</span><span class="o">(</span><span class="nc">Node</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="mi">9</span><span class="o">);</span>
+    <span class="n">kryo</span><span class="o">.</span><span class="na">register</span><span class="o">(</span><span class="nc">Edge</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="mi">10</span><span class="o">);</span>
+    
+    <span class="c1">//instruct kryo that these are the only classes we expect to be serialized</span>
+    <span class="n">kryo</span><span class="o">.</span><span class="na">setRegistrationRequired</span><span class="o">(</span><span class="kc">true</span><span class="o">);</span>
+    
+    <span class="k">return</span> <span class="n">kryo</span><span class="o">;</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre></div></div>
+
+<p>Fluo Recipes must be configured to use this factory.  The following code shows
+how to do this.</p>
+
+<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  <span class="nc">FluoConfiguration</span> <span class="n">fluoConfig</span> <span class="o">=</span> <span class="o">...;</span>
+  <span class="nc">KryoSimplerSerializer</span><span class="o">.</span><span class="na">setKryoFactory</span><span class="o">(</span><span class="n">fluoConfig</span><span class="o">,</span> <span class="nc">MyKryoFactory</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
+  <span class="c1">//initialize Fluo using fluoConfig</span>
+</code></pre></div></div>
+
+
+  </article>
+
+</div>
+
+          </div>
+      </div>
+      <div class="row">
+        <div class="col-sm-12 center-block">
+          <footer>
+            <hr/>
+            <p>
+            <a href="https://www.apache.org/foundation/contributing"><img
+              src="https://www.apache.org/images/SupportApache-small.png"
+              id="asf-logo" height="100" alt="Apache"/></a>
+            </p>
+            <p>
+            Copyright &copy; 2020 <a
+              href="https://www.apache.org">The&nbsp;Apache&nbsp;Software&nbsp;Foundation</a>.
+            Licensed under the <a
+              href="https://www.apache.org/licenses/">Apache&nbsp;License,&nbsp;Version&nbsp;2.0</a>
+            </p>
+            <p>
+            Apache®, the names of Apache projects and their logos, and the multicolor feather
+            logo are registered trademarks or trademarks of The Apache Software Foundation
+            in the United States and/or other countries.
+            </p>
+          </footer>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>
diff --git a/output/docs/fluo-recipes/1.0.0-beta-1/table-optimization/index.html b/output/docs/fluo-recipes/1.0.0-beta-1/table-optimization/index.html
new file mode 100644
index 0000000..cc6736a
--- /dev/null
+++ b/output/docs/fluo-recipes/1.0.0-beta-1/table-optimization/index.html
@@ -0,0 +1,203 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+
+    <link href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/cosmo/bootstrap.min.css" rel="stylesheet" integrity="sha384-h21C2fcDk/eFsW9sC9h0dhokq5pDinLNklTKoxIZRUn3+hvmgQSffLLQ4G4l2eEr" crossorigin="anonymous">
+    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
+    <link rel="stylesheet" href="/css/fluo.css">
+    <link rel="canonical" href="https://fluo.apache.org//docs/fluo-recipes/1.0.0-beta-1/table-optimization/">
+    <link rel="icon" type="image/png" href="/resources/favicon.png">
+    
+    <title>Fluo Table Optimization | Apache Fluo</title>
+
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
+    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+    <!-- Place your <script> tags here. -->
+
+<script>window.twttr = (function(d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0],
+    t = window.twttr || {};
+  if (d.getElementById(id)) return t;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "https://platform.twitter.com/widgets.js";
+  fjs.parentNode.insertBefore(js, fjs);
+
+  t._e = [];
+  t.ready = function(f) {
+    t._e.push(f);
+  };
+
+  return t;
+}(document, "script", "twitter-wjs"));</script>
+
+  </head>
+  <body style="padding-top: 100px">
+    <nav id="fluo-nav" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <div class="navbar-toggle-wrapper visible-xs">
+            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".js-navbar-collapse">
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+            </button>
+          </div>
+          <a href="/" class="navbar-brand"><img id="fluo-img" height="40px" src="/resources/fluo-logo-dark.png" alt="Apache Fluo"></a>
+        </div>
+        <div class="collapse navbar-collapse js-navbar-collapse" style="margin-top: 20px">
+          <ul class="navbar-nav nav">
+            <li><a href="/releases/">Releases</a></li>
+            <li><a href="/tour/">Tour</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Docs<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/docs/fluo/1.2/">Fluo</a></li>
+                <li><a href="/docs/fluo-recipes/1.2/">Fluo Recipes</a></li>
+              </ul>
+            </li>
+            <li><a href="/api/">API</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Community<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/contactus/">Contact Us</a></li>
+                <li><a href="/news/">News Archive</a></li>
+                <li><a href="/people/">People</a></li>
+                <li><a href="/related-projects/">Related Projects</a></li>
+                <li><a href="/poweredby/">Powered By</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Contributing<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/how-to-contribute/">How To Contribute</a></li>
+                <li><a href="/release-process/">Release Process</a></li>
+              </ul>
+            </li>
+            <li><a href="/search/">Search</a></li>
+          </ul>
+          <ul class="navbar-nav nav navbar-right">
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#"><img alt="Apache Software Foundation" src="https://www.apache.org/images/feather-small.png" width="70"/><span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="https://www.apache.org">Apache Homepage</a></li>
+                <li><a href="https://www.apache.org/licenses/">License</a></li>
+                <li><a href="https://www.apache.org/foundation/sponsorship">Sponsorship</i></a></li>
+                <li><a href="https://www.apache.org/security">Security</a></li>
+                <li><a href="https://www.apache.org/foundation/thanks">Thanks</a></li>
+                <li><a href="https://www.apache.org/foundation/policies/conduct">Code of Conduct</a></li>
+                <li><a href="https://www.apache.org/events/current-event.html">Current Event</a></li>
+              </ul>
+            </li>
+          </ul>
+        </div>
+      </div>
+    </nav>
+    <div class="container">
+      <div class="row">
+          <div class="col-sm-12">
+            <div class="fluo-doc">
+
+  
+  <div class="alert alert-danger" role="alert">These docs are for Fluo Recipes 1.0.0-beta-1 which is an old version! Check out the <a href="/docs/fluo-recipes/1.2">latest docs</a>!</div>
+  
+
+  
+  <div class="alert alert-danger" role="alert">These docs are for a release of Fluo Recipes made before Apache incubation.</div>
+  
+
+  <header class="post-header">
+    <h2 class="post-title">Fluo Table Optimization</h2>
+  </header>
+
+  <article id="page-content">
+    <h2 id="background">Background</h2>
+
+<p>Recipes may need to make Accumulo specific table modifications for optimal
+performance.  Configuring the Accumulo tablet balancer and adding splits are
+two optimizations that are currently done.  Offering a standard way to do these
+optimizations makes it easier to use recipes correctly.  These optimizations
+are optional.  You could skip them for integration testing, but would probably
+want to use them in production.</p>
+
+<h2 id="java-example">Java Example</h2>
+
+<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nc">FluoConfiguration</span> <span class="n">fluoConf</span> <span class="o">=</span> <span class="o">...</span>
+
+<span class="c1">//export queue configure method will return table optimizations it would like made</span>
+<span class="nc">ExportQueue</span><span class="o">.</span><span class="na">configure</span><span class="o">(</span><span class="n">fluoConf</span><span class="o">,</span> <span class="o">...);</span>
+
+<span class="c1">//CollisionFreeMap.configure() will return table optimizations it would like made</span>
+<span class="nc">CollisionFreeMap</span><span class="o">.</span><span class="na">configure</span><span class="o">(</span><span class="n">fluoConf</span><span class="o">,</span> <span class="o">...);</span>
+
+<span class="c1">//initialize Fluo</span>
+<span class="nc">FluoFactory</span><span class="o">.</span><span class="na">newAdmin</span><span class="o">(</span><span class="n">fluoConf</span><span class="o">).</span><span class="na">initialize</span><span class="o">(...)</span>
+
+<span class="c1">//Automatically optimize the Fluo table for all configured recipes</span>
+<span class="nc">TableOperations</span><span class="o">.</span><span class="na">optimizeTable</span><span class="o">(</span><span class="n">fluoConf</span><span class="o">);</span>
+</code></pre></div></div>
+
+<p>The above example automatically optimizes all configured recipes.  If more
+selective optimizations is need look into using the following methods instead.</p>
+
+<ul>
+  <li><code class="language-plaintext highlighter-rouge">CollisionFreeMap.getTableOptimizations(String mapId, Configuration appConfig)</code></li>
+  <li><code class="language-plaintext highlighter-rouge">ExportQueue.getTableOptimizations(String queueId, Configuration appConfig)</code></li>
+  <li><code class="language-plaintext highlighter-rouge">TableOperations.optimizeTable(FluoConfiguration fluoConfig, Pirtos pirtos)</code></li>
+</ul>
+
+<h2 id="command-example">Command Example</h2>
+
+<p>Fluo Recipes provides an easy way to optimize a Fluo table for configured
+recipes from the command line.  This should be done after configuring recipes
+and initializing Fluo.  Below are example command for initializing in this way.</p>
+
+<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>
+<span class="c">#create application </span>
+fluo new app1
+
+<span class="c">#configure application</span>
+
+<span class="c">#initialize Fluo</span>
+fluo init app1
+
+<span class="c">#optimize table for recipes</span>
+fluo <span class="nb">exec </span>app1 io.fluo.recipes.accumulo.cmds.OptimizeTable
+
+</code></pre></div></div>
+
+  </article>
+
+</div>
+
+          </div>
+      </div>
+      <div class="row">
+        <div class="col-sm-12 center-block">
+          <footer>
+            <hr/>
+            <p>
+            <a href="https://www.apache.org/foundation/contributing"><img
+              src="https://www.apache.org/images/SupportApache-small.png"
+              id="asf-logo" height="100" alt="Apache"/></a>
+            </p>
+            <p>
+            Copyright &copy; 2020 <a
+              href="https://www.apache.org">The&nbsp;Apache&nbsp;Software&nbsp;Foundation</a>.
+            Licensed under the <a
+              href="https://www.apache.org/licenses/">Apache&nbsp;License,&nbsp;Version&nbsp;2.0</a>
+            </p>
+            <p>
+            Apache®, the names of Apache projects and their logos, and the multicolor feather
+            logo are registered trademarks or trademarks of The Apache Software Foundation
+            in the United States and/or other countries.
+            </p>
+          </footer>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>
diff --git a/output/docs/fluo-recipes/1.0.0-beta-1/transient/index.html b/output/docs/fluo-recipes/1.0.0-beta-1/transient/index.html
new file mode 100644
index 0000000..3d3c3c7
--- /dev/null
+++ b/output/docs/fluo-recipes/1.0.0-beta-1/transient/index.html
@@ -0,0 +1,206 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+
+    <link href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/cosmo/bootstrap.min.css" rel="stylesheet" integrity="sha384-h21C2fcDk/eFsW9sC9h0dhokq5pDinLNklTKoxIZRUn3+hvmgQSffLLQ4G4l2eEr" crossorigin="anonymous">
+    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
+    <link rel="stylesheet" href="/css/fluo.css">
+    <link rel="canonical" href="https://fluo.apache.org//docs/fluo-recipes/1.0.0-beta-1/transient/">
+    <link rel="icon" type="image/png" href="/resources/favicon.png">
+    
+    <title>Transient data | Apache Fluo</title>
+
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
+    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+    <!-- Place your <script> tags here. -->
+
+<script>window.twttr = (function(d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0],
+    t = window.twttr || {};
+  if (d.getElementById(id)) return t;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "https://platform.twitter.com/widgets.js";
+  fjs.parentNode.insertBefore(js, fjs);
+
+  t._e = [];
+  t.ready = function(f) {
+    t._e.push(f);
+  };
+
+  return t;
+}(document, "script", "twitter-wjs"));</script>
+
+  </head>
+  <body style="padding-top: 100px">
+    <nav id="fluo-nav" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <div class="navbar-toggle-wrapper visible-xs">
+            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".js-navbar-collapse">
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+            </button>
+          </div>
+          <a href="/" class="navbar-brand"><img id="fluo-img" height="40px" src="/resources/fluo-logo-dark.png" alt="Apache Fluo"></a>
+        </div>
+        <div class="collapse navbar-collapse js-navbar-collapse" style="margin-top: 20px">
+          <ul class="navbar-nav nav">
+            <li><a href="/releases/">Releases</a></li>
+            <li><a href="/tour/">Tour</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Docs<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/docs/fluo/1.2/">Fluo</a></li>
+                <li><a href="/docs/fluo-recipes/1.2/">Fluo Recipes</a></li>
+              </ul>
+            </li>
+            <li><a href="/api/">API</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Community<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/contactus/">Contact Us</a></li>
+                <li><a href="/news/">News Archive</a></li>
+                <li><a href="/people/">People</a></li>
+                <li><a href="/related-projects/">Related Projects</a></li>
+                <li><a href="/poweredby/">Powered By</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Contributing<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/how-to-contribute/">How To Contribute</a></li>
+                <li><a href="/release-process/">Release Process</a></li>
+              </ul>
+            </li>
+            <li><a href="/search/">Search</a></li>
+          </ul>
+          <ul class="navbar-nav nav navbar-right">
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#"><img alt="Apache Software Foundation" src="https://www.apache.org/images/feather-small.png" width="70"/><span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="https://www.apache.org">Apache Homepage</a></li>
+                <li><a href="https://www.apache.org/licenses/">License</a></li>
+                <li><a href="https://www.apache.org/foundation/sponsorship">Sponsorship</i></a></li>
+                <li><a href="https://www.apache.org/security">Security</a></li>
+                <li><a href="https://www.apache.org/foundation/thanks">Thanks</a></li>
+                <li><a href="https://www.apache.org/foundation/policies/conduct">Code of Conduct</a></li>
+                <li><a href="https://www.apache.org/events/current-event.html">Current Event</a></li>
+              </ul>
+            </li>
+          </ul>
+        </div>
+      </div>
+    </nav>
+    <div class="container">
+      <div class="row">
+          <div class="col-sm-12">
+            <div class="fluo-doc">
+
+  
+  <div class="alert alert-danger" role="alert">These docs are for Fluo Recipes 1.0.0-beta-1 which is an old version! Check out the <a href="/docs/fluo-recipes/1.2">latest docs</a>!</div>
+  
+
+  
+  <div class="alert alert-danger" role="alert">These docs are for a release of Fluo Recipes made before Apache incubation.</div>
+  
+
+  <header class="post-header">
+    <h2 class="post-title">Transient data</h2>
+  </header>
+
+  <article id="page-content">
+    <h2 id="background">Background</h2>
+
+<p>Some recipes store transient data in a portion of the Fluo table.  Transient
+data is data that’s continually being added and deleted.  Also these transient
+data ranges contain no long term data.  The way Fluo works, when data is
+deleted a delete marker is inserted but the data is actually still there.  Over
+time these transient ranges of the table will have a lot more delete markers
+than actual data if nothing is done.  If nothing is done, then processing
+transient data will get increasingly slower over time.</p>
+
+<p>These deleted markers can be cleaned up by forcing Accumulo to compact the
+Fluo table, which will run Fluo’s garbage collection iterator. However,
+compacting the entire table to clean up these ranges within a table is
+overkill. Alternatively,  Accumulo supports compacting ranges of a table.   So
+a good solution to the delete marker problem is to periodically compact just
+the transient ranges.</p>
+
+<p>Fluo Recipes provides helper code to deal with transient data ranges in a
+standard way.</p>
+
+<h2 id="registering-transient-ranges">Registering Transient Ranges</h2>
+
+<p>Recipes like <a href="../export-queue/">Export Queue</a> will automatically register
+transient ranges when configured.  If you would like to register your own
+transient ranges, use <a href="https://static.javadoc.io/io.fluo/fluo-recipes-core/1.0.0-beta-1/io/fluo/recipes/common/TransientRegistry.html">TransientRegistry</a>.  Below is a simple example of
+using this.</p>
+
+<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nc">FluoConfiguration</span> <span class="n">fluoConfig</span> <span class="o">=</span> <span class="o">...;</span>
+<span class="nc">TransientRegistry</span> <span class="n">transientRegistry</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">TransientRegistry</span><span class="o">(</span><span class="n">fluoConfig</span><span class="o">.</span><span class="na">getAppConfiguration</span><span class="o">());</span>
+<span class="n">transientRegistry</span><span class="o">.</span><span class="na">addTransientRange</span><span class="o">(</span><span class="k">new</span> <span class="nc">RowRange</span><span class="o">(</span><span class="n">startRow</span><span class="o">,</span> <span class="n">endRow</span><span class="o">));</span>
+
+<span class="c1">//Initialize Fluo using fluoConfig. This will store the registered ranges in</span>
+<span class="c1">//zookeeper making them available on any node later.</span>
+</code></pre></div></div>
+
+<h2 id="compacting-transient-ranges">Compacting Transient Ranges</h2>
+
+<p>Although you may never need to register transient ranges directly, you will
+need to periodically compact transient ranges if using a recipe that registers
+them.  Using <a href="https://static.javadoc.io/io.fluo/fluo-recipes-accumulo/1.0.0-beta-1/io/fluo/recipes/accumulo/ops/TableOperations.html">TableOperations</a> this can be done with one line of Java code
+like the following.</p>
+
+<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nc">FluoConfiguration</span> <span class="n">fluoConfig</span> <span class="o">=</span> <span class="o">...;</span>
+<span class="nc">TableOperations</span><span class="o">.</span><span class="na">compactTransient</span><span class="o">(</span><span class="n">fluoConfig</span><span class="o">);</span>
+</code></pre></div></div>
+
+<p>Fluo recipes provides and easy way to call <code class="language-plaintext highlighter-rouge">compactTransient()</code> from the
+command line using the <code class="language-plaintext highlighter-rouge">fluo exec</code> command as follows:</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>fluo exec &lt;app name&gt; io.fluo.recipes.accumulo.cmds.CompactTransient [&lt;interval&gt; [&lt;count&gt;]]
+</code></pre></div></div>
+
+<p>If no arguments are specified the command will call <code class="language-plaintext highlighter-rouge">compactTransient()</code> once.
+If only <code class="language-plaintext highlighter-rouge">&lt;interval&gt;</code> is specified, the command will loop forever calling
+<code class="language-plaintext highlighter-rouge">compactTransient()</code> sleeping <code class="language-plaintext highlighter-rouge">&lt;interval&gt;</code> seconds between calls.  If <code class="language-plaintext highlighter-rouge">&lt;count&gt;</code>
+is additionally specified then the command will only loop <code class="language-plaintext highlighter-rouge">&lt;count&gt;</code> times.</p>
+
+
+  </article>
+
+</div>
+
+          </div>
+      </div>
+      <div class="row">
+        <div class="col-sm-12 center-block">
+          <footer>
+            <hr/>
+            <p>
+            <a href="https://www.apache.org/foundation/contributing"><img
+              src="https://www.apache.org/images/SupportApache-small.png"
+              id="asf-logo" height="100" alt="Apache"/></a>
+            </p>
+            <p>
+            Copyright &copy; 2020 <a
+              href="https://www.apache.org">The&nbsp;Apache&nbsp;Software&nbsp;Foundation</a>.
+            Licensed under the <a
+              href="https://www.apache.org/licenses/">Apache&nbsp;License,&nbsp;Version&nbsp;2.0</a>
+            </p>
+            <p>
+            Apache®, the names of Apache projects and their logos, and the multicolor feather
+            logo are registered trademarks or trademarks of The Apache Software Foundation
+            in the United States and/or other countries.
+            </p>
+          </footer>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>
diff --git a/output/docs/fluo-recipes/1.0.0-beta-2/accumulo-export/index.html b/output/docs/fluo-recipes/1.0.0-beta-2/accumulo-export/index.html
new file mode 100644
index 0000000..be6819a
--- /dev/null
+++ b/output/docs/fluo-recipes/1.0.0-beta-2/accumulo-export/index.html
@@ -0,0 +1,203 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+
+    <link href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/cosmo/bootstrap.min.css" rel="stylesheet" integrity="sha384-h21C2fcDk/eFsW9sC9h0dhokq5pDinLNklTKoxIZRUn3+hvmgQSffLLQ4G4l2eEr" crossorigin="anonymous">
+    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
+    <link rel="stylesheet" href="/css/fluo.css">
+    <link rel="canonical" href="https://fluo.apache.org//docs/fluo-recipes/1.0.0-beta-2/accumulo-export/">
+    <link rel="icon" type="image/png" href="/resources/favicon.png">
+    
+    <title>Accumulo Export Queue Specialization | Apache Fluo</title>
+
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
+    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+    <!-- Place your <script> tags here. -->
+
+<script>window.twttr = (function(d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0],
+    t = window.twttr || {};
+  if (d.getElementById(id)) return t;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "https://platform.twitter.com/widgets.js";
+  fjs.parentNode.insertBefore(js, fjs);
+
+  t._e = [];
+  t.ready = function(f) {
+    t._e.push(f);
+  };
+
+  return t;
+}(document, "script", "twitter-wjs"));</script>
+
+  </head>
+  <body style="padding-top: 100px">
+    <nav id="fluo-nav" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <div class="navbar-toggle-wrapper visible-xs">
+            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".js-navbar-collapse">
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+            </button>
+          </div>
+          <a href="/" class="navbar-brand"><img id="fluo-img" height="40px" src="/resources/fluo-logo-dark.png" alt="Apache Fluo"></a>
+        </div>
+        <div class="collapse navbar-collapse js-navbar-collapse" style="margin-top: 20px">
+          <ul class="navbar-nav nav">
+            <li><a href="/releases/">Releases</a></li>
+            <li><a href="/tour/">Tour</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Docs<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/docs/fluo/1.2/">Fluo</a></li>
+                <li><a href="/docs/fluo-recipes/1.2/">Fluo Recipes</a></li>
+              </ul>
+            </li>
+            <li><a href="/api/">API</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Community<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/contactus/">Contact Us</a></li>
+                <li><a href="/news/">News Archive</a></li>
+                <li><a href="/people/">People</a></li>
+                <li><a href="/related-projects/">Related Projects</a></li>
+                <li><a href="/poweredby/">Powered By</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Contributing<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/how-to-contribute/">How To Contribute</a></li>
+                <li><a href="/release-process/">Release Process</a></li>
+              </ul>
+            </li>
+            <li><a href="/search/">Search</a></li>
+          </ul>
+          <ul class="navbar-nav nav navbar-right">
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#"><img alt="Apache Software Foundation" src="https://www.apache.org/images/feather-small.png" width="70"/><span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="https://www.apache.org">Apache Homepage</a></li>
+                <li><a href="https://www.apache.org/licenses/">License</a></li>
+                <li><a href="https://www.apache.org/foundation/sponsorship">Sponsorship</i></a></li>
+                <li><a href="https://www.apache.org/security">Security</a></li>
+                <li><a href="https://www.apache.org/foundation/thanks">Thanks</a></li>
+                <li><a href="https://www.apache.org/foundation/policies/conduct">Code of Conduct</a></li>
+                <li><a href="https://www.apache.org/events/current-event.html">Current Event</a></li>
+              </ul>
+            </li>
+          </ul>
+        </div>
+      </div>
+    </nav>
+    <div class="container">
+      <div class="row">
+          <div class="col-sm-12">
+            <div class="fluo-doc">
+
+  
+  <div class="alert alert-danger" role="alert">These docs are for Fluo Recipes 1.0.0-beta-2 which is an old version! Check out the <a href="/docs/fluo-recipes/1.2">latest docs</a>!</div>
+  
+
+  
+  <div class="alert alert-danger" role="alert">These docs are for a release of Fluo Recipes made before Apache incubation.</div>
+  
+
+  <header class="post-header">
+    <h2 class="post-title">Accumulo Export Queue Specialization</h2>
+  </header>
+
+  <article id="page-content">
+    <h2 id="background">Background</h2>
+
+<p>The <a href="/docs/fluo-recipes/1.0.0-beta-2/export-queue/">Export Queue Recipe</a> provides a generic foundation for building export 
+mechanism to any external data store.  A specific Export Queue implementation
+for Accumulo is provided in the Fluo Recipes Accumulo module.</p>
+
+<p>This implementation provides the following functionality :</p>
+
+<ul>
+  <li>Safely batches writes to Accumulo made by multiple transactions exporting data.</li>
+  <li>Stores Accumulo connection information in Fluo configuration, making it accessible by Export Observers running on other nodes.</li>
+  <li>Provides utility code that make it easier and shorter to code common Accumulo export patterns.</li>
+</ul>
+
+<h2 id="example-use">Example Use</h2>
+
+<p>Exporting to Accumulo is easy.  Only two things need to be done.</p>
+
+<ul>
+  <li>Configure the export queue.</li>
+  <li>Implement <a href="https://static.javadoc.io/io.fluo/fluo-recipes-accumulo/1.0.0-beta-2/io/fluo/recipes/accumulo/export/AccumuloExport.html">AccumuloExport</a> with custom code that generates Accumulo mutations.</li>
+</ul>
+
+<p>The following code shows how to configure an Export Queue that will write to an
+external Accumulo table.</p>
+
+<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code>
+<span class="nc">FluoConfiguration</span> <span class="n">fluoConfig</span> <span class="o">=</span> <span class="o">...;</span>
+
+<span class="c1">//Configure an export queue to use the classes Fluo Recipes provides for</span>
+<span class="c1">//exporting to Accumulo</span>
+<span class="nc">ExportQueue</span><span class="o">.</span><span class="na">configure</span><span class="o">(</span><span class="n">fluoConfig</span><span class="o">,</span> <span class="k">new</span> <span class="nc">ExportQueue</span><span class="o">.</span><span class="na">Options</span><span class="o">(</span><span class="no">EXPORT_QUEUE_ID</span><span class="o">,</span>
+    <span class="nc">AccumuloExporter</span><span class="o">.</span><span class="na">class</span><span class="o">.</span><span class="na">getName</span><span class="o">(),</span> <span class="nc">String</span><span class="o">.</span><span class="na">class</span><span class="o">.</span><span class="na">getName</span><span class="o">(),</span> <span class="nc">AccumuloExport</span><span class="o">.</span><span class="na">class</span><span class="o">.</span><span class="na">getName</span><s [...]
+    <span class="n">numMapBuckets</span><span class="o">));</span>
+
+<span class="nc">String</span> <span class="n">instance</span> <span class="o">=</span> <span class="c1">//Name of accumulo instance exporting to</span>
+<span class="nc">String</span> <span class="n">zookeepers</span> <span class="o">=</span> <span class="c1">//zookeepers used by Accumulo instance exporting to</span>
+<span class="nc">String</span> <span class="n">user</span> <span class="o">=</span> <span class="c1">//Accumulo username, user that can write to exportTable</span>
+<span class="nc">String</span> <span class="n">password</span> <span class="o">=</span> <span class="c1">//Accumulo user password</span>
+<span class="nc">String</span> <span class="n">exportTable</span> <span class="o">=</span> <span class="c1">//Name of table to export to</span>
+
+<span class="c1">//Configure the Accumulo table to export to.</span>
+<span class="nc">AccumuloExporter</span><span class="o">.</span><span class="na">setExportTableInfo</span><span class="o">(</span><span class="n">fluoConfig</span><span class="o">,</span> <span class="no">EXPORT_QUEUE_ID</span><span class="o">,</span>
+    <span class="k">new</span> <span class="nf">TableInfo</span><span class="o">(</span><span class="n">instance</span><span class="o">,</span> <span class="n">zookeepers</span><span class="o">,</span> <span class="n">user</span><span class="o">,</span> <span class="n">password</span><span class="o">,</span> <span class="n">exportTable</span><span class="o">));</span>
+
+<span class="c1">//initialize Fluo using fluoConfig</span>
+
+</code></pre></div></div>
+
+<p>After the export queue is initialized as specified above, any Object that
+implements <a href="https://static.javadoc.io/io.fluo/fluo-recipes-accumulo/1.0.0-beta-2/io/fluo/recipes/accumulo/export/AccumuloExport.html">AccumuloExport</a> can be added to the queue.  For the common
+pattern of deleting old data and inserting new data, consider extending
+<a href="https://static.javadoc.io/io.fluo/fluo-recipes-accumulo/1.0.0-beta-2/io/fluo/recipes/accumulo/export/DifferenceExport.html">DifferenceExport</a>.</p>
+
+
+  </article>
+
+</div>
+
+          </div>
+      </div>
+      <div class="row">
+        <div class="col-sm-12 center-block">
+          <footer>
+            <hr/>
+            <p>
+            <a href="https://www.apache.org/foundation/contributing"><img
+              src="https://www.apache.org/images/SupportApache-small.png"
+              id="asf-logo" height="100" alt="Apache"/></a>
+            </p>
+            <p>
+            Copyright &copy; 2020 <a
+              href="https://www.apache.org">The&nbsp;Apache&nbsp;Software&nbsp;Foundation</a>.
+            Licensed under the <a
+              href="https://www.apache.org/licenses/">Apache&nbsp;License,&nbsp;Version&nbsp;2.0</a>
+            </p>
+            <p>
+            Apache®, the names of Apache projects and their logos, and the multicolor feather
+            logo are registered trademarks or trademarks of The Apache Software Foundation
+            in the United States and/or other countries.
+            </p>
+          </footer>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>
diff --git a/output/docs/fluo-recipes/1.0.0-beta-2/cfm/index.html b/output/docs/fluo-recipes/1.0.0-beta-2/cfm/index.html
new file mode 100644
index 0000000..41ab825
--- /dev/null
+++ b/output/docs/fluo-recipes/1.0.0-beta-2/cfm/index.html
@@ -0,0 +1,381 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+
+    <link href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/cosmo/bootstrap.min.css" rel="stylesheet" integrity="sha384-h21C2fcDk/eFsW9sC9h0dhokq5pDinLNklTKoxIZRUn3+hvmgQSffLLQ4G4l2eEr" crossorigin="anonymous">
+    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
+    <link rel="stylesheet" href="/css/fluo.css">
+    <link rel="canonical" href="https://fluo.apache.org//docs/fluo-recipes/1.0.0-beta-2/cfm/">
+    <link rel="icon" type="image/png" href="/resources/favicon.png">
+    
+    <title>Collision Free Map Recipe | Apache Fluo</title>
+
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
+    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+    <!-- Place your <script> tags here. -->
+
+<script>window.twttr = (function(d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0],
+    t = window.twttr || {};
+  if (d.getElementById(id)) return t;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "https://platform.twitter.com/widgets.js";
+  fjs.parentNode.insertBefore(js, fjs);
+
+  t._e = [];
+  t.ready = function(f) {
+    t._e.push(f);
+  };
+
+  return t;
+}(document, "script", "twitter-wjs"));</script>
+
+  </head>
+  <body style="padding-top: 100px">
+    <nav id="fluo-nav" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <div class="navbar-toggle-wrapper visible-xs">
+            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".js-navbar-collapse">
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+              <span class="icon-bar"></span>
+            </button>
+          </div>
+          <a href="/" class="navbar-brand"><img id="fluo-img" height="40px" src="/resources/fluo-logo-dark.png" alt="Apache Fluo"></a>
+        </div>
+        <div class="collapse navbar-collapse js-navbar-collapse" style="margin-top: 20px">
+          <ul class="navbar-nav nav">
+            <li><a href="/releases/">Releases</a></li>
+            <li><a href="/tour/">Tour</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Docs<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/docs/fluo/1.2/">Fluo</a></li>
+                <li><a href="/docs/fluo-recipes/1.2/">Fluo Recipes</a></li>
+              </ul>
+            </li>
+            <li><a href="/api/">API</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Community<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/contactus/">Contact Us</a></li>
+                <li><a href="/news/">News Archive</a></li>
+                <li><a href="/people/">People</a></li>
+                <li><a href="/related-projects/">Related Projects</a></li>
+                <li><a href="/poweredby/">Powered By</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Contributing<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="/how-to-contribute/">How To Contribute</a></li>
+                <li><a href="/release-process/">Release Process</a></li>
+              </ul>
+            </li>
+            <li><a href="/search/">Search</a></li>
+          </ul>
+          <ul class="navbar-nav nav navbar-right">
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#"><img alt="Apache Software Foundation" src="https://www.apache.org/images/feather-small.png" width="70"/><span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="https://www.apache.org">Apache Homepage</a></li>
+                <li><a href="https://www.apache.org/licenses/">License</a></li>
+                <li><a href="https://www.apache.org/foundation/sponsorship">Sponsorship</i></a></li>
+                <li><a href="https://www.apache.org/security">Security</a></li>
+                <li><a href="https://www.apache.org/foundation/thanks">Thanks</a></li>
+                <li><a href="https://www.apache.org/foundation/policies/conduct">Code of Conduct</a></li>
+                <li><a href="https://www.apache.org/events/current-event.html">Current Event</a></li>
+              </ul>
+            </li>
+          </ul>
+        </div>
+      </div>
+    </nav>
+    <div class="container">
+      <div class="row">
+          <div class="col-sm-12">
+            <div class="fluo-doc">
+
+  
... 38733 lines suppressed ...