You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@amoro.apache.org by gi...@apache.org on 2024/04/03 06:13:38 UTC

(incubator-amoro-site) branch asf-site updated: deploy: df8afa7ecfa2831c1a123ab19b2d5de4c8e792c7

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

github-bot pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/incubator-amoro-site.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new 3d67ffa  deploy: df8afa7ecfa2831c1a123ab19b2d5de4c8e792c7
3d67ffa is described below

commit 3d67ffa3e92d9a4eafb98bc9cf57ec4a2840a320
Author: justinmclean <ju...@users.noreply.github.com>
AuthorDate: Wed Apr 3 06:13:34 2024 +0000

    deploy: df8afa7ecfa2831c1a123ab19b2d5de4c8e792c7
---
 output/docs/justinmclean-patch-1/404.html          |   13 +
 .../deployment-on-kubernetes/index.html            |   10 +
 .../admin-guides/deployment/index.html             |   10 +
 .../justinmclean-patch-1/admin-guides/index.xml    |   46 +
 .../admin-guides/managing-catalogs/index.html      |   10 +
 .../admin-guides/managing-optimizers/index.html    |   10 +
 .../admin-guides/using-kyuubi/index.html           |   10 +
 .../docs/justinmclean-patch-1/catalogs/index.html  |  648 ++
 .../docs/justinmclean-patch-1/categories/index.xml |   11 +
 .../justinmclean-patch-1/cdc-ingestion/index.html  | 1094 ++++
 .../concept/catalogs/index.html                    |   10 +
 .../concept/self-optimizing/index.html             |   10 +
 .../concept/table-watermark/index.html             |   10 +
 .../docs/justinmclean-patch-1/concepts/index.xml   |   32 +
 .../justinmclean-patch-1/configurations/index.html |  971 +++
 .../docs/justinmclean-patch-1/css/amoro-theme.css  |  811 +++
 output/docs/justinmclean-patch-1/css/bootstrap.css | 6199 ++++++++++++++++++++
 output/docs/justinmclean-patch-1/css/home-page.css |  198 +
 output/docs/justinmclean-patch-1/css/katex.min.css |    1 +
 output/docs/justinmclean-patch-1/css/markdown.css  |  908 +++
 output/docs/justinmclean-patch-1/css/termynal.css  |  102 +
 .../deployment-on-kubernetes/index.html            |  740 +++
 .../justinmclean-patch-1/deployment/index.html     |  852 +++
 output/docs/justinmclean-patch-1/engines/index.xml |   88 +
 output/docs/justinmclean-patch-1/favicon-16x16.png |  Bin 0 -> 537 bytes
 output/docs/justinmclean-patch-1/favicon-32x32.png |  Bin 0 -> 959 bytes
 output/docs/justinmclean-patch-1/favicon-96x96.png |  Bin 0 -> 2813 bytes
 output/docs/justinmclean-patch-1/favicon.ico       |  Bin 0 -> 1272 bytes
 output/docs/justinmclean-patch-1/favicon.png       |  Bin 0 -> 1716 bytes
 .../flink-datastream/index.html                    |  836 +++
 .../docs/justinmclean-patch-1/flink-ddl/index.html |  997 ++++
 .../docs/justinmclean-patch-1/flink-dml/index.html | 1003 ++++
 .../flink-getting-started/index.html               |  716 +++
 .../flink-using-logstore/index.html                |  701 +++
 .../flink/datastream/index.html                    |   10 +
 .../docs/justinmclean-patch-1/flink/ddl/index.html |   10 +
 .../docs/justinmclean-patch-1/flink/dml/index.html |   10 +
 .../flink/getting-started/index.html               |   10 +
 .../flink/using-logstore/index.html                |   10 +
 .../font-awesome-4.7.0/HELP-US-OUT.txt             |    7 +
 .../font-awesome-4.7.0/css/font-awesome.min.css    |    4 +
 .../font-awesome-4.7.0/fonts/FontAwesome.otf       |  Bin 0 -> 134808 bytes
 .../fonts/fontawesome-webfont.eot                  |  Bin 0 -> 165742 bytes
 .../fonts/fontawesome-webfont.svg                  | 2671 +++++++++
 .../fonts/fontawesome-webfont.ttf                  |  Bin 0 -> 165548 bytes
 .../fonts/fontawesome-webfont.woff                 |  Bin 0 -> 98024 bytes
 .../fonts/fontawesome-webfont.woff2                |  Bin 0 -> 77160 bytes
 .../font-awesome-4.7.0/less/animated.less          |   34 +
 .../font-awesome-4.7.0/less/bordered-pulled.less   |   25 +
 .../font-awesome-4.7.0/less/core.less              |   12 +
 .../font-awesome-4.7.0/less/fixed-width.less       |    6 +
 .../font-awesome-4.7.0/less/font-awesome.less      |   18 +
 .../font-awesome-4.7.0/less/icons.less             |  789 +++
 .../font-awesome-4.7.0/less/larger.less            |   13 +
 .../font-awesome-4.7.0/less/list.less              |   19 +
 .../font-awesome-4.7.0/less/mixins.less            |   60 +
 .../font-awesome-4.7.0/less/path.less              |   15 +
 .../font-awesome-4.7.0/less/rotated-flipped.less   |   20 +
 .../font-awesome-4.7.0/less/screen-reader.less     |    5 +
 .../font-awesome-4.7.0/less/stacked.less           |   20 +
 .../font-awesome-4.7.0/less/variables.less         |  800 +++
 .../font-awesome-4.7.0/scss/_animated.scss         |   34 +
 .../font-awesome-4.7.0/scss/_bordered-pulled.scss  |   25 +
 .../font-awesome-4.7.0/scss/_core.scss             |   12 +
 .../font-awesome-4.7.0/scss/_fixed-width.scss      |    6 +
 .../font-awesome-4.7.0/scss/_icons.scss            |  789 +++
 .../font-awesome-4.7.0/scss/_larger.scss           |   13 +
 .../font-awesome-4.7.0/scss/_list.scss             |   19 +
 .../font-awesome-4.7.0/scss/_mixins.scss           |   60 +
 .../font-awesome-4.7.0/scss/_path.scss             |   15 +
 .../font-awesome-4.7.0/scss/_rotated-flipped.scss  |   20 +
 .../font-awesome-4.7.0/scss/_screen-reader.scss    |    5 +
 .../font-awesome-4.7.0/scss/_stacked.scss          |   20 +
 .../font-awesome-4.7.0/scss/_variables.scss        |  800 +++
 .../font-awesome-4.7.0/scss/font-awesome.scss      |   18 +
 .../fonts/glyphicons-halflings-regular.eot         |  Bin 0 -> 20335 bytes
 .../fonts/glyphicons-halflings-regular.svg         |  229 +
 .../fonts/glyphicons-halflings-regular.ttf         |  Bin 0 -> 41280 bytes
 .../fonts/glyphicons-halflings-regular.woff        |  Bin 0 -> 23320 bytes
 .../formats-overview/index.html                    |  619 ++
 .../formats/iceberg/index.html                     |   10 +
 output/docs/justinmclean-patch-1/formats/index.xml |   46 +
 .../formats/mixed-hive/index.html                  |   10 +
 .../formats/mixed-iceberg/index.html               |   10 +
 .../formats/overview/index.html                    |   10 +
 .../justinmclean-patch-1/formats/paimon/index.html |   10 +
 .../justinmclean-patch-1/iceberg-format/index.html |  611 ++
 .../images/admin/add-optimizer-group.png           |  Bin 0 -> 381203 bytes
 .../images/admin/config-optimizer-group.png        |  Bin 0 -> 559996 bytes
 .../images/admin/create-catalog.png                |  Bin 0 -> 620101 bytes
 .../images/admin/delete_catalog.png                |  Bin 0 -> 600112 bytes
 .../images/admin/hive-table-detail.png             |  Bin 0 -> 362070 bytes
 .../images/admin/hive-table-upgrade.png            |  Bin 0 -> 538115 bytes
 .../images/admin/optimizer_metrics.png             |  Bin 0 -> 1205916 bytes
 .../images/admin/optimizer_release.png             |  Bin 0 -> 370291 bytes
 .../images/admin/optimizer_scale.png               |  Bin 0 -> 484488 bytes
 .../images/admin/table_metrics.png                 |  Bin 0 -> 1219546 bytes
 .../images/admin/table_optimizer_history.png       |  Bin 0 -> 1785005 bytes
 .../images/admin/terminal_introduce.png            |  Bin 0 -> 690713 bytes
 .../images/admin/watermark_table_detail.png        |  Bin 0 -> 1165990 bytes
 .../images/concepts/freshness_cost_performance.png |  Bin 0 -> 80775 bytes
 .../images/concepts/iceberg_format.png             |  Bin 0 -> 88558 bytes
 .../images/concepts/major_optimizing.png           |  Bin 0 -> 200403 bytes
 .../images/concepts/minor_optimizing.png           |  Bin 0 -> 217246 bytes
 .../images/concepts/mixed_format.png               |  Bin 0 -> 333121 bytes
 .../images/concepts/mixed_hive_format.png          |  Bin 0 -> 348816 bytes
 .../images/concepts/quota-occupation.png           |  Bin 0 -> 683351 bytes
 .../images/concepts/self-optimizing_arch.png       |  Bin 0 -> 230759 bytes
 .../docs/justinmclean-patch-1/images/favicon.ico   |  Bin 0 -> 4286 bytes
 .../images/formats/iceberg_format.png              |  Bin 0 -> 88558 bytes
 .../images/formats/mixed_format.png                |  Bin 0 -> 333121 bytes
 .../images/formats/mixed_hive_format.png           |  Bin 0 -> 348816 bytes
 .../images/introduce_amoro.png                     |  Bin 0 -> 700160 bytes
 .../justinmclean-patch-1/img/Catalog-Service.png   |  Bin 0 -> 1284 bytes
 .../docs/justinmclean-patch-1/img/GitHub-Mark.png  |  Bin 0 -> 4268 bytes
 .../img/Infrastructure-Idependent.png              |  Bin 0 -> 403 bytes
 .../justinmclean-patch-1/img/Management-tools.png  |  Bin 0 -> 659 bytes
 .../justinmclean-patch-1/img/Multiple-Formats.png  |  Bin 0 -> 654 bytes
 .../docs/justinmclean-patch-1/img/Rich-Plugins.png |  Bin 0 -> 722 bytes
 .../docs/justinmclean-patch-1/img/Self-managed.png |  Bin 0 -> 702 bytes
 .../docs/justinmclean-patch-1/img/amoro-icon.svg   |    1 +
 .../justinmclean-patch-1/img/amoro-logo-icon.png   |  Bin 0 -> 4647 bytes
 .../docs/justinmclean-patch-1/img/amoro-logo.svg   |    1 +
 .../docs/justinmclean-patch-1/img/amoro_arch.svg   |    1 +
 .../justinmclean-patch-1/img/amoro_logo_dark.svg   |    1 +
 output/docs/justinmclean-patch-1/img/banner.svg    |    1 +
 output/docs/justinmclean-patch-1/img/footer.svg    |    1 +
 .../docs/justinmclean-patch-1/img/github-fill.png  |  Bin 0 -> 783 bytes
 .../docs/justinmclean-patch-1/img/home-content.png |  Bin 0 -> 386492 bytes
 output/docs/justinmclean-patch-1/img/item-icon.png |  Bin 0 -> 300 bytes
 .../justinmclean-patch-1/img/slack-square-fill.png |  Bin 0 -> 870 bytes
 .../docs/justinmclean-patch-1/img/wechat-fill.png  |  Bin 0 -> 695 bytes
 .../docs/justinmclean-patch-1/img/wechat-group.png |  Bin 0 -> 24123 bytes
 output/docs/justinmclean-patch-1/index.html        |  731 +++
 output/docs/justinmclean-patch-1/index.xml         |  214 +
 output/docs/justinmclean-patch-1/js/bootstrap.js   | 2114 +++++++
 .../docs/justinmclean-patch-1/js/bootstrap.min.js  |    6 +
 .../docs/justinmclean-patch-1/js/iceberg-theme.js  |   67 +
 .../docs/justinmclean-patch-1/js/jquery-1.11.0.js  |    4 +
 .../justinmclean-patch-1/js/jquery.easing.min.js   |   44 +
 output/docs/justinmclean-patch-1/js/search.js      |  114 +
 output/docs/justinmclean-patch-1/js/termynal.js    |  197 +
 .../lottie/data-compaction-animation.json          |    1 +
 .../lottie/hidden-partitioning-animation.json      |    1 +
 .../lottie/row-level-deletes-animation.json        |    1 +
 .../managing-catalogs/index.html                   |  670 +++
 .../managing-optimizers/index.html                 |  900 +++
 .../docs/justinmclean-patch-1/metrics/index.html   |  648 ++
 .../mixed-hive-format/index.html                   |  618 ++
 .../mixed-iceberg-format/index.html                |  654 +++
 .../justinmclean-patch-1/paimon-format/index.html  |  612 ++
 output/docs/justinmclean-patch-1/readme/index.html |  618 ++
 output/docs/justinmclean-patch-1/search.json       |    1 +
 .../self-optimizing/index.html                     |  753 +++
 output/docs/justinmclean-patch-1/sitemap.xml       |   79 +
 .../spark-configuration/index.html                 |  666 +++
 .../docs/justinmclean-patch-1/spark-ddl/index.html |  808 +++
 .../spark-getting-started/index.html               |  689 +++
 .../justinmclean-patch-1/spark-queries/index.html  |  640 ++
 .../justinmclean-patch-1/spark-writes/index.html   |  733 +++
 .../spark/configuration/index.html                 |   10 +
 .../docs/justinmclean-patch-1/spark/ddl/index.html |   10 +
 .../spark/getting-started/index.html               |   10 +
 .../justinmclean-patch-1/spark/queries/index.html  |   10 +
 .../justinmclean-patch-1/spark/writes/index.html   |   10 +
 .../table-watermark/index.html                     |  636 ++
 output/docs/justinmclean-patch-1/tags/index.xml    |   11 +
 output/docs/justinmclean-patch-1/trino/index.html  |  736 +++
 .../user-guides/cdc-ingestion/index.html           |   10 +
 .../user-guides/configurations/index.html          |   10 +
 .../justinmclean-patch-1/user-guides/index.xml     |   39 +
 .../user-guides/metrics/index.html                 |   10 +
 .../user-guides/using-tables/index.html            |   10 +
 .../justinmclean-patch-1/using-kyuubi/index.html   |  619 ++
 .../justinmclean-patch-1/using-tables/index.html   |  744 +++
 175 files changed, 40470 insertions(+)

diff --git a/output/docs/justinmclean-patch-1/404.html b/output/docs/justinmclean-patch-1/404.html
new file mode 100644
index 0000000..384ee9a
--- /dev/null
+++ b/output/docs/justinmclean-patch-1/404.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/output/docs/justinmclean-patch-1/admin-guides/deployment-on-kubernetes/index.html b/output/docs/justinmclean-patch-1/admin-guides/deployment-on-kubernetes/index.html
new file mode 100644
index 0000000..1846ab7
--- /dev/null
+++ b/output/docs/justinmclean-patch-1/admin-guides/deployment-on-kubernetes/index.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html lang="en-us">
+  <head>
+    <title>https://amoro.apache.org/docs/justinmclean-patch-1/deployment-on-kubernetes/</title>
+    <link rel="canonical" href="https://amoro.apache.org/docs/justinmclean-patch-1/deployment-on-kubernetes/">
+    <meta name="robots" content="noindex">
+    <meta charset="utf-8">
+    <meta http-equiv="refresh" content="0; url=https://amoro.apache.org/docs/justinmclean-patch-1/deployment-on-kubernetes/">
+  </head>
+</html>
diff --git a/output/docs/justinmclean-patch-1/admin-guides/deployment/index.html b/output/docs/justinmclean-patch-1/admin-guides/deployment/index.html
new file mode 100644
index 0000000..8c92661
--- /dev/null
+++ b/output/docs/justinmclean-patch-1/admin-guides/deployment/index.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html lang="en-us">
+  <head>
+    <title>https://amoro.apache.org/docs/justinmclean-patch-1/deployment/</title>
+    <link rel="canonical" href="https://amoro.apache.org/docs/justinmclean-patch-1/deployment/">
+    <meta name="robots" content="noindex">
+    <meta charset="utf-8">
+    <meta http-equiv="refresh" content="0; url=https://amoro.apache.org/docs/justinmclean-patch-1/deployment/">
+  </head>
+</html>
diff --git a/output/docs/justinmclean-patch-1/admin-guides/index.xml b/output/docs/justinmclean-patch-1/admin-guides/index.xml
new file mode 100644
index 0000000..3b513ac
--- /dev/null
+++ b/output/docs/justinmclean-patch-1/admin-guides/index.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
+  <channel>
+    <title>Admin-Guides on Amoro</title>
+    <link>https://amoro.apache.org/docs/justinmclean-patch-1/admin-guides/</link>
+    <description>Recent content in Admin-Guides on Amoro</description>
+    <generator>Hugo -- gohugo.io</generator>
+    <language>en-us</language>
+    <atom:link href="https://amoro.apache.org/docs/justinmclean-patch-1/admin-guides/index.xml" rel="self" type="application/rss+xml" />
+    <item>
+      <title>Deployment</title>
+      <link>https://amoro.apache.org/docs/justinmclean-patch-1/deployment/</link>
+      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+      <guid>https://amoro.apache.org/docs/justinmclean-patch-1/deployment/</guid>
+      <description>Deployment You can choose to download the stable release package from download page, or the source code form Github and compile it according to the README.&#xA;System requirements Java 8 is required. Java 17 is required for Trino. Optional: MySQL 5.5 or higher Optional: PostgreSQL 14.x or higher Optional: ZooKeeper 3.4.x or higher Optional: Hive (2.x or 3.x) Optional: Hadoop (2.9.x or 3.x) Download the distribution All released package can be downloaded from download p [...]
+    </item>
+    <item>
+      <title>Deployment On Kubernetes</title>
+      <link>https://amoro.apache.org/docs/justinmclean-patch-1/deployment-on-kubernetes/</link>
+      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+      <guid>https://amoro.apache.org/docs/justinmclean-patch-1/deployment-on-kubernetes/</guid>
+      <description>Deploy AMS On Kubernetes Requirements If you want to deploy AMS on Kubernetes, you’d better get a sense of the following things.&#xA;Use AMS official docker image or build AMS docker image An active Kubernetes cluster Kubectl Helm3+ Amoro Official Docker Image You can find the official docker image at Amoro Docker Hub.&#xA;The following are images that can be used in a production environment.&#xA;arctic163/amoro&#xA;This is an image built based on the Amoro binary dist [...]
+    </item>
+    <item>
+      <title>Managing Catalogs</title>
+      <link>https://amoro.apache.org/docs/justinmclean-patch-1/managing-catalogs/</link>
+      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+      <guid>https://amoro.apache.org/docs/justinmclean-patch-1/managing-catalogs/</guid>
+      <description>Managing Catalogs Users can import your test or online clusters through the catalog management function provided by the AMS Dashboard. Before adding a new Catalog, please read the following guidelines and select the appropriate creation according to your actual needs.&#xA;Create catalog In Amoro, the catalog is a namespace for a group of libraries and tables. Under the catalog, it is further divided into different databases, and under each database, there are different [...]
+    </item>
+    <item>
+      <title>Managing Optimizers</title>
+      <link>https://amoro.apache.org/docs/justinmclean-patch-1/managing-optimizers/</link>
+      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+      <guid>https://amoro.apache.org/docs/justinmclean-patch-1/managing-optimizers/</guid>
+      <description>Managing Optimizers The optimizer is the execution unit for performing self-optimizing tasks on a table. To isolate optimizing tasks on different tables and support the deployment of optimizers in different environments, Amoro has proposed the concepts of optimizer containers and optimizer groups:&#xA;Optimizer container: Encapsulate the deployment method of optimizers, there are three implementations for now: flink container based on Flink streaming job, local contain [...]
+    </item>
+    <item>
+      <title>Using Kyuubi By Terminal</title>
+      <link>https://amoro.apache.org/docs/justinmclean-patch-1/using-kyuubi/</link>
+      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+      <guid>https://amoro.apache.org/docs/justinmclean-patch-1/using-kyuubi/</guid>
+      <description>Using Kyuubi By Terminal Prerequisites:&#xA;There must be a running Kyuubi. To deploy and run Kyuubi, please refer to Kyuubi doc Terminal supports interfacing with Kyuubi to submit SQL to Kyuubi for execution. All you need to do is add the Kyuubi configuration as instructed below:&#xA;ams: terminal: backend: kyuubi kyuubi.jdbc.url: jdbc:hive2://127.0.0.1:10009/ # kyuubi Connection Address Without configuring Kyuubi, Terminal executes in memory in AMS.&#xA;To execute SQ [...]
+    </item>
+  </channel>
+</rss>
diff --git a/output/docs/justinmclean-patch-1/admin-guides/managing-catalogs/index.html b/output/docs/justinmclean-patch-1/admin-guides/managing-catalogs/index.html
new file mode 100644
index 0000000..d723633
--- /dev/null
+++ b/output/docs/justinmclean-patch-1/admin-guides/managing-catalogs/index.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html lang="en-us">
+  <head>
+    <title>https://amoro.apache.org/docs/justinmclean-patch-1/managing-catalogs/</title>
+    <link rel="canonical" href="https://amoro.apache.org/docs/justinmclean-patch-1/managing-catalogs/">
+    <meta name="robots" content="noindex">
+    <meta charset="utf-8">
+    <meta http-equiv="refresh" content="0; url=https://amoro.apache.org/docs/justinmclean-patch-1/managing-catalogs/">
+  </head>
+</html>
diff --git a/output/docs/justinmclean-patch-1/admin-guides/managing-optimizers/index.html b/output/docs/justinmclean-patch-1/admin-guides/managing-optimizers/index.html
new file mode 100644
index 0000000..7b9bd00
--- /dev/null
+++ b/output/docs/justinmclean-patch-1/admin-guides/managing-optimizers/index.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html lang="en-us">
+  <head>
+    <title>https://amoro.apache.org/docs/justinmclean-patch-1/managing-optimizers/</title>
+    <link rel="canonical" href="https://amoro.apache.org/docs/justinmclean-patch-1/managing-optimizers/">
+    <meta name="robots" content="noindex">
+    <meta charset="utf-8">
+    <meta http-equiv="refresh" content="0; url=https://amoro.apache.org/docs/justinmclean-patch-1/managing-optimizers/">
+  </head>
+</html>
diff --git a/output/docs/justinmclean-patch-1/admin-guides/using-kyuubi/index.html b/output/docs/justinmclean-patch-1/admin-guides/using-kyuubi/index.html
new file mode 100644
index 0000000..9942842
--- /dev/null
+++ b/output/docs/justinmclean-patch-1/admin-guides/using-kyuubi/index.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html lang="en-us">
+  <head>
+    <title>https://amoro.apache.org/docs/justinmclean-patch-1/using-kyuubi/</title>
+    <link rel="canonical" href="https://amoro.apache.org/docs/justinmclean-patch-1/using-kyuubi/">
+    <meta name="robots" content="noindex">
+    <meta charset="utf-8">
+    <meta http-equiv="refresh" content="0; url=https://amoro.apache.org/docs/justinmclean-patch-1/using-kyuubi/">
+  </head>
+</html>
diff --git a/output/docs/justinmclean-patch-1/catalogs/index.html b/output/docs/justinmclean-patch-1/catalogs/index.html
new file mode 100644
index 0000000..9f5877b
--- /dev/null
+++ b/output/docs/justinmclean-patch-1/catalogs/index.html
@@ -0,0 +1,648 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!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">
+    <meta name="description" content="">
+    <meta name="author" content="">
+    <title>Catalogs</title>
+
+    
+    
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<link href="../css/bootstrap.css" rel="stylesheet">
+
+
+<link href="../css/markdown.css" rel="stylesheet">
+<link href="../css/katex.min.css" rel="stylesheet">
+
+
+
+
+
+<link href="../css/amoro-theme.css" rel="stylesheet">
+
+
+<link href="../font-awesome-4.7.0/css/font-awesome.min.css" rel="stylesheet" type="text/css">
+<link href="//fonts.googleapis.com/css?family=Lato:300,400,700,300italic,400italic,700italic" rel="stylesheet" type="text/css">
+
+
+<link href="../css/termynal.css" rel="stylesheet">
+
+<link href="../css/home-page.css" rel="stylesheet">
+
+
+    
+    
+    
+
+</head>
+<body>
+
+<head>
+    <script>
+        
+        function addAnchor(element) {
+            element.insertAdjacentHTML('beforeend', `<a href="#${element.id}" class="anchortag" ariaLabel="Anchor"> 🔗 </a>` )
+        }
+        document.addEventListener('DOMContentLoaded', function () {
+            var headers = document.querySelectorAll('h1[id], h2[id], h3[id], h4[id]')
+            if (headers) {
+                headers.forEach(addAnchor)
+            }
+        });
+    </script>
+</head>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    <nav class="navbar navbar-default" role="navigation">
+        <topsection>
+            <div class="navbar-fixed-top">
+                <div>
+                <a class="page-scroll navbar-brand" href="https://amoro.apache.org/"><img class="top-navbar-logo" src="https://amoro.apache.org/docs/justinmclean-patch-1//img/amoro-logo-icon.png"/></a>
+                </div>
+            </div>
+            <div class="navbar-menu-fixed-top navbar-pages-group">
+                
+                
+                
+                
+                
+                    
+                    <div class="versions-dropdown">
+                    <div class="topnav-page-selection">
+                        <a   href="">Quickstart</a> <i class="fa fa-caret-down"></i>
+                    </div class="topnav-page-selection">
+                        <div class="versions-dropdown-content">
+                        <ul>
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="https://amoro.apache.org/docs/justinmclean-patch-1/../../quickstart-setup/">Setup</a>
+                            </li class="topnav-page-selection">
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="https://amoro.apache.org/docs/justinmclean-patch-1/../../quick-demo/">Quick Demo</a>
+                            </li class="topnav-page-selection">
+                        
+                        </ul>
+                        </div>
+                    </div>
+                
+                
+                
+                
+                    
+                    <div class="versions-dropdown">
+                    <div class="topnav-page-selection">
+                        <a   href="">Docs</a> <i class="fa fa-caret-down"></i>
+                    </div class="topnav-page-selection">
+                        <div class="versions-dropdown-content">
+                        <ul>
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="https://amoro.apache.org/docs/justinmclean-patch-1/../../docs/latest/">latest</a>
+                            </li class="topnav-page-selection">
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="https://amoro.apache.org/docs/justinmclean-patch-1/../../docs/0.6.1/">0.6.1</a>
+                            </li class="topnav-page-selection">
+                        
+                        </ul>
+                        </div>
+                    </div>
+                
+                
+                
+                
+                    
+                    <div class="versions-dropdown">
+                    <div class="topnav-page-selection">
+                        <a   href="">Benchmark</a> <i class="fa fa-caret-down"></i>
+                    </div class="topnav-page-selection">
+                        <div class="versions-dropdown-content">
+                        <ul>
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="https://amoro.apache.org/docs/justinmclean-patch-1/../../benchmark-report/">Benchmark Report</a>
+                            </li class="topnav-page-selection">
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="https://amoro.apache.org/docs/justinmclean-patch-1/../../benchmark-guide/">Benchmark Guide</a>
+                            </li class="topnav-page-selection">
+                        
+                        </ul>
+                        </div>
+                    </div>
+                
+                
+                
+                
+                    <div class="topnav-page-selection">
+                        <a   href="https://amoro.apache.org/docs/justinmclean-patch-1/../../download/">Download</a>
+                    </div class="topnav-page-selection">
+                
+                
+                
+                
+                    <div class="topnav-page-selection">
+                        <a   href="https://amoro.apache.org/docs/justinmclean-patch-1/../../roadmap/">Roadmap</a>
+                    </div class="topnav-page-selection">
+                
+                
+                
+                
+                    
+                    <div class="versions-dropdown">
+                    <div class="topnav-page-selection">
+                        <a   href="">Community</a> <i class="fa fa-caret-down"></i>
+                    </div class="topnav-page-selection">
+                        <div class="versions-dropdown-content">
+                        <ul>
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="https://amoro.apache.org/docs/justinmclean-patch-1/../../join-community/">Join Community</a>
+                            </li class="topnav-page-selection">
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="https://amoro.apache.org/docs/justinmclean-patch-1/../../how-to-contribute/">How to contribute</a>
+                            </li class="topnav-page-selection">
+                        
+                        </ul>
+                        </div>
+                    </div>
+                
+                
+                <div class="topnav-page-selection">
+                    <a href="https://github.com/apache/incubator-amoro" target="_blank">
+                        <img src="https://amoro.apache.org/docs/justinmclean-patch-1//img/GitHub-Mark.png" target="_blank" class="top-navbar-logo"/>
+                    </a>
+                </div>
+            </div>
+            </topsection>
+    </nav>
+
+<body dir=" ltr">
+    <section>
+        <div class="grid-container leftnav-and-toc">
+            
+                
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div class="sidebar markdown-body">
+    <div id="sidebar-full">
+        
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  <div>
+        <input type="search" class="form-control" id="search-input" placeholder="Search docs..." maxlength="64" data-hotkeys="s/">
+  </div>
+
+
+        
+
+
+
+
+
+
+
+
+
+
+
+
+
+<section>
+    <div id="search-results-container">
+        <ul id="search-results"></ul>
+    </div>
+</section>
+    <div class="sidebar-menu">
+    <ul>
+        
+
+        
+        
+        
+            
+                <li>
+                    <a class="top-menu" id=""  href="../">
+                        <span>Introduction</span>
+                    </a>
+                </li>
+            
+        
+        
+        
+            
+                <li>
+
+
+                    <a class="top-menu chevron-toggle " data-toggle="collapse" href="#Concepts">
+                        <span>Concepts</span>
+                    </a>
+                </li>
+        <div id="Concepts" class="collapse in">
+                <ul class="sub-menu">
+                    
+                        <li>
+                            <a href="../catalogs/">Catalogs</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../self-optimizing/">Self-Optimizing</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../table-watermark/">Table Watermark</a>
+                        </li>
+                    
+                </ul>
+        </div>
+            
+        
+        
+        
+            
+                <li>
+
+
+                    <a class="top-menu chevron-toggle  collapsed" data-toggle="collapse" href="#Admin_Guides">
+                        <span>Admin Guides</span>
+                    </a>
+                </li>
+        <div id="Admin_Guides" class="collapse in">
+                <ul class="sub-menu">
+                    
+                        <li>
+                            <a href="../deployment/">Deployment</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../deployment-on-kubernetes/">Deployment On Kubernetes</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../managing-catalogs/">Managing Catalogs</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../managing-optimizers/">Managing Optimizers</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../using-kyuubi/">Using Kyuubi By Terminal</a>
+                        </li>
+                    
+                </ul>
+        </div>
+            
+        
+        
+        
+            
+                <li>
+
+
+                    <a class="top-menu chevron-toggle  collapsed" data-toggle="collapse" href="#User_Guides">
+                        <span>User Guides</span>
+                    </a>
+                </li>
+        <div id="User_Guides" class="collapse in">
+                <ul class="sub-menu">
+                    
+                        <li>
+                            <a href="../using-tables/">Using Tables</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../configurations/">Configurations</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../cdc-ingestion/">CDC Ingestion</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../metrics/">Metrics</a>
+                        </li>
+                    
+                </ul>
+        </div>
+            
+        
+        
+        
+            
+                <li>
+
+
+                    <a class="top-menu chevron-toggle  collapsed" data-toggle="collapse" href="#Formats">
+                        <span>Formats</span>
+                    </a>
+                </li>
+        <div id="Formats" class="collapse in">
+                <ul class="sub-menu">
+                    
+                        <li>
+                            <a href="../formats-overview/">Overview</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../iceberg-format/">Iceberg</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../mixed-iceberg-format/">Mixed-Iceberg</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../mixed-hive-format/">Mixed-Hive</a>
+                        </li>
+                    
+                </ul>
+        </div>
+            
+        
+        
+        
+            
+                <li>
+
+
+                    <a class="top-menu chevron-toggle  collapsed" data-toggle="collapse" href="#Flink">
+                        <span>Flink</span>
+                    </a>
+                </li>
+        <div id="Flink" class="collapse in">
+                <ul class="sub-menu">
+                    
+                        <li>
+                            <a href="../flink-getting-started/">Flink Getting Started</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../flink-ddl/">Flink DDL</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../flink-dml/">Flink DML</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../flink-datastream/">Flink DataStream</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../flink-using-logstore/">Using Logstore</a>
+                        </li>
+                    
+                </ul>
+        </div>
+            
+        
+        
+        
+            
+                <li>
+
+
+                    <a class="top-menu chevron-toggle  collapsed" data-toggle="collapse" href="#Spark">
+                        <span>Spark</span>
+                    </a>
+                </li>
+        <div id="Spark" class="collapse in">
+                <ul class="sub-menu">
+                    
+                        <li>
+                            <a href="../spark-getting-started/">Spark Getting Started</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../spark-configuration/">Spark Configuration</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../spark-ddl/">Spark DDL</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../spark-queries/">Spark Queries</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../spark-writes/">Spark Writes</a>
+                        </li>
+                    
+                </ul>
+        </div>
+            
+        
+        
+        
+            
+                <li>
+                    <a class="top-menu" id=""  href="../trino/">
+                        <span>Trino</span>
+                    </a>
+                </li>
+            
+        
+        </ul>
+        </div>
+    </div>
+    
+</div>
+
+            
+            <div id="content" class="markdown-body">
+                <div class="margin-for-toc"><h1 id="catalogs">Catalogs</h1>
+<h2 id="introduce-multi-catalog">Introduce multi-catalog</h2>
+<p>A catalog is a metadata namespace that stores information about databases, tables, views, indexes, users, and UDFs. It provides a higher-level
+namespace for <code>table</code> and <code>database</code>. Typically, a catalog is associated with a specific type of data source or cluster. In Flink, Spark and Trino,
+the multi-catalog feature can be used to support SQL across data sources, such as:</p>
+<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-SQL" data-lang="SQL"><span style="display:flex;"><span><span style="color:#66d9ef">SELECT</span> <span style="color:#66d9ef">c</span>.ID, <span style="color:#66d9ef">c</span>.NAME, <span style="color:#66d9ef">c</span>.AGE, o.AMOUNT
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">FROM</span> MYSQL.ONLINE.CUSTOMERS <span style="color:#66d9ef">c</span> <span style="color:#66d9ef">JOIN</span> HIVE.OFFLINE.ORDERS o
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">ON</span> (<span style="color:#66d9ef">c</span>.ID <span style="color:#f92672">=</span> o.CUSTOMER_ID)
+</span></span></code></pre></div><p>In the past, data lakes were managed using the Hive Metastore (HMS) to handle metadata. Unfortunately, HMS does not support multi-catalog, which
+limits the capabilities of engines on the data lake. For example, some users may want to use Spark to perform federated computation across different
+Hive clusters by specifying the catalog name, requiring them to develop a Hive catalog plugin in the upper layer. Additionally, data lake formats are
+moving from a single Hive-centric approach to a landscape of competing formats such as Iceberg, Delta, and Hudi. These new data lake formats are more
+cloud-friendly and will facilitate the migration of data lakes to the cloud. In this context, a management system that supports multi-catalog is
+needed to help users govern data lakes with different environments and formats.</p>
+<p>Users can create catalogs in Amoro for different environments, clusters, and table formats, and leverage the multi-catalog feature in Flink, Spark
+and Trino to enable federated computation across multiple clusters and formats. Additionally, properties configured in catalogs can be shared by all
+tables and users, avoiding duplication. By leveraging the multi-catalog design, Amoro provides support for a metadata center in data platforms.</p>
+<p>When AMS and HMS are used together, HMS serves as the storage foundation for AMS. With the <a href="../iceberg-format/">Iceberg Format</a>, users can leverage the
+multi-catalog management functionality of AMS without introducing any Amoro dependencies.</p>
+<h2 id="how-to-use">How to use</h2>
+<p>Amoro v0.4 introduced the catalog management feature, where table creation is performed under a catalog. Users can create, edit, and delete catalogs
+in the catalogs module, which requires configuration of metastore, table format, and environment information upon creation. For more information,
+please refer to the documentation: <a href="../managing-catalogs/">Managing catalogs</a></p>
+<p>In practice, it is recommended to create a catalog as follows:</p>
+<ul>
+<li>If you want to collaborate with HMS, it is recommended to choose Hive as the <code>Metastore</code>, and choose Mixed-Hive or Iceberg as the <code>Format</code>
+according to your needs.</li>
+<li>If you want to use the Mixed-Iceberg Format provided by Amoro, it is recommended to choose Amoro as the <code>Metastore</code>.</li>
+</ul>
+<p>Currently, only one table format can be selected when creating an Amoro catalog. This is mainly because the engine will parse the catalog into a
+specific data source when using it, and a one-to-one format is intuitive. On the other hand, this limitation can be bypassed when using HMS directly,
+such as the SessionCatalog implementation provided by the Iceberg community. In the future, Amoro will consider providing users with more flexible
+management methods.</p>
+<h2 id="future-work">Future work</h2>
+<p>AMS will focus on two goals to enhance the value of the metadata center in the future:</p>
+<ul>
+<li>Expand data sources: In addition to data lakes, message queues, databases, and data warehouses can all be managed as objects in the catalog.
+Through metadata center and SQL-based federated computing of the computing engine, AMS will provide infrastructure solutions for data platforms
+such as DataOps and DataFabric</li>
+<li>Automatic catalog detection: In compute engines like Spark and Flink, it is possible to automatically detect the creation and changes of a
+catalog, enabling a one-time configuration for permanent scalability.</li>
+</ul>
+</div>
+                
+                    
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div id="toc" class="markdown-body">
+    <div id="full">
+        <nav id="TableOfContents">
+  <ul>
+    <li><a href="#introduce-multi-catalog">Introduce multi-catalog</a></li>
+    <li><a href="#how-to-use">How to use</a></li>
+    <li><a href="#future-work">Future work</a></li>
+  </ul>
+</nav>
+    </div>
+</div>
+
+                
+            </div>
+        </div>
+    </section>
+</body>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<script src="https://amoro.apache.org/docs/justinmclean-patch-1//js/jquery-1.11.0.js"></script>
+
+
+<script src="https://amoro.apache.org/docs/justinmclean-patch-1//js/jquery.easing.min.js"></script>
+
+
+<script type="text/javascript" src="https://amoro.apache.org/docs/justinmclean-patch-1//js/search.js"></script>
+
+
+<script src="https://amoro.apache.org/docs/justinmclean-patch-1//js/bootstrap.min.js"></script>
+
+
+<script src="https://amoro.apache.org/docs/justinmclean-patch-1//js/iceberg-theme.js"></script>
+
+
+
+</html>
\ No newline at end of file
diff --git a/output/docs/justinmclean-patch-1/categories/index.xml b/output/docs/justinmclean-patch-1/categories/index.xml
new file mode 100644
index 0000000..9302aae
--- /dev/null
+++ b/output/docs/justinmclean-patch-1/categories/index.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
+  <channel>
+    <title>Categories on Amoro</title>
+    <link>https://amoro.apache.org/docs/justinmclean-patch-1/categories/</link>
+    <description>Recent content in Categories on Amoro</description>
+    <generator>Hugo -- gohugo.io</generator>
+    <language>en-us</language>
+    <atom:link href="https://amoro.apache.org/docs/justinmclean-patch-1/categories/index.xml" rel="self" type="application/rss+xml" />
+  </channel>
+</rss>
diff --git a/output/docs/justinmclean-patch-1/cdc-ingestion/index.html b/output/docs/justinmclean-patch-1/cdc-ingestion/index.html
new file mode 100644
index 0000000..4969aac
--- /dev/null
+++ b/output/docs/justinmclean-patch-1/cdc-ingestion/index.html
@@ -0,0 +1,1094 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!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">
+    <meta name="description" content="">
+    <meta name="author" content="">
+    <title>CDC Ingestion</title>
+
+    
+    
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<link href="../css/bootstrap.css" rel="stylesheet">
+
+
+<link href="../css/markdown.css" rel="stylesheet">
+<link href="../css/katex.min.css" rel="stylesheet">
+
+
+
+
+
+<link href="../css/amoro-theme.css" rel="stylesheet">
+
+
+<link href="../font-awesome-4.7.0/css/font-awesome.min.css" rel="stylesheet" type="text/css">
+<link href="//fonts.googleapis.com/css?family=Lato:300,400,700,300italic,400italic,700italic" rel="stylesheet" type="text/css">
+
+
+<link href="../css/termynal.css" rel="stylesheet">
+
+<link href="../css/home-page.css" rel="stylesheet">
+
+
+    
+    
+    
+
+</head>
+<body>
+
+<head>
+    <script>
+        
+        function addAnchor(element) {
+            element.insertAdjacentHTML('beforeend', `<a href="#${element.id}" class="anchortag" ariaLabel="Anchor"> 🔗 </a>` )
+        }
+        document.addEventListener('DOMContentLoaded', function () {
+            var headers = document.querySelectorAll('h1[id], h2[id], h3[id], h4[id]')
+            if (headers) {
+                headers.forEach(addAnchor)
+            }
+        });
+    </script>
+</head>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    <nav class="navbar navbar-default" role="navigation">
+        <topsection>
+            <div class="navbar-fixed-top">
+                <div>
+                <a class="page-scroll navbar-brand" href="https://amoro.apache.org/"><img class="top-navbar-logo" src="https://amoro.apache.org/docs/justinmclean-patch-1//img/amoro-logo-icon.png"/></a>
+                </div>
+            </div>
+            <div class="navbar-menu-fixed-top navbar-pages-group">
+                
+                
+                
+                
+                
+                    
+                    <div class="versions-dropdown">
+                    <div class="topnav-page-selection">
+                        <a   href="">Quickstart</a> <i class="fa fa-caret-down"></i>
+                    </div class="topnav-page-selection">
+                        <div class="versions-dropdown-content">
+                        <ul>
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="https://amoro.apache.org/docs/justinmclean-patch-1/../../quickstart-setup/">Setup</a>
+                            </li class="topnav-page-selection">
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="https://amoro.apache.org/docs/justinmclean-patch-1/../../quick-demo/">Quick Demo</a>
+                            </li class="topnav-page-selection">
+                        
+                        </ul>
+                        </div>
+                    </div>
+                
+                
+                
+                
+                    
+                    <div class="versions-dropdown">
+                    <div class="topnav-page-selection">
+                        <a   href="">Docs</a> <i class="fa fa-caret-down"></i>
+                    </div class="topnav-page-selection">
+                        <div class="versions-dropdown-content">
+                        <ul>
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="https://amoro.apache.org/docs/justinmclean-patch-1/../../docs/latest/">latest</a>
+                            </li class="topnav-page-selection">
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="https://amoro.apache.org/docs/justinmclean-patch-1/../../docs/0.6.1/">0.6.1</a>
+                            </li class="topnav-page-selection">
+                        
+                        </ul>
+                        </div>
+                    </div>
+                
+                
+                
+                
+                    
+                    <div class="versions-dropdown">
+                    <div class="topnav-page-selection">
+                        <a   href="">Benchmark</a> <i class="fa fa-caret-down"></i>
+                    </div class="topnav-page-selection">
+                        <div class="versions-dropdown-content">
+                        <ul>
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="https://amoro.apache.org/docs/justinmclean-patch-1/../../benchmark-report/">Benchmark Report</a>
+                            </li class="topnav-page-selection">
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="https://amoro.apache.org/docs/justinmclean-patch-1/../../benchmark-guide/">Benchmark Guide</a>
+                            </li class="topnav-page-selection">
+                        
+                        </ul>
+                        </div>
+                    </div>
+                
+                
+                
+                
+                    <div class="topnav-page-selection">
+                        <a   href="https://amoro.apache.org/docs/justinmclean-patch-1/../../download/">Download</a>
+                    </div class="topnav-page-selection">
+                
+                
+                
+                
+                    <div class="topnav-page-selection">
+                        <a   href="https://amoro.apache.org/docs/justinmclean-patch-1/../../roadmap/">Roadmap</a>
+                    </div class="topnav-page-selection">
+                
+                
+                
+                
+                    
+                    <div class="versions-dropdown">
+                    <div class="topnav-page-selection">
+                        <a   href="">Community</a> <i class="fa fa-caret-down"></i>
+                    </div class="topnav-page-selection">
+                        <div class="versions-dropdown-content">
+                        <ul>
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="https://amoro.apache.org/docs/justinmclean-patch-1/../../join-community/">Join Community</a>
+                            </li class="topnav-page-selection">
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="https://amoro.apache.org/docs/justinmclean-patch-1/../../how-to-contribute/">How to contribute</a>
+                            </li class="topnav-page-selection">
+                        
+                        </ul>
+                        </div>
+                    </div>
+                
+                
+                <div class="topnav-page-selection">
+                    <a href="https://github.com/apache/incubator-amoro" target="_blank">
+                        <img src="https://amoro.apache.org/docs/justinmclean-patch-1//img/GitHub-Mark.png" target="_blank" class="top-navbar-logo"/>
+                    </a>
+                </div>
+            </div>
+            </topsection>
+    </nav>
+
+<body dir=" ltr">
+    <section>
+        <div class="grid-container leftnav-and-toc">
+            
+                
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div class="sidebar markdown-body">
+    <div id="sidebar-full">
+        
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  <div>
+        <input type="search" class="form-control" id="search-input" placeholder="Search docs..." maxlength="64" data-hotkeys="s/">
+  </div>
+
+
+        
+
+
+
+
+
+
+
+
+
+
+
+
+
+<section>
+    <div id="search-results-container">
+        <ul id="search-results"></ul>
+    </div>
+</section>
+    <div class="sidebar-menu">
+    <ul>
+        
+
+        
+        
+        
+            
+                <li>
+                    <a class="top-menu" id=""  href="../">
+                        <span>Introduction</span>
+                    </a>
+                </li>
+            
+        
+        
+        
+            
+                <li>
+
+
+                    <a class="top-menu chevron-toggle  collapsed" data-toggle="collapse" href="#Concepts">
+                        <span>Concepts</span>
+                    </a>
+                </li>
+        <div id="Concepts" class="collapse in">
+                <ul class="sub-menu">
+                    
+                        <li>
+                            <a href="../catalogs/">Catalogs</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../self-optimizing/">Self-Optimizing</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../table-watermark/">Table Watermark</a>
+                        </li>
+                    
+                </ul>
+        </div>
+            
+        
+        
+        
+            
+                <li>
+
+
+                    <a class="top-menu chevron-toggle  collapsed" data-toggle="collapse" href="#Admin_Guides">
+                        <span>Admin Guides</span>
+                    </a>
+                </li>
+        <div id="Admin_Guides" class="collapse in">
+                <ul class="sub-menu">
+                    
+                        <li>
+                            <a href="../deployment/">Deployment</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../deployment-on-kubernetes/">Deployment On Kubernetes</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../managing-catalogs/">Managing Catalogs</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../managing-optimizers/">Managing Optimizers</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../using-kyuubi/">Using Kyuubi By Terminal</a>
+                        </li>
+                    
+                </ul>
+        </div>
+            
+        
+        
+        
+            
+                <li>
+
+
+                    <a class="top-menu chevron-toggle " data-toggle="collapse" href="#User_Guides">
+                        <span>User Guides</span>
+                    </a>
+                </li>
+        <div id="User_Guides" class="collapse in">
+                <ul class="sub-menu">
+                    
+                        <li>
+                            <a href="../using-tables/">Using Tables</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../configurations/">Configurations</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../cdc-ingestion/">CDC Ingestion</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../metrics/">Metrics</a>
+                        </li>
+                    
+                </ul>
+        </div>
+            
+        
+        
+        
+            
+                <li>
+
+
+                    <a class="top-menu chevron-toggle  collapsed" data-toggle="collapse" href="#Formats">
+                        <span>Formats</span>
+                    </a>
+                </li>
+        <div id="Formats" class="collapse in">
+                <ul class="sub-menu">
+                    
+                        <li>
+                            <a href="../formats-overview/">Overview</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../iceberg-format/">Iceberg</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../mixed-iceberg-format/">Mixed-Iceberg</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../mixed-hive-format/">Mixed-Hive</a>
+                        </li>
+                    
+                </ul>
+        </div>
+            
+        
+        
+        
+            
+                <li>
+
+
+                    <a class="top-menu chevron-toggle  collapsed" data-toggle="collapse" href="#Flink">
+                        <span>Flink</span>
+                    </a>
+                </li>
+        <div id="Flink" class="collapse in">
+                <ul class="sub-menu">
+                    
+                        <li>
+                            <a href="../flink-getting-started/">Flink Getting Started</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../flink-ddl/">Flink DDL</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../flink-dml/">Flink DML</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../flink-datastream/">Flink DataStream</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../flink-using-logstore/">Using Logstore</a>
+                        </li>
+                    
+                </ul>
+        </div>
+            
+        
+        
+        
+            
+                <li>
+
+
+                    <a class="top-menu chevron-toggle  collapsed" data-toggle="collapse" href="#Spark">
+                        <span>Spark</span>
+                    </a>
+                </li>
+        <div id="Spark" class="collapse in">
+                <ul class="sub-menu">
+                    
+                        <li>
+                            <a href="../spark-getting-started/">Spark Getting Started</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../spark-configuration/">Spark Configuration</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../spark-ddl/">Spark DDL</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../spark-queries/">Spark Queries</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../spark-writes/">Spark Writes</a>
+                        </li>
+                    
+                </ul>
+        </div>
+            
+        
+        
+        
+            
+                <li>
+                    <a class="top-menu" id=""  href="../trino/">
+                        <span>Trino</span>
+                    </a>
+                </li>
+            
+        
+        </ul>
+        </div>
+    </div>
+    
+</div>
+
+            
+            <div id="content" class="markdown-body">
+                <div class="margin-for-toc"><h1 id="cdc-ingestion">CDC Ingestion</h1>
+<p>CDC stands for Change Data Capture, which is a broad concept, as long as it can capture the change data, it can be called CDC. <a href="https://github.com/ververica/flink-cdc-connectors">Flink CDC</a> is a Log message-based data capture tool, all the inventory and incremental data can be captured. Taking MySQL as an example, it can easily capture Binlog data through Debezium and process the calculations in real time to send them to the data lake. The data lake can then be queried by o [...]
+<p>This section will show how to ingest one table or multiple tables into the data lake for both <a href="../iceberg-format/">Iceberg</a> format and <a href="../mixed-iceberg-format/">Mixed-Iceberg</a> format.</p>
+<h2 id="ingest-into-one-table">Ingest into one table</h2>
+<h3 id="iceberg-format">Iceberg format</h3>
+<p>The following example will show how MySQL CDC data is written to an Iceberg table.</p>
+<p><strong>Requirements</strong></p>
+<p>Please add <a href="https://repo1.maven.org/maven2/com/ververica/flink-sql-connector-mysql-cdc/2.3.0/flink-connector-mysql-cdc-2.3.0.jar">Flink SQL Connector MySQL CDC</a> and <a href="https://repo1.maven.org/maven2/org/apache/iceberg/iceberg-flink-1.14/1.1.0/iceberg-flink-1.14-1.1.0.jar">Iceberg</a> Jars to the lib directory of the Flink engine package.</p>
+<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sql" data-lang="sql"><span style="display:flex;"><span><span style="color:#66d9ef">CREATE</span> <span style="color:#66d9ef">TABLE</span> products (
+</span></span><span style="display:flex;"><span>    id INT,
+</span></span><span style="display:flex;"><span>    name STRING,
+</span></span><span style="display:flex;"><span>    description STRING,
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">PRIMARY</span> <span style="color:#66d9ef">KEY</span> (id) <span style="color:#66d9ef">NOT</span> ENFORCED
+</span></span><span style="display:flex;"><span>) <span style="color:#66d9ef">WITH</span> (
+</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#39;connector&#39;</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;mysql-cdc&#39;</span>,
+</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#39;hostname&#39;</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;localhost&#39;</span>,
+</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#39;port&#39;</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;3306&#39;</span>,
+</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#39;username&#39;</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;root&#39;</span>,
+</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#39;password&#39;</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;123456&#39;</span>,
+</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#39;database-name&#39;</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;mydb&#39;</span>,
+</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#39;table-name&#39;</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;products&#39;</span>
+</span></span><span style="display:flex;"><span>);
+</span></span><span style="display:flex;"><span>  
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">CREATE</span> <span style="color:#66d9ef">CATALOG</span> iceberg_hadoop_catalog <span style="color:#66d9ef">WITH</span> (
+</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#39;type&#39;</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#39;iceberg&#39;</span>,
+</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#39;catalog-type&#39;</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#39;hadoop&#39;</span>,
+</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#39;warehouse&#39;</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#39;hdfs://nn:8020/warehouse/path&#39;</span>,
+</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#39;property-version&#39;</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#39;1&#39;</span>
+</span></span><span style="display:flex;"><span>);
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">CREATE</span> <span style="color:#66d9ef">TABLE</span> <span style="color:#66d9ef">IF</span> <span style="color:#66d9ef">NOT</span> <span style="color:#66d9ef">EXISTS</span> <span style="color:#f92672">`</span>iceberg_hadoop_catalog<span style="color:#f92672">`</span>.<span style="color:#f92672">`</span><span style="color:#66d9ef">default</span><span style="color:#f92672">`</span>.<span style="color:#f92672">`</s [...]
+</span></span><span style="display:flex;"><span>    id INT,
+</span></span><span style="display:flex;"><span>    name STRING,
+</span></span><span style="display:flex;"><span>    description STRING,
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">PRIMARY</span> <span style="color:#66d9ef">KEY</span> (id) <span style="color:#66d9ef">NOT</span> ENFORCED
+</span></span><span style="display:flex;"><span>);
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">INSERT</span> <span style="color:#66d9ef">INTO</span> <span style="color:#f92672">`</span>iceberg_hadoop_catalog<span style="color:#f92672">`</span>.<span style="color:#f92672">`</span><span style="color:#66d9ef">default</span><span style="color:#f92672">`</span>.<span style="color:#f92672">`</span>sample<span style="color:#f92672">`</span> <span style="color:#66d9ef">SELECT</span> <span style="color:#f92672">*</ [...]
+</span></span></code></pre></div><h3 id="mixed-iceberg-format">Mixed-Iceberg format</h3>
+<p>The following example will show how MySQL CDC data is written to a Mixed-Iceberg table.</p>
+<p><strong>Requirements</strong></p>
+<p>Please add <a href="https://repo1.maven.org/maven2/com/ververica/flink-sql-connector-mysql-cdc/2.3.0/flink-connector-mysql-cdc-2.3.0.jar">Flink SQL Connector MySQL CDC</a> and <a href="../../../download/">Amoro</a> Jars to the lib directory of the Flink engine package.</p>
+<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sql" data-lang="sql"><span style="display:flex;"><span><span style="color:#66d9ef">CREATE</span> <span style="color:#66d9ef">TABLE</span> products (
+</span></span><span style="display:flex;"><span>    id INT,
+</span></span><span style="display:flex;"><span>    name STRING,
+</span></span><span style="display:flex;"><span>    description STRING,
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">PRIMARY</span> <span style="color:#66d9ef">KEY</span> (id) <span style="color:#66d9ef">NOT</span> ENFORCED
+</span></span><span style="display:flex;"><span>) <span style="color:#66d9ef">WITH</span> (
+</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#39;connector&#39;</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;mysql-cdc&#39;</span>,
+</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#39;hostname&#39;</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;localhost&#39;</span>,
+</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#39;port&#39;</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;3306&#39;</span>,
+</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#39;username&#39;</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;root&#39;</span>,
+</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#39;password&#39;</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;123456&#39;</span>,
+</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#39;database-name&#39;</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;mydb&#39;</span>,
+</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#39;table-name&#39;</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;products&#39;</span>
+</span></span><span style="display:flex;"><span>);
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">CREATE</span> <span style="color:#66d9ef">CATALOG</span> arctic_catalog <span style="color:#66d9ef">WITH</span> (
+</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#39;type&#39;</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#39;arctic&#39;</span>,
+</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#39;metastore.url&#39;</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#39;thrift://&lt;ip&gt;:&lt;port&gt;/&lt;catalog_name_in_metastore&gt;&#39;</span>
+</span></span><span style="display:flex;"><span>); 
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">CREATE</span> <span style="color:#66d9ef">TABLE</span> <span style="color:#66d9ef">IF</span> <span style="color:#66d9ef">NOT</span> <span style="color:#66d9ef">EXISTS</span> <span style="color:#f92672">`</span>arctic_catalog<span style="color:#f92672">`</span>.<span style="color:#f92672">`</span>db<span style="color:#f92672">`</span>.<span style="color:#f92672">`</span>test_tb<span style="color:#f92672">`</span>(
+</span></span><span style="display:flex;"><span>    id INT,
+</span></span><span style="display:flex;"><span>    name STRING,
+</span></span><span style="display:flex;"><span>    description STRING,
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">PRIMARY</span> <span style="color:#66d9ef">KEY</span> (id) <span style="color:#66d9ef">NOT</span> ENFORCED
+</span></span><span style="display:flex;"><span>);
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">INSERT</span> <span style="color:#66d9ef">INTO</span> <span style="color:#f92672">`</span>arctic_catalog<span style="color:#f92672">`</span>.<span style="color:#f92672">`</span>db<span style="color:#f92672">`</span>.<span style="color:#f92672">`</span>test_tb<span style="color:#f92672">`</span> <span style="color:#66d9ef">SELECT</span> <span style="color:#f92672">*</span> <span style="color:#66d9ef">FROM</span> p [...]
+</span></span></code></pre></div><h2 id="ingest-into-multiple-tables">Ingest Into multiple tables</h2>
+<h3 id="iceberg-format-1">Iceberg format</h3>
+<p>The following example will show how to write CDC data from multiple MySQL tables into the corresponding Iceberg table.</p>
+<p><strong>Requirements</strong></p>
+<p>Please add <a href="https://mvnrepository.com/artifact/com.ververica/flink-connector-mysql-cdc/2.3.0">Flink Connector MySQL CDC</a> and <a href="https://mvnrepository.com/artifact/org.apache.iceberg/iceberg-flink-1.14/1.1.0">Iceberg</a> dependencies to your Maven project&rsquo;s pom.xml file.</p>
+<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#f92672">import</span> com.ververica.cdc.connectors.mysql.source.MySqlSource;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> com.ververica.cdc.connectors.mysql.table.MySqlDeserializationConverterFactory;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> com.ververica.cdc.debezium.DebeziumDeserializationSchema;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> com.ververica.cdc.debezium.table.MetadataConverter;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> com.ververica.cdc.debezium.table.RowDataDebeziumDeserializeSchema;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.flink.api.common.eventtime.WatermarkStrategy;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.flink.api.common.typeinfo.TypeInformation;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.flink.api.java.tuple.Tuple2;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.flink.streaming.api.functions.ProcessFunction;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.flink.table.api.*;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.flink.table.catalog.*;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.flink.table.data.RowData;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.flink.table.data.conversion.RowRowConverter;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.flink.table.data.utils.JoinedRowData;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.flink.table.types.logical.RowType;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.flink.util.Collector;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.flink.util.OutputTag;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.hadoop.conf.Configuration;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.iceberg.CatalogProperties;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.iceberg.Table;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.iceberg.catalog.Catalog;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.iceberg.catalog.Namespace;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.iceberg.catalog.TableIdentifier;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.iceberg.flink.CatalogLoader;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.iceberg.flink.TableLoader;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.iceberg.flink.sink.FlinkSink;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.iceberg.relocated.com.google.common.collect.Maps;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.kafka.connect.data.Struct;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.kafka.connect.source.SourceRecord;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> java.util.*;
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import static</span> com.ververica.cdc.connectors.mysql.table.MySqlReadableMetadata.DATABASE_NAME;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import static</span> com.ververica.cdc.connectors.mysql.table.MySqlReadableMetadata.TABLE_NAME;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import static</span> java.util.stream.Collectors.toMap;
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">public</span> <span style="color:#66d9ef">class</span> <span style="color:#a6e22e">MySqlCDC2IcebergExample</span> {
+</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">public</span> <span style="color:#66d9ef">static</span> <span style="color:#66d9ef">void</span> <span style="color:#a6e22e">main</span>(String<span style="color:#f92672">[]</span> args) <span style="color:#66d9ef">throws</span> Exception {
+</span></span><span style="display:flex;"><span>    List<span style="color:#f92672">&lt;</span>Tuple2<span style="color:#f92672">&lt;</span>ObjectPath, ResolvedCatalogTable<span style="color:#f92672">&gt;&gt;</span> pathAndTable <span style="color:#f92672">=</span> initSourceTables();
+</span></span><span style="display:flex;"><span>    Map<span style="color:#f92672">&lt;</span>String, RowDataDebeziumDeserializeSchema<span style="color:#f92672">&gt;</span> debeziumDeserializeSchemas <span style="color:#f92672">=</span> getDebeziumDeserializeSchemas(pathAndTable);
+</span></span><span style="display:flex;"><span>    MySqlSource<span style="color:#f92672">&lt;</span>RowData<span style="color:#f92672">&gt;</span> mySqlSource <span style="color:#f92672">=</span> MySqlSource.<span style="color:#f92672">&lt;</span>RowData<span style="color:#f92672">&gt;</span>builder()
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">hostname</span>(<span style="color:#e6db74">&#34;yourHostname&#34;</span>)
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">port</span>(yourPort)
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">databaseList</span>(<span style="color:#e6db74">&#34;test_db&#34;</span>)
+</span></span><span style="display:flex;"><span>      <span style="color:#75715e">// setting up tables to be captured</span>
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">tableList</span>(<span style="color:#e6db74">&#34;test_db.user&#34;</span>, <span style="color:#e6db74">&#34;test_db.product&#34;</span>)
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">username</span>(<span style="color:#e6db74">&#34;yourUsername&#34;</span>)
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">password</span>(<span style="color:#e6db74">&#34;yourPassword&#34;</span>)
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">deserializer</span>(<span style="color:#66d9ef">new</span> CompositeDebeziumDeserializationSchema(debeziumDeserializeSchemas))
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">build</span>();
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    StreamExecutionEnvironment env <span style="color:#f92672">=</span> StreamExecutionEnvironment.<span style="color:#a6e22e">getExecutionEnvironment</span>();
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#75715e">// enable checkpoint</span>
+</span></span><span style="display:flex;"><span>    env.<span style="color:#a6e22e">enableCheckpointing</span>(60000);
+</span></span><span style="display:flex;"><span>    
+</span></span><span style="display:flex;"><span>    <span style="color:#75715e">// Split CDC streams by table name</span>
+</span></span><span style="display:flex;"><span>    SingleOutputStreamOperator<span style="color:#f92672">&lt;</span>Void<span style="color:#f92672">&gt;</span> process <span style="color:#f92672">=</span> env
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">fromSource</span>(mySqlSource, WatermarkStrategy.<span style="color:#a6e22e">noWatermarks</span>(), <span style="color:#e6db74">&#34;MySQL Source&#34;</span>)
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">setParallelism</span>(4)
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">process</span>(<span style="color:#66d9ef">new</span> SplitCdcStreamFunction(pathAndTable.<span style="color:#a6e22e">stream</span>()
+</span></span><span style="display:flex;"><span>          .<span style="color:#a6e22e">collect</span>(toMap(e <span style="color:#f92672">-&gt;</span> e.<span style="color:#a6e22e">f0</span>.<span style="color:#a6e22e">toString</span>(),
+</span></span><span style="display:flex;"><span>              e <span style="color:#f92672">-&gt;</span> RowRowConverter.<span style="color:#a6e22e">create</span>(e.<span style="color:#a6e22e">f1</span>.<span style="color:#a6e22e">getResolvedSchema</span>().<span style="color:#a6e22e">toPhysicalRowDataType</span>())))))
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">name</span>(<span style="color:#e6db74">&#34;split stream&#34;</span>);
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#75715e">// create Iceberg sink and insert into CDC data</span>
+</span></span><span style="display:flex;"><span>    Map<span style="color:#f92672">&lt;</span>String, String<span style="color:#f92672">&gt;</span> properties <span style="color:#f92672">=</span> Maps.<span style="color:#a6e22e">newHashMap</span>();
+</span></span><span style="display:flex;"><span>    properties.<span style="color:#a6e22e">put</span>(CatalogProperties.<span style="color:#a6e22e">WAREHOUSE_LOCATION</span>, <span style="color:#e6db74">&#34;yourWarehouseLocation&#34;</span>);
+</span></span><span style="display:flex;"><span>    properties.<span style="color:#a6e22e">put</span>(CatalogProperties.<span style="color:#a6e22e">URI</span>, <span style="color:#e6db74">&#34;yourThriftUri&#34;</span>);
+</span></span><span style="display:flex;"><span>    CatalogLoader catalogLoader <span style="color:#f92672">=</span> CatalogLoader.<span style="color:#a6e22e">hadoop</span>(<span style="color:#e6db74">&#34;hadoop_catalog&#34;</span>, <span style="color:#66d9ef">new</span> Configuration(), properties);
+</span></span><span style="display:flex;"><span>    Catalog icebergHadoopCatalog <span style="color:#f92672">=</span> catalogLoader.<span style="color:#a6e22e">loadCatalog</span>();
+</span></span><span style="display:flex;"><span>    Map<span style="color:#f92672">&lt;</span>String, TableSchema<span style="color:#f92672">&gt;</span> sinkTableSchemas <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> HashMap<span style="color:#f92672">&lt;&gt;</span>();
+</span></span><span style="display:flex;"><span>    sinkTableSchemas.<span style="color:#a6e22e">put</span>(<span style="color:#e6db74">&#34;user&#34;</span>, TableSchema.<span style="color:#a6e22e">builder</span>().<span style="color:#a6e22e">field</span>(<span style="color:#e6db74">&#34;id&#34;</span>, DataTypes.<span style="color:#a6e22e">INT</span>())
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">field</span>(<span style="color:#e6db74">&#34;name&#34;</span>, DataTypes.<span style="color:#a6e22e">STRING</span>()).<span style="color:#a6e22e">field</span>(<span style="color:#e6db74">&#34;op_time&#34;</span>, DataTypes.<span style="color:#a6e22e">TIMESTAMP</span>()).<span style="color:#a6e22e">build</span>());
+</span></span><span style="display:flex;"><span>    sinkTableSchemas.<span style="color:#a6e22e">put</span>(<span style="color:#e6db74">&#34;product&#34;</span>, TableSchema.<span style="color:#a6e22e">builder</span>().<span style="color:#a6e22e">field</span>(<span style="color:#e6db74">&#34;productId&#34;</span>, DataTypes.<span style="color:#a6e22e">INT</span>())
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">field</span>(<span style="color:#e6db74">&#34;price&#34;</span>, DataTypes.<span style="color:#a6e22e">DECIMAL</span>(12, 6)).<span style="color:#a6e22e">field</span>(<span style="color:#e6db74">&#34;saleCount&#34;</span>, DataTypes.<span style="color:#a6e22e">INT</span>()).<span style="color:#a6e22e">build</span>());
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">for</span> (Map.<span style="color:#a6e22e">Entry</span><span style="color:#f92672">&lt;</span>String, TableSchema<span style="color:#f92672">&gt;</span> entry : sinkTableSchemas.<span style="color:#a6e22e">entrySet</span>()) {
+</span></span><span style="display:flex;"><span>      TableIdentifier identifier <span style="color:#f92672">=</span> TableIdentifier.<span style="color:#a6e22e">of</span>(Namespace.<span style="color:#a6e22e">of</span>(<span style="color:#e6db74">&#34;test_db&#34;</span>), entry.<span style="color:#a6e22e">getKey</span>());
+</span></span><span style="display:flex;"><span>      Table table <span style="color:#f92672">=</span> icebergHadoopCatalog.<span style="color:#a6e22e">loadTable</span>(identifier);
+</span></span><span style="display:flex;"><span>      TableLoader tableLoader <span style="color:#f92672">=</span> TableLoader.<span style="color:#a6e22e">fromCatalog</span>(catalogLoader, identifier);
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>      FlinkSink.<span style="color:#a6e22e">forRowData</span>(process.<span style="color:#a6e22e">getSideOutput</span>(<span style="color:#66d9ef">new</span> OutputTag<span style="color:#f92672">&lt;</span>RowData<span style="color:#f92672">&gt;</span>(entry.<span style="color:#a6e22e">getKey</span>()){}))
+</span></span><span style="display:flex;"><span>        .<span style="color:#a6e22e">tableLoader</span>(tableLoader)
+</span></span><span style="display:flex;"><span>        .<span style="color:#a6e22e">table</span>(table)
+</span></span><span style="display:flex;"><span>        .<span style="color:#a6e22e">append</span>();
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    env.<span style="color:#a6e22e">execute</span>(<span style="color:#e6db74">&#34;Sync MySQL to the Iceberg table&#34;</span>);
+</span></span><span style="display:flex;"><span>  }
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">static</span> <span style="color:#66d9ef">class</span> <span style="color:#a6e22e">CompositeDebeziumDeserializationSchema</span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">implements</span> DebeziumDeserializationSchema<span style="color:#f92672">&lt;</span>RowData<span style="color:#f92672">&gt;</span> {
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">private</span> <span style="color:#66d9ef">final</span> Map<span style="color:#f92672">&lt;</span>String, RowDataDebeziumDeserializeSchema<span style="color:#f92672">&gt;</span> deserializationSchemaMap;
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">public</span> <span style="color:#a6e22e">CompositeDebeziumDeserializationSchema</span>(
+</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">final</span> Map<span style="color:#f92672">&lt;</span>String, RowDataDebeziumDeserializeSchema<span style="color:#f92672">&gt;</span> deserializationSchemaMap) {
+</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">this</span>.<span style="color:#a6e22e">deserializationSchemaMap</span> <span style="color:#f92672">=</span> deserializationSchemaMap;
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">@Override</span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">public</span> <span style="color:#66d9ef">void</span> <span style="color:#a6e22e">deserialize</span>(<span style="color:#66d9ef">final</span> SourceRecord record, <span style="color:#66d9ef">final</span> Collector<span style="color:#f92672">&lt;</span>RowData<span style="color:#f92672">&gt;</span> out)
+</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">throws</span> Exception {
+</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">final</span> Struct value <span style="color:#f92672">=</span> (Struct) record.<span style="color:#a6e22e">value</span>();
+</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">final</span> Struct source <span style="color:#f92672">=</span> value.<span style="color:#a6e22e">getStruct</span>(<span style="color:#e6db74">&#34;source&#34;</span>);
+</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">final</span> String db <span style="color:#f92672">=</span> source.<span style="color:#a6e22e">getString</span>(<span style="color:#e6db74">&#34;db&#34;</span>);
+</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">final</span> String table <span style="color:#f92672">=</span> source.<span style="color:#a6e22e">getString</span>(<span style="color:#e6db74">&#34;table&#34;</span>);
+</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">if</span> (deserializationSchemaMap <span style="color:#f92672">==</span> <span style="color:#66d9ef">null</span>) {
+</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">throw</span> <span style="color:#66d9ef">new</span> IllegalStateException(<span style="color:#e6db74">&#34;deserializationSchemaMap can not be null!&#34;</span>);
+</span></span><span style="display:flex;"><span>      }
+</span></span><span style="display:flex;"><span>      deserializationSchemaMap.<span style="color:#a6e22e">get</span>(db <span style="color:#f92672">+</span> <span style="color:#e6db74">&#34;.&#34;</span> <span style="color:#f92672">+</span> table).<span style="color:#a6e22e">deserialize</span>(record, out);
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">@Override</span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">public</span> TypeInformation<span style="color:#f92672">&lt;</span>RowData<span style="color:#f92672">&gt;</span> <span style="color:#a6e22e">getProducedType</span>() {
+</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">return</span> TypeInformation.<span style="color:#a6e22e">of</span>(RowData.<span style="color:#a6e22e">class</span>);
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>  }
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">static</span> <span style="color:#66d9ef">class</span> <span style="color:#a6e22e">SplitCdcStreamFunction</span> <span style="color:#66d9ef">extends</span> ProcessFunction<span style="color:#f92672">&lt;</span>RowData, Void<span style="color:#f92672">&gt;</span> {
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">private</span> <span style="color:#66d9ef">final</span> Map<span style="color:#f92672">&lt;</span>String, RowRowConverter<span style="color:#f92672">&gt;</span> converters;
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">public</span> <span style="color:#a6e22e">SplitCdcStreamFunction</span>(<span style="color:#66d9ef">final</span> Map<span style="color:#f92672">&lt;</span>String, RowRowConverter<span style="color:#f92672">&gt;</span> converterMap) {
+</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">this</span>.<span style="color:#a6e22e">converters</span> <span style="color:#f92672">=</span> converterMap;
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">@Override</span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">public</span> <span style="color:#66d9ef">void</span> <span style="color:#a6e22e">processElement</span>(<span style="color:#66d9ef">final</span> RowData rowData,
+</span></span><span style="display:flex;"><span>                               <span style="color:#66d9ef">final</span> ProcessFunction<span style="color:#f92672">&lt;</span>RowData, Void<span style="color:#f92672">&gt;</span>.<span style="color:#a6e22e">Context</span> ctx, <span style="color:#66d9ef">final</span> Collector<span style="color:#f92672">&lt;</span>Void<span style="color:#f92672">&gt;</span> out)
+</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">throws</span> Exception {
+</span></span><span style="display:flex;"><span>      <span style="color:#75715e">// JoinedRowData like +I{row1=+I(1,2.340000,3), row2=+I(product,test_db)}</span>
+</span></span><span style="display:flex;"><span>      <span style="color:#75715e">// so rowData.getArity() - 2 is the tableName field index</span>
+</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">final</span> String tableName <span style="color:#f92672">=</span> rowData.<span style="color:#a6e22e">getString</span>(rowData.<span style="color:#a6e22e">getArity</span>() <span style="color:#f92672">-</span> 2).<span style="color:#a6e22e">toString</span>();
+</span></span><span style="display:flex;"><span>      ctx.<span style="color:#a6e22e">output</span>(<span style="color:#66d9ef">new</span> OutputTag<span style="color:#f92672">&lt;</span>RowData<span style="color:#f92672">&gt;</span>(tableName) {},
+</span></span><span style="display:flex;"><span>        getField(JoinedRowData.<span style="color:#a6e22e">class</span>, (JoinedRowData) rowData, <span style="color:#e6db74">&#34;row1&#34;</span>));
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">private</span> <span style="color:#66d9ef">static</span> <span style="color:#f92672">&lt;</span>O, V<span style="color:#f92672">&gt;</span> V <span style="color:#a6e22e">getField</span>(Class<span style="color:#f92672">&lt;</span>O<span style="color:#f92672">&gt;</span> clazz, O obj, String fieldName) {
+</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">try</span> {
+</span></span><span style="display:flex;"><span>        java.<span style="color:#a6e22e">lang</span>.<span style="color:#a6e22e">reflect</span>.<span style="color:#a6e22e">Field</span> field <span style="color:#f92672">=</span> clazz.<span style="color:#a6e22e">getDeclaredField</span>(fieldName);
+</span></span><span style="display:flex;"><span>        field.<span style="color:#a6e22e">setAccessible</span>(<span style="color:#66d9ef">true</span>);
+</span></span><span style="display:flex;"><span>        Object v <span style="color:#f92672">=</span> field.<span style="color:#a6e22e">get</span>(obj);
+</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">return</span> v <span style="color:#f92672">==</span> <span style="color:#66d9ef">null</span> <span style="color:#f92672">?</span> <span style="color:#66d9ef">null</span> : (V) v;
+</span></span><span style="display:flex;"><span>      } <span style="color:#66d9ef">catch</span> (NoSuchFieldException <span style="color:#f92672">|</span> IllegalAccessException e) {
+</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">throw</span> <span style="color:#66d9ef">new</span> RuntimeException(e);
+</span></span><span style="display:flex;"><span>      }
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>  }
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">private</span> <span style="color:#66d9ef">static</span> List<span style="color:#f92672">&lt;</span>Tuple2<span style="color:#f92672">&lt;</span>ObjectPath, ResolvedCatalogTable<span style="color:#f92672">&gt;&gt;</span> <span style="color:#a6e22e">initSourceTables</span>() {
+</span></span><span style="display:flex;"><span>    List<span style="color:#f92672">&lt;</span>Tuple2<span style="color:#f92672">&lt;</span>ObjectPath, ResolvedCatalogTable<span style="color:#f92672">&gt;&gt;</span> pathAndTable <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> ArrayList<span style="color:#f92672">&lt;&gt;</span>();
+</span></span><span style="display:flex;"><span>    <span style="color:#75715e">// build table &#34;user&#34;</span>
+</span></span><span style="display:flex;"><span>    Schema userSchema <span style="color:#f92672">=</span> Schema.<span style="color:#a6e22e">newBuilder</span>()
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">column</span>(<span style="color:#e6db74">&#34;id&#34;</span>, DataTypes.<span style="color:#a6e22e">INT</span>().<span style="color:#a6e22e">notNull</span>())
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">column</span>(<span style="color:#e6db74">&#34;name&#34;</span>, DataTypes.<span style="color:#a6e22e">STRING</span>())
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">column</span>(<span style="color:#e6db74">&#34;op_time&#34;</span>, DataTypes.<span style="color:#a6e22e">TIMESTAMP</span>())
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">primaryKey</span>(<span style="color:#e6db74">&#34;id&#34;</span>)
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">build</span>();
+</span></span><span style="display:flex;"><span>    List<span style="color:#f92672">&lt;</span>Column<span style="color:#f92672">&gt;</span> userTableCols <span style="color:#f92672">=</span> Stream.<span style="color:#a6e22e">of</span>(
+</span></span><span style="display:flex;"><span>      Column.<span style="color:#a6e22e">physical</span>(<span style="color:#e6db74">&#34;id&#34;</span>, DataTypes.<span style="color:#a6e22e">INT</span>().<span style="color:#a6e22e">notNull</span>()),
+</span></span><span style="display:flex;"><span>      Column.<span style="color:#a6e22e">physical</span>(<span style="color:#e6db74">&#34;name&#34;</span>, DataTypes.<span style="color:#a6e22e">STRING</span>()),
+</span></span><span style="display:flex;"><span>      Column.<span style="color:#a6e22e">physical</span>(<span style="color:#e6db74">&#34;op_time&#34;</span>, DataTypes.<span style="color:#a6e22e">TIMESTAMP</span>())).<span style="color:#a6e22e">collect</span>(Collectors.<span style="color:#a6e22e">toList</span>());
+</span></span><span style="display:flex;"><span>    Schema.<span style="color:#a6e22e">UnresolvedPrimaryKey</span> userPrimaryKey <span style="color:#f92672">=</span> userSchema.<span style="color:#a6e22e">getPrimaryKey</span>().<span style="color:#a6e22e">orElseThrow</span>(() <span style="color:#f92672">-&gt;</span> <span style="color:#66d9ef">new</span> RuntimeException(<span style="color:#e6db74">&#34;table user required pk &#34;</span>));
+</span></span><span style="display:flex;"><span>    ResolvedSchema userResolvedSchema <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> ResolvedSchema(userTableCols, Collections.<span style="color:#a6e22e">emptyList</span>(), UniqueConstraint.<span style="color:#a6e22e">primaryKey</span>(
+</span></span><span style="display:flex;"><span>      userPrimaryKey.<span style="color:#a6e22e">getConstraintName</span>(), userPrimaryKey.<span style="color:#a6e22e">getColumnNames</span>()));
+</span></span><span style="display:flex;"><span>    ResolvedCatalogTable userTable <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> ResolvedCatalogTable(
+</span></span><span style="display:flex;"><span>      CatalogTable.<span style="color:#a6e22e">of</span>(userSchema, <span style="color:#e6db74">&#34;&#34;</span>, Collections.<span style="color:#a6e22e">emptyList</span>(), <span style="color:#66d9ef">new</span> HashMap<span style="color:#f92672">&lt;&gt;</span>()), userResolvedSchema);
+</span></span><span style="display:flex;"><span>    pathAndTable.<span style="color:#a6e22e">add</span>(Tuple2.<span style="color:#a6e22e">of</span>(<span style="color:#66d9ef">new</span> ObjectPath(<span style="color:#e6db74">&#34;test_db&#34;</span>, <span style="color:#e6db74">&#34;user&#34;</span>), userTable));
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#75715e">// build table &#34;product&#34;</span>
+</span></span><span style="display:flex;"><span>    Schema productSchema <span style="color:#f92672">=</span> Schema.<span style="color:#a6e22e">newBuilder</span>()
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">column</span>(<span style="color:#e6db74">&#34;productId&#34;</span>, DataTypes.<span style="color:#a6e22e">INT</span>().<span style="color:#a6e22e">notNull</span>())
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">column</span>(<span style="color:#e6db74">&#34;price&#34;</span>, DataTypes.<span style="color:#a6e22e">DECIMAL</span>(12, 6))
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">column</span>(<span style="color:#e6db74">&#34;saleCount&#34;</span>, DataTypes.<span style="color:#a6e22e">INT</span>())
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">primaryKey</span>(<span style="color:#e6db74">&#34;productId&#34;</span>)
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">build</span>();
+</span></span><span style="display:flex;"><span>    List<span style="color:#f92672">&lt;</span>Column<span style="color:#f92672">&gt;</span> productTableCols <span style="color:#f92672">=</span> Stream.<span style="color:#a6e22e">of</span>(
+</span></span><span style="display:flex;"><span>      Column.<span style="color:#a6e22e">physical</span>(<span style="color:#e6db74">&#34;productId&#34;</span>, DataTypes.<span style="color:#a6e22e">INT</span>().<span style="color:#a6e22e">notNull</span>()),
+</span></span><span style="display:flex;"><span>      Column.<span style="color:#a6e22e">physical</span>(<span style="color:#e6db74">&#34;price&#34;</span>, DataTypes.<span style="color:#a6e22e">DECIMAL</span>(12, 6)),
+</span></span><span style="display:flex;"><span>      Column.<span style="color:#a6e22e">physical</span>(<span style="color:#e6db74">&#34;saleCount&#34;</span>, DataTypes.<span style="color:#a6e22e">INT</span>())).<span style="color:#a6e22e">collect</span>(Collectors.<span style="color:#a6e22e">toList</span>());
+</span></span><span style="display:flex;"><span>    Schema.<span style="color:#a6e22e">UnresolvedPrimaryKey</span> productPrimaryKey <span style="color:#f92672">=</span> productSchema.<span style="color:#a6e22e">getPrimaryKey</span>().<span style="color:#a6e22e">orElseThrow</span>(() <span style="color:#f92672">-&gt;</span> <span style="color:#66d9ef">new</span> RuntimeException(<span style="color:#e6db74">&#34;table product required pk &#34;</span>));
+</span></span><span style="display:flex;"><span>    ResolvedSchema productResolvedSchema <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> ResolvedSchema(productTableCols, Collections.<span style="color:#a6e22e">emptyList</span>(), UniqueConstraint.<span style="color:#a6e22e">primaryKey</span>(
+</span></span><span style="display:flex;"><span>      productPrimaryKey.<span style="color:#a6e22e">getConstraintName</span>(), productPrimaryKey.<span style="color:#a6e22e">getColumnNames</span>()));
+</span></span><span style="display:flex;"><span>    ResolvedCatalogTable productTable <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> ResolvedCatalogTable(
+</span></span><span style="display:flex;"><span>      CatalogTable.<span style="color:#a6e22e">of</span>(productSchema, <span style="color:#e6db74">&#34;&#34;</span>, Collections.<span style="color:#a6e22e">emptyList</span>(), <span style="color:#66d9ef">new</span> HashMap<span style="color:#f92672">&lt;&gt;</span>()), productResolvedSchema);
+</span></span><span style="display:flex;"><span>    pathAndTable.<span style="color:#a6e22e">add</span>(Tuple2.<span style="color:#a6e22e">of</span>(<span style="color:#66d9ef">new</span> ObjectPath(<span style="color:#e6db74">&#34;test_db&#34;</span>, <span style="color:#e6db74">&#34;product&#34;</span>), productTable));
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">return</span> pathAndTable;
+</span></span><span style="display:flex;"><span>  }
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">private</span> <span style="color:#66d9ef">static</span> Map<span style="color:#f92672">&lt;</span>String, RowDataDebeziumDeserializeSchema<span style="color:#f92672">&gt;</span> <span style="color:#a6e22e">getDebeziumDeserializeSchemas</span>(
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">final</span> List<span style="color:#f92672">&lt;</span>Tuple2<span style="color:#f92672">&lt;</span>ObjectPath, ResolvedCatalogTable<span style="color:#f92672">&gt;&gt;</span> pathAndTable) {
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">return</span> pathAndTable.<span style="color:#a6e22e">stream</span>()
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">collect</span>(toMap(e <span style="color:#f92672">-&gt;</span> e.<span style="color:#a6e22e">f0</span>.<span style="color:#a6e22e">toString</span>(), e <span style="color:#f92672">-&gt;</span> RowDataDebeziumDeserializeSchema.<span style="color:#a6e22e">newBuilder</span>()
+</span></span><span style="display:flex;"><span>        .<span style="color:#a6e22e">setPhysicalRowType</span>(
+</span></span><span style="display:flex;"><span>          (RowType) e.<span style="color:#a6e22e">f1</span>.<span style="color:#a6e22e">getResolvedSchema</span>().<span style="color:#a6e22e">toPhysicalRowDataType</span>().<span style="color:#a6e22e">getLogicalType</span>())
+</span></span><span style="display:flex;"><span>        .<span style="color:#a6e22e">setUserDefinedConverterFactory</span>(MySqlDeserializationConverterFactory.<span style="color:#a6e22e">instance</span>())
+</span></span><span style="display:flex;"><span>        .<span style="color:#a6e22e">setMetadataConverters</span>(
+</span></span><span style="display:flex;"><span>          <span style="color:#66d9ef">new</span> MetadataConverter<span style="color:#f92672">[]</span> {TABLE_NAME.<span style="color:#a6e22e">getConverter</span>(), DATABASE_NAME.<span style="color:#a6e22e">getConverter</span>()})
+</span></span><span style="display:flex;"><span>        .<span style="color:#a6e22e">setResultTypeInfo</span>(TypeInformation.<span style="color:#a6e22e">of</span>(RowData.<span style="color:#a6e22e">class</span>)).<span style="color:#a6e22e">build</span>()));
+</span></span><span style="display:flex;"><span>  }
+</span></span><span style="display:flex;"><span>}
+</span></span></code></pre></div><h3 id="mixed-iceberg-format-1">Mixed-Iceberg format</h3>
+<p>The following example will show how to write CDC data from multiple MySQL tables into the corresponding Mixed-Iceberg table.</p>
+<p><strong>Requirements</strong></p>
+<p>Please add <a href="https://mvnrepository.com/artifact/com.ververica/flink-connector-mysql-cdc/2.3.0">Flink Connector MySQL CDC</a> and <a href="https://mvnrepository.com/artifact/com.netease.arctic/arctic-flink-runtime-1.14/0.4.1">Amoro</a> dependencies to your Maven project&rsquo;s pom.xml file.</p>
+<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#f92672">import</span> com.netease.arctic.flink.InternalCatalogBuilder;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> com.netease.arctic.flink.table.AmoroTableLoader;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> com.netease.arctic.flink.util.AmoroUtils;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> com.netease.arctic.flink.write.FlinkSink;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> com.netease.arctic.table.TableIdentifier;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> com.ververica.cdc.connectors.mysql.source.MySqlSource;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> com.ververica.cdc.connectors.mysql.table.MySqlDeserializationConverterFactory;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> com.ververica.cdc.debezium.DebeziumDeserializationSchema;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> com.ververica.cdc.debezium.table.MetadataConverter;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> com.ververica.cdc.debezium.table.RowDataDebeziumDeserializeSchema;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.flink.api.common.eventtime.WatermarkStrategy;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.flink.api.common.typeinfo.TypeInformation;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.flink.api.java.tuple.Tuple2;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.flink.streaming.api.functions.ProcessFunction;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.flink.table.api.*;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.flink.table.catalog.*;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.flink.table.data.RowData;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.flink.table.data.conversion.RowRowConverter;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.flink.table.data.utils.JoinedRowData;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.flink.table.types.logical.RowType;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.flink.util.Collector;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.flink.util.OutputTag;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.kafka.connect.data.Struct;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.kafka.connect.source.SourceRecord;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> java.util.*;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> java.util.stream.Collectors;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> java.util.stream.Stream;
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import static</span> com.ververica.cdc.connectors.mysql.table.MySqlReadableMetadata.DATABASE_NAME;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import static</span> com.ververica.cdc.connectors.mysql.table.MySqlReadableMetadata.TABLE_NAME;
+</span></span><span style="display:flex;"><span><span style="color:#f92672">import static</span> java.util.stream.Collectors.toMap;
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">public</span> <span style="color:#66d9ef">class</span> <span style="color:#a6e22e">MySqlCDC2AmoroExample</span> {
+</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">public</span> <span style="color:#66d9ef">static</span> <span style="color:#66d9ef">void</span> <span style="color:#a6e22e">main</span>(String<span style="color:#f92672">[]</span> args) <span style="color:#66d9ef">throws</span> Exception {
+</span></span><span style="display:flex;"><span>    List<span style="color:#f92672">&lt;</span>Tuple2<span style="color:#f92672">&lt;</span>ObjectPath, ResolvedCatalogTable<span style="color:#f92672">&gt;&gt;</span> pathAndTable <span style="color:#f92672">=</span> initSourceTables();
+</span></span><span style="display:flex;"><span>    Map<span style="color:#f92672">&lt;</span>String, RowDataDebeziumDeserializeSchema<span style="color:#f92672">&gt;</span> debeziumDeserializeSchemas <span style="color:#f92672">=</span> getDebeziumDeserializeSchemas(
+</span></span><span style="display:flex;"><span>      pathAndTable);
+</span></span><span style="display:flex;"><span>    MySqlSource<span style="color:#f92672">&lt;</span>RowData<span style="color:#f92672">&gt;</span> mySqlSource <span style="color:#f92672">=</span> MySqlSource.<span style="color:#f92672">&lt;</span>RowData<span style="color:#f92672">&gt;</span>builder()
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">hostname</span>(<span style="color:#e6db74">&#34;yourHostname&#34;</span>)
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">port</span>(yourPort)
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">databaseList</span>(<span style="color:#e6db74">&#34;test_db&#34;</span>)
+</span></span><span style="display:flex;"><span>      <span style="color:#75715e">// setting up tables to be captured</span>
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">tableList</span>(<span style="color:#e6db74">&#34;test_db.user&#34;</span>, <span style="color:#e6db74">&#34;test_db.product&#34;</span>)
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">username</span>(<span style="color:#e6db74">&#34;yourUsername&#34;</span>)
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">password</span>(<span style="color:#e6db74">&#34;yourPassword&#34;</span>)
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">deserializer</span>(<span style="color:#66d9ef">new</span> CompositeDebeziumDeserializationSchema(debeziumDeserializeSchemas))
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">build</span>();
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    StreamExecutionEnvironment env <span style="color:#f92672">=</span> StreamExecutionEnvironment.<span style="color:#a6e22e">getExecutionEnvironment</span>();
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#75715e">// enable checkpoint</span>
+</span></span><span style="display:flex;"><span>    env.<span style="color:#a6e22e">enableCheckpointing</span>(60000);
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#75715e">// Split CDC streams by table name</span>
+</span></span><span style="display:flex;"><span>    SingleOutputStreamOperator<span style="color:#f92672">&lt;</span>Void<span style="color:#f92672">&gt;</span> process <span style="color:#f92672">=</span> env
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">fromSource</span>(mySqlSource, WatermarkStrategy.<span style="color:#a6e22e">noWatermarks</span>(), <span style="color:#e6db74">&#34;MySQL Source&#34;</span>).<span style="color:#a6e22e">setParallelism</span>(4)
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">process</span>(<span style="color:#66d9ef">new</span> SplitCdcStreamFunction(pathAndTable.<span style="color:#a6e22e">stream</span>()
+</span></span><span style="display:flex;"><span>        .<span style="color:#a6e22e">collect</span>(toMap(e <span style="color:#f92672">-&gt;</span> e.<span style="color:#a6e22e">f0</span>.<span style="color:#a6e22e">toString</span>(),
+</span></span><span style="display:flex;"><span>          e <span style="color:#f92672">-&gt;</span> RowRowConverter.<span style="color:#a6e22e">create</span>(e.<span style="color:#a6e22e">f1</span>.<span style="color:#a6e22e">getResolvedSchema</span>().<span style="color:#a6e22e">toPhysicalRowDataType</span>())))))
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">name</span>(<span style="color:#e6db74">&#34;split stream&#34;</span>);
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#75715e">// create Amoro sink and insert into cdc data</span>
+</span></span><span style="display:flex;"><span>    InternalCatalogBuilder catalogBuilder <span style="color:#f92672">=</span> InternalCatalogBuilder.<span style="color:#a6e22e">builder</span>().<span style="color:#a6e22e">metastoreUrl</span>(
+</span></span><span style="display:flex;"><span>      <span style="color:#e6db74">&#34;thrift://&lt;ip&gt;:&lt;port&gt;/&lt;catalog_name_in_metastore&gt;&#34;</span>);
+</span></span><span style="display:flex;"><span>    Map<span style="color:#f92672">&lt;</span>String, TableSchema<span style="color:#f92672">&gt;</span> sinkTableSchemas <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> HashMap<span style="color:#f92672">&lt;&gt;</span>();
+</span></span><span style="display:flex;"><span>    sinkTableSchemas.<span style="color:#a6e22e">put</span>(<span style="color:#e6db74">&#34;user&#34;</span>, TableSchema.<span style="color:#a6e22e">builder</span>().<span style="color:#a6e22e">field</span>(<span style="color:#e6db74">&#34;id&#34;</span>, DataTypes.<span style="color:#a6e22e">INT</span>())
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">field</span>(<span style="color:#e6db74">&#34;name&#34;</span>, DataTypes.<span style="color:#a6e22e">STRING</span>()).<span style="color:#a6e22e">field</span>(<span style="color:#e6db74">&#34;op_time&#34;</span>, DataTypes.<span style="color:#a6e22e">TIMESTAMP</span>()).<span style="color:#a6e22e">build</span>());
+</span></span><span style="display:flex;"><span>    sinkTableSchemas.<span style="color:#a6e22e">put</span>(<span style="color:#e6db74">&#34;product&#34;</span>, TableSchema.<span style="color:#a6e22e">builder</span>().<span style="color:#a6e22e">field</span>(<span style="color:#e6db74">&#34;productId&#34;</span>, DataTypes.<span style="color:#a6e22e">INT</span>())
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">field</span>(<span style="color:#e6db74">&#34;price&#34;</span>, DataTypes.<span style="color:#a6e22e">DECIMAL</span>(12, 6)).<span style="color:#a6e22e">field</span>(<span style="color:#e6db74">&#34;saleCount&#34;</span>, DataTypes.<span style="color:#a6e22e">INT</span>()).<span style="color:#a6e22e">build</span>());
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">for</span> (Map.<span style="color:#a6e22e">Entry</span><span style="color:#f92672">&lt;</span>String, TableSchema<span style="color:#f92672">&gt;</span> entry : sinkTableSchemas.<span style="color:#a6e22e">entrySet</span>()) {
+</span></span><span style="display:flex;"><span>      TableIdentifier tableId <span style="color:#f92672">=</span>
+</span></span><span style="display:flex;"><span>        TableIdentifier.<span style="color:#a6e22e">of</span>(<span style="color:#e6db74">&#34;yourCatalogName&#34;</span>, <span style="color:#e6db74">&#34;yourDatabaseName&#34;</span>, entry.<span style="color:#a6e22e">getKey</span>());
+</span></span><span style="display:flex;"><span>      AmoroTableLoader tableLoader <span style="color:#f92672">=</span> AmoroTableLoader.<span style="color:#a6e22e">of</span>(tableId, catalogBuilder);
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>      FlinkSink.<span style="color:#a6e22e">forRowData</span>(process.<span style="color:#a6e22e">getSideOutput</span>(<span style="color:#66d9ef">new</span> OutputTag<span style="color:#f92672">&lt;</span>RowData<span style="color:#f92672">&gt;</span>(entry.<span style="color:#a6e22e">getKey</span>()){}))
+</span></span><span style="display:flex;"><span>        .<span style="color:#a6e22e">flinkSchema</span>(entry.<span style="color:#a6e22e">getValue</span>())
+</span></span><span style="display:flex;"><span>        .<span style="color:#a6e22e">table</span>(AmoroUtils.<span style="color:#a6e22e">loadAmoroTable</span>(tableLoader))
+</span></span><span style="display:flex;"><span>        .<span style="color:#a6e22e">tableLoader</span>(tableLoader).<span style="color:#a6e22e">build</span>();
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    env.<span style="color:#a6e22e">execute</span>(<span style="color:#e6db74">&#34;Sync MySQL to Mixed-Iceberg table&#34;</span>);
+</span></span><span style="display:flex;"><span>  }
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">static</span> <span style="color:#66d9ef">class</span> <span style="color:#a6e22e">CompositeDebeziumDeserializationSchema</span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">implements</span> DebeziumDeserializationSchema<span style="color:#f92672">&lt;</span>RowData<span style="color:#f92672">&gt;</span> {
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">private</span> <span style="color:#66d9ef">final</span> Map<span style="color:#f92672">&lt;</span>String, RowDataDebeziumDeserializeSchema<span style="color:#f92672">&gt;</span> deserializationSchemaMap;
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">public</span> <span style="color:#a6e22e">CompositeDebeziumDeserializationSchema</span>(
+</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">final</span> Map<span style="color:#f92672">&lt;</span>String, RowDataDebeziumDeserializeSchema<span style="color:#f92672">&gt;</span> deserializationSchemaMap) {
+</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">this</span>.<span style="color:#a6e22e">deserializationSchemaMap</span> <span style="color:#f92672">=</span> deserializationSchemaMap;
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">@Override</span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">public</span> <span style="color:#66d9ef">void</span> <span style="color:#a6e22e">deserialize</span>(<span style="color:#66d9ef">final</span> SourceRecord record, <span style="color:#66d9ef">final</span> Collector<span style="color:#f92672">&lt;</span>RowData<span style="color:#f92672">&gt;</span> out)
+</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">throws</span> Exception {
+</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">final</span> Struct value <span style="color:#f92672">=</span> (Struct) record.<span style="color:#a6e22e">value</span>();
+</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">final</span> Struct source <span style="color:#f92672">=</span> value.<span style="color:#a6e22e">getStruct</span>(<span style="color:#e6db74">&#34;source&#34;</span>);
+</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">final</span> String db <span style="color:#f92672">=</span> source.<span style="color:#a6e22e">getString</span>(<span style="color:#e6db74">&#34;db&#34;</span>);
+</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">final</span> String table <span style="color:#f92672">=</span> source.<span style="color:#a6e22e">getString</span>(<span style="color:#e6db74">&#34;table&#34;</span>);
+</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">if</span> (deserializationSchemaMap <span style="color:#f92672">==</span> <span style="color:#66d9ef">null</span>) {
+</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">throw</span> <span style="color:#66d9ef">new</span> IllegalStateException(<span style="color:#e6db74">&#34;deserializationSchemaMap can not be null!&#34;</span>);
+</span></span><span style="display:flex;"><span>      }
+</span></span><span style="display:flex;"><span>      deserializationSchemaMap.<span style="color:#a6e22e">get</span>(db <span style="color:#f92672">+</span> <span style="color:#e6db74">&#34;.&#34;</span> <span style="color:#f92672">+</span> table).<span style="color:#a6e22e">deserialize</span>(record, out);
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">@Override</span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">public</span> TypeInformation<span style="color:#f92672">&lt;</span>RowData<span style="color:#f92672">&gt;</span> <span style="color:#a6e22e">getProducedType</span>() {
+</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">return</span> TypeInformation.<span style="color:#a6e22e">of</span>(RowData.<span style="color:#a6e22e">class</span>);
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>  }
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">static</span> <span style="color:#66d9ef">class</span> <span style="color:#a6e22e">SplitCdcStreamFunction</span> <span style="color:#66d9ef">extends</span> ProcessFunction<span style="color:#f92672">&lt;</span>RowData, Void<span style="color:#f92672">&gt;</span> {
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">private</span> <span style="color:#66d9ef">final</span> Map<span style="color:#f92672">&lt;</span>String, RowRowConverter<span style="color:#f92672">&gt;</span> converters;
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">public</span> <span style="color:#a6e22e">SplitCdcStreamFunction</span>(<span style="color:#66d9ef">final</span> Map<span style="color:#f92672">&lt;</span>String, RowRowConverter<span style="color:#f92672">&gt;</span> converterMap) {
+</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">this</span>.<span style="color:#a6e22e">converters</span> <span style="color:#f92672">=</span> converterMap;
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">@Override</span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">public</span> <span style="color:#66d9ef">void</span> <span style="color:#a6e22e">processElement</span>(<span style="color:#66d9ef">final</span> RowData rowData,
+</span></span><span style="display:flex;"><span>                               <span style="color:#66d9ef">final</span> ProcessFunction<span style="color:#f92672">&lt;</span>RowData, Void<span style="color:#f92672">&gt;</span>.<span style="color:#a6e22e">Context</span> ctx, <span style="color:#66d9ef">final</span> Collector<span style="color:#f92672">&lt;</span>Void<span style="color:#f92672">&gt;</span> out)
+</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">throws</span> Exception {
+</span></span><span style="display:flex;"><span>      <span style="color:#75715e">// JoinedRowData like +I{row1=+I(1,2.340000,3), row2=+I(product,test_db)}</span>
+</span></span><span style="display:flex;"><span>      <span style="color:#75715e">// so rowData.getArity() - 2 is the tableName field index</span>
+</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">final</span> String tableName <span style="color:#f92672">=</span> rowData.<span style="color:#a6e22e">getString</span>(rowData.<span style="color:#a6e22e">getArity</span>() <span style="color:#f92672">-</span> 2).<span style="color:#a6e22e">toString</span>();
+</span></span><span style="display:flex;"><span>      ctx.<span style="color:#a6e22e">output</span>(<span style="color:#66d9ef">new</span> OutputTag<span style="color:#f92672">&lt;</span>RowData<span style="color:#f92672">&gt;</span>(tableName) {},
+</span></span><span style="display:flex;"><span>        getField(JoinedRowData.<span style="color:#a6e22e">class</span>, (JoinedRowData) rowData, <span style="color:#e6db74">&#34;row1&#34;</span>));
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">private</span> <span style="color:#66d9ef">static</span> <span style="color:#f92672">&lt;</span>O, V<span style="color:#f92672">&gt;</span> V <span style="color:#a6e22e">getField</span>(Class<span style="color:#f92672">&lt;</span>O<span style="color:#f92672">&gt;</span> clazz, O obj, String fieldName) {
+</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">try</span> {
+</span></span><span style="display:flex;"><span>        java.<span style="color:#a6e22e">lang</span>.<span style="color:#a6e22e">reflect</span>.<span style="color:#a6e22e">Field</span> field <span style="color:#f92672">=</span> clazz.<span style="color:#a6e22e">getDeclaredField</span>(fieldName);
+</span></span><span style="display:flex;"><span>        field.<span style="color:#a6e22e">setAccessible</span>(<span style="color:#66d9ef">true</span>);
+</span></span><span style="display:flex;"><span>        Object v <span style="color:#f92672">=</span> field.<span style="color:#a6e22e">get</span>(obj);
+</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">return</span> v <span style="color:#f92672">==</span> <span style="color:#66d9ef">null</span> <span style="color:#f92672">?</span> <span style="color:#66d9ef">null</span> : (V) v;
+</span></span><span style="display:flex;"><span>      } <span style="color:#66d9ef">catch</span> (NoSuchFieldException <span style="color:#f92672">|</span> IllegalAccessException e) {
+</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">throw</span> <span style="color:#66d9ef">new</span> RuntimeException(e);
+</span></span><span style="display:flex;"><span>      }
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>  }
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">private</span> <span style="color:#66d9ef">static</span> List<span style="color:#f92672">&lt;</span>Tuple2<span style="color:#f92672">&lt;</span>ObjectPath, ResolvedCatalogTable<span style="color:#f92672">&gt;&gt;</span> <span style="color:#a6e22e">initSourceTables</span>() {
+</span></span><span style="display:flex;"><span>    List<span style="color:#f92672">&lt;</span>Tuple2<span style="color:#f92672">&lt;</span>ObjectPath, ResolvedCatalogTable<span style="color:#f92672">&gt;&gt;</span> pathAndTable <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> ArrayList<span style="color:#f92672">&lt;&gt;</span>();
+</span></span><span style="display:flex;"><span>    <span style="color:#75715e">// build table &#34;user&#34;</span>
+</span></span><span style="display:flex;"><span>    Schema userSchema <span style="color:#f92672">=</span> Schema.<span style="color:#a6e22e">newBuilder</span>()
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">column</span>(<span style="color:#e6db74">&#34;id&#34;</span>, DataTypes.<span style="color:#a6e22e">INT</span>().<span style="color:#a6e22e">notNull</span>())
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">column</span>(<span style="color:#e6db74">&#34;name&#34;</span>, DataTypes.<span style="color:#a6e22e">STRING</span>())
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">column</span>(<span style="color:#e6db74">&#34;op_time&#34;</span>, DataTypes.<span style="color:#a6e22e">TIMESTAMP</span>())
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">primaryKey</span>(<span style="color:#e6db74">&#34;id&#34;</span>)
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">build</span>();
+</span></span><span style="display:flex;"><span>    List<span style="color:#f92672">&lt;</span>Column<span style="color:#f92672">&gt;</span> userTableCols <span style="color:#f92672">=</span> Stream.<span style="color:#a6e22e">of</span>(
+</span></span><span style="display:flex;"><span>      Column.<span style="color:#a6e22e">physical</span>(<span style="color:#e6db74">&#34;id&#34;</span>, DataTypes.<span style="color:#a6e22e">INT</span>().<span style="color:#a6e22e">notNull</span>()),
+</span></span><span style="display:flex;"><span>      Column.<span style="color:#a6e22e">physical</span>(<span style="color:#e6db74">&#34;name&#34;</span>, DataTypes.<span style="color:#a6e22e">STRING</span>()),
+</span></span><span style="display:flex;"><span>      Column.<span style="color:#a6e22e">physical</span>(<span style="color:#e6db74">&#34;op_time&#34;</span>, DataTypes.<span style="color:#a6e22e">TIMESTAMP</span>())).<span style="color:#a6e22e">collect</span>(Collectors.<span style="color:#a6e22e">toList</span>());
+</span></span><span style="display:flex;"><span>    Schema.<span style="color:#a6e22e">UnresolvedPrimaryKey</span> userPrimaryKey <span style="color:#f92672">=</span> userSchema.<span style="color:#a6e22e">getPrimaryKey</span>().<span style="color:#a6e22e">orElseThrow</span>(() <span style="color:#f92672">-&gt;</span> <span style="color:#66d9ef">new</span> RuntimeException(<span style="color:#e6db74">&#34;table user required pk &#34;</span>));
+</span></span><span style="display:flex;"><span>    ResolvedSchema userResolvedSchema <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> ResolvedSchema(userTableCols, Collections.<span style="color:#a6e22e">emptyList</span>(), UniqueConstraint.<span style="color:#a6e22e">primaryKey</span>(
+</span></span><span style="display:flex;"><span>      userPrimaryKey.<span style="color:#a6e22e">getConstraintName</span>(), userPrimaryKey.<span style="color:#a6e22e">getColumnNames</span>()));
+</span></span><span style="display:flex;"><span>    ResolvedCatalogTable userTable <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> ResolvedCatalogTable(
+</span></span><span style="display:flex;"><span>      CatalogTable.<span style="color:#a6e22e">of</span>(userSchema, <span style="color:#e6db74">&#34;&#34;</span>, Collections.<span style="color:#a6e22e">emptyList</span>(), <span style="color:#66d9ef">new</span> HashMap<span style="color:#f92672">&lt;&gt;</span>()), userResolvedSchema);
+</span></span><span style="display:flex;"><span>    pathAndTable.<span style="color:#a6e22e">add</span>(Tuple2.<span style="color:#a6e22e">of</span>(<span style="color:#66d9ef">new</span> ObjectPath(<span style="color:#e6db74">&#34;test_db&#34;</span>, <span style="color:#e6db74">&#34;user&#34;</span>), userTable));
+</span></span><span style="display:flex;"><span>    
+</span></span><span style="display:flex;"><span>    <span style="color:#75715e">// build table &#34;product&#34;</span>
+</span></span><span style="display:flex;"><span>    Schema productSchema <span style="color:#f92672">=</span> Schema.<span style="color:#a6e22e">newBuilder</span>()
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">column</span>(<span style="color:#e6db74">&#34;productId&#34;</span>, DataTypes.<span style="color:#a6e22e">INT</span>().<span style="color:#a6e22e">notNull</span>())
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">column</span>(<span style="color:#e6db74">&#34;price&#34;</span>, DataTypes.<span style="color:#a6e22e">DECIMAL</span>(12, 6))
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">column</span>(<span style="color:#e6db74">&#34;saleCount&#34;</span>, DataTypes.<span style="color:#a6e22e">INT</span>())
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">primaryKey</span>(<span style="color:#e6db74">&#34;productId&#34;</span>)
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">build</span>();
+</span></span><span style="display:flex;"><span>    List<span style="color:#f92672">&lt;</span>Column<span style="color:#f92672">&gt;</span> productTableCols <span style="color:#f92672">=</span> Stream.<span style="color:#a6e22e">of</span>(
+</span></span><span style="display:flex;"><span>      Column.<span style="color:#a6e22e">physical</span>(<span style="color:#e6db74">&#34;productId&#34;</span>, DataTypes.<span style="color:#a6e22e">INT</span>().<span style="color:#a6e22e">notNull</span>()),
+</span></span><span style="display:flex;"><span>      Column.<span style="color:#a6e22e">physical</span>(<span style="color:#e6db74">&#34;price&#34;</span>, DataTypes.<span style="color:#a6e22e">DECIMAL</span>(12, 6)),
+</span></span><span style="display:flex;"><span>      Column.<span style="color:#a6e22e">physical</span>(<span style="color:#e6db74">&#34;saleCount&#34;</span>, DataTypes.<span style="color:#a6e22e">INT</span>())).<span style="color:#a6e22e">collect</span>(Collectors.<span style="color:#a6e22e">toList</span>());
+</span></span><span style="display:flex;"><span>    Schema.<span style="color:#a6e22e">UnresolvedPrimaryKey</span> productPrimaryKey <span style="color:#f92672">=</span> productSchema.<span style="color:#a6e22e">getPrimaryKey</span>().<span style="color:#a6e22e">orElseThrow</span>(() <span style="color:#f92672">-&gt;</span> <span style="color:#66d9ef">new</span> RuntimeException(<span style="color:#e6db74">&#34;table product required pk &#34;</span>));
+</span></span><span style="display:flex;"><span>    ResolvedSchema productResolvedSchema <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> ResolvedSchema(productTableCols, Collections.<span style="color:#a6e22e">emptyList</span>(), UniqueConstraint.<span style="color:#a6e22e">primaryKey</span>(
+</span></span><span style="display:flex;"><span>      productPrimaryKey.<span style="color:#a6e22e">getConstraintName</span>(), productPrimaryKey.<span style="color:#a6e22e">getColumnNames</span>()));
+</span></span><span style="display:flex;"><span>    ResolvedCatalogTable productTable <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> ResolvedCatalogTable(
+</span></span><span style="display:flex;"><span>      CatalogTable.<span style="color:#a6e22e">of</span>(productSchema, <span style="color:#e6db74">&#34;&#34;</span>, Collections.<span style="color:#a6e22e">emptyList</span>(), <span style="color:#66d9ef">new</span> HashMap<span style="color:#f92672">&lt;&gt;</span>()), productResolvedSchema);
+</span></span><span style="display:flex;"><span>    pathAndTable.<span style="color:#a6e22e">add</span>(Tuple2.<span style="color:#a6e22e">of</span>(<span style="color:#66d9ef">new</span> ObjectPath(<span style="color:#e6db74">&#34;test_db&#34;</span>, <span style="color:#e6db74">&#34;product&#34;</span>), productTable));
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">return</span> pathAndTable;
+</span></span><span style="display:flex;"><span>  }
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">private</span> <span style="color:#66d9ef">static</span> Map<span style="color:#f92672">&lt;</span>String, RowDataDebeziumDeserializeSchema<span style="color:#f92672">&gt;</span> <span style="color:#a6e22e">getDebeziumDeserializeSchemas</span>(
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">final</span> List<span style="color:#f92672">&lt;</span>Tuple2<span style="color:#f92672">&lt;</span>ObjectPath, ResolvedCatalogTable<span style="color:#f92672">&gt;&gt;</span> pathAndTable) {
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">return</span> pathAndTable.<span style="color:#a6e22e">stream</span>()
+</span></span><span style="display:flex;"><span>      .<span style="color:#a6e22e">collect</span>(toMap(e <span style="color:#f92672">-&gt;</span> e.<span style="color:#a6e22e">f0</span>.<span style="color:#a6e22e">toString</span>(), e <span style="color:#f92672">-&gt;</span> RowDataDebeziumDeserializeSchema.<span style="color:#a6e22e">newBuilder</span>()
+</span></span><span style="display:flex;"><span>        .<span style="color:#a6e22e">setPhysicalRowType</span>(
+</span></span><span style="display:flex;"><span>          (RowType) e.<span style="color:#a6e22e">f1</span>.<span style="color:#a6e22e">getResolvedSchema</span>().<span style="color:#a6e22e">toPhysicalRowDataType</span>().<span style="color:#a6e22e">getLogicalType</span>())
+</span></span><span style="display:flex;"><span>        .<span style="color:#a6e22e">setUserDefinedConverterFactory</span>(MySqlDeserializationConverterFactory.<span style="color:#a6e22e">instance</span>())
+</span></span><span style="display:flex;"><span>        .<span style="color:#a6e22e">setMetadataConverters</span>(
+</span></span><span style="display:flex;"><span>          <span style="color:#66d9ef">new</span> MetadataConverter<span style="color:#f92672">[]</span> {TABLE_NAME.<span style="color:#a6e22e">getConverter</span>(), DATABASE_NAME.<span style="color:#a6e22e">getConverter</span>()})
+</span></span><span style="display:flex;"><span>        .<span style="color:#a6e22e">setResultTypeInfo</span>(TypeInformation.<span style="color:#a6e22e">of</span>(RowData.<span style="color:#a6e22e">class</span>)).<span style="color:#a6e22e">build</span>()));
+</span></span><span style="display:flex;"><span>  }
+</span></span><span style="display:flex;"><span>}
+</span></span></code></pre></div></div>
+                
+                    
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div id="toc" class="markdown-body">
+    <div id="full">
+        <nav id="TableOfContents">
+  <ul>
+    <li><a href="#ingest-into-one-table">Ingest into one table</a>
+      <ul>
+        <li><a href="#iceberg-format">Iceberg format</a></li>
+        <li><a href="#mixed-iceberg-format">Mixed-Iceberg format</a></li>
+      </ul>
+    </li>
+    <li><a href="#ingest-into-multiple-tables">Ingest Into multiple tables</a>
+      <ul>
+        <li><a href="#iceberg-format-1">Iceberg format</a></li>
+        <li><a href="#mixed-iceberg-format-1">Mixed-Iceberg format</a></li>
+      </ul>
+    </li>
+  </ul>
+</nav>
+    </div>
+</div>
+
+                
+            </div>
+        </div>
+    </section>
+</body>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<script src="https://amoro.apache.org/docs/justinmclean-patch-1//js/jquery-1.11.0.js"></script>
+
+
+<script src="https://amoro.apache.org/docs/justinmclean-patch-1//js/jquery.easing.min.js"></script>
+
+
+<script type="text/javascript" src="https://amoro.apache.org/docs/justinmclean-patch-1//js/search.js"></script>
+
+
+<script src="https://amoro.apache.org/docs/justinmclean-patch-1//js/bootstrap.min.js"></script>
+
+
+<script src="https://amoro.apache.org/docs/justinmclean-patch-1//js/iceberg-theme.js"></script>
+
+
+
+</html>
\ No newline at end of file
diff --git a/output/docs/justinmclean-patch-1/concept/catalogs/index.html b/output/docs/justinmclean-patch-1/concept/catalogs/index.html
new file mode 100644
index 0000000..93f63da
--- /dev/null
+++ b/output/docs/justinmclean-patch-1/concept/catalogs/index.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html lang="en-us">
+  <head>
+    <title>https://amoro.apache.org/docs/justinmclean-patch-1/catalogs/</title>
+    <link rel="canonical" href="https://amoro.apache.org/docs/justinmclean-patch-1/catalogs/">
+    <meta name="robots" content="noindex">
+    <meta charset="utf-8">
+    <meta http-equiv="refresh" content="0; url=https://amoro.apache.org/docs/justinmclean-patch-1/catalogs/">
+  </head>
+</html>
diff --git a/output/docs/justinmclean-patch-1/concept/self-optimizing/index.html b/output/docs/justinmclean-patch-1/concept/self-optimizing/index.html
new file mode 100644
index 0000000..8aa22ac
--- /dev/null
+++ b/output/docs/justinmclean-patch-1/concept/self-optimizing/index.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html lang="en-us">
+  <head>
+    <title>https://amoro.apache.org/docs/justinmclean-patch-1/self-optimizing/</title>
+    <link rel="canonical" href="https://amoro.apache.org/docs/justinmclean-patch-1/self-optimizing/">
+    <meta name="robots" content="noindex">
+    <meta charset="utf-8">
+    <meta http-equiv="refresh" content="0; url=https://amoro.apache.org/docs/justinmclean-patch-1/self-optimizing/">
+  </head>
+</html>
diff --git a/output/docs/justinmclean-patch-1/concept/table-watermark/index.html b/output/docs/justinmclean-patch-1/concept/table-watermark/index.html
new file mode 100644
index 0000000..81fa72c
--- /dev/null
+++ b/output/docs/justinmclean-patch-1/concept/table-watermark/index.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html lang="en-us">
+  <head>
+    <title>https://amoro.apache.org/docs/justinmclean-patch-1/table-watermark/</title>
+    <link rel="canonical" href="https://amoro.apache.org/docs/justinmclean-patch-1/table-watermark/">
+    <meta name="robots" content="noindex">
+    <meta charset="utf-8">
+    <meta http-equiv="refresh" content="0; url=https://amoro.apache.org/docs/justinmclean-patch-1/table-watermark/">
+  </head>
+</html>
diff --git a/output/docs/justinmclean-patch-1/concepts/index.xml b/output/docs/justinmclean-patch-1/concepts/index.xml
new file mode 100644
index 0000000..ec3c46d
--- /dev/null
+++ b/output/docs/justinmclean-patch-1/concepts/index.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
+  <channel>
+    <title>Concepts on Amoro</title>
+    <link>https://amoro.apache.org/docs/justinmclean-patch-1/concepts/</link>
+    <description>Recent content in Concepts on Amoro</description>
+    <generator>Hugo -- gohugo.io</generator>
+    <language>en-us</language>
+    <atom:link href="https://amoro.apache.org/docs/justinmclean-patch-1/concepts/index.xml" rel="self" type="application/rss+xml" />
+    <item>
+      <title>Catalogs</title>
+      <link>https://amoro.apache.org/docs/justinmclean-patch-1/catalogs/</link>
+      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+      <guid>https://amoro.apache.org/docs/justinmclean-patch-1/catalogs/</guid>
+      <description>Catalogs Introduce multi-catalog A catalog is a metadata namespace that stores information about databases, tables, views, indexes, users, and UDFs. It provides a higher-level namespace for table and database. Typically, a catalog is associated with a specific type of data source or cluster. In Flink, Spark and Trino, the multi-catalog feature can be used to support SQL across data sources, such as:&#xA;SELECT c.ID, c.NAME, c.AGE, o.AMOUNT FROM MYSQL.ONLINE.CUSTOMERS c [...]
+    </item>
+    <item>
+      <title>Self-Optimizing</title>
+      <link>https://amoro.apache.org/docs/justinmclean-patch-1/self-optimizing/</link>
+      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+      <guid>https://amoro.apache.org/docs/justinmclean-patch-1/self-optimizing/</guid>
+      <description>Self-optimizing Introduction Lakehouse is characterized by its openness and loose coupling, with data and files maintained by users through various engines. While this architecture appears to be well-suited for T+1 scenarios, as more attention is paid to applying Lakehouse to streaming data warehouses and real-time analysis scenarios, challenges arise. For example:&#xA;Streaming writes bring a massive amount of fragment files CDC ingestion and streaming updates generat [...]
+    </item>
+    <item>
+      <title>Table Watermark</title>
+      <link>https://amoro.apache.org/docs/justinmclean-patch-1/table-watermark/</link>
+      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+      <guid>https://amoro.apache.org/docs/justinmclean-patch-1/table-watermark/</guid>
+      <description>Table Watermark Table freshness Data freshness represents timeliness, and in many discussions, freshness is considered one of the important indicators of data quality. In traditional offline data warehouses, higher cost typically means better performance, creating a typical binary paradox in terms of cost-performance trade-off. However, in high-freshness streaming data warehouses, massive small files and frequent updates can lead to performance degradation. The higher  [...]
+    </item>
+  </channel>
+</rss>
diff --git a/output/docs/justinmclean-patch-1/configurations/index.html b/output/docs/justinmclean-patch-1/configurations/index.html
new file mode 100644
index 0000000..3fe5506
--- /dev/null
+++ b/output/docs/justinmclean-patch-1/configurations/index.html
@@ -0,0 +1,971 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!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">
+    <meta name="description" content="">
+    <meta name="author" content="">
+    <title>Configurations</title>
+
+    
+    
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<link href="../css/bootstrap.css" rel="stylesheet">
+
+
+<link href="../css/markdown.css" rel="stylesheet">
+<link href="../css/katex.min.css" rel="stylesheet">
+
+
+
+
+
+<link href="../css/amoro-theme.css" rel="stylesheet">
+
+
+<link href="../font-awesome-4.7.0/css/font-awesome.min.css" rel="stylesheet" type="text/css">
+<link href="//fonts.googleapis.com/css?family=Lato:300,400,700,300italic,400italic,700italic" rel="stylesheet" type="text/css">
+
+
+<link href="../css/termynal.css" rel="stylesheet">
+
+<link href="../css/home-page.css" rel="stylesheet">
+
+
+    
+    
+    
+
+</head>
+<body>
+
+<head>
+    <script>
+        
+        function addAnchor(element) {
+            element.insertAdjacentHTML('beforeend', `<a href="#${element.id}" class="anchortag" ariaLabel="Anchor"> 🔗 </a>` )
+        }
+        document.addEventListener('DOMContentLoaded', function () {
+            var headers = document.querySelectorAll('h1[id], h2[id], h3[id], h4[id]')
+            if (headers) {
+                headers.forEach(addAnchor)
+            }
+        });
+    </script>
+</head>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    <nav class="navbar navbar-default" role="navigation">
+        <topsection>
+            <div class="navbar-fixed-top">
+                <div>
+                <a class="page-scroll navbar-brand" href="https://amoro.apache.org/"><img class="top-navbar-logo" src="https://amoro.apache.org/docs/justinmclean-patch-1//img/amoro-logo-icon.png"/></a>
+                </div>
+            </div>
+            <div class="navbar-menu-fixed-top navbar-pages-group">
+                
+                
+                
+                
+                
+                    
+                    <div class="versions-dropdown">
+                    <div class="topnav-page-selection">
+                        <a   href="">Quickstart</a> <i class="fa fa-caret-down"></i>
+                    </div class="topnav-page-selection">
+                        <div class="versions-dropdown-content">
+                        <ul>
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="https://amoro.apache.org/docs/justinmclean-patch-1/../../quickstart-setup/">Setup</a>
+                            </li class="topnav-page-selection">
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="https://amoro.apache.org/docs/justinmclean-patch-1/../../quick-demo/">Quick Demo</a>
+                            </li class="topnav-page-selection">
+                        
+                        </ul>
+                        </div>
+                    </div>
+                
+                
+                
+                
+                    
+                    <div class="versions-dropdown">
+                    <div class="topnav-page-selection">
+                        <a   href="">Docs</a> <i class="fa fa-caret-down"></i>
+                    </div class="topnav-page-selection">
+                        <div class="versions-dropdown-content">
+                        <ul>
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="https://amoro.apache.org/docs/justinmclean-patch-1/../../docs/latest/">latest</a>
+                            </li class="topnav-page-selection">
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="https://amoro.apache.org/docs/justinmclean-patch-1/../../docs/0.6.1/">0.6.1</a>
+                            </li class="topnav-page-selection">
+                        
+                        </ul>
+                        </div>
+                    </div>
+                
+                
+                
+                
+                    
+                    <div class="versions-dropdown">
+                    <div class="topnav-page-selection">
+                        <a   href="">Benchmark</a> <i class="fa fa-caret-down"></i>
+                    </div class="topnav-page-selection">
+                        <div class="versions-dropdown-content">
+                        <ul>
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="https://amoro.apache.org/docs/justinmclean-patch-1/../../benchmark-report/">Benchmark Report</a>
+                            </li class="topnav-page-selection">
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="https://amoro.apache.org/docs/justinmclean-patch-1/../../benchmark-guide/">Benchmark Guide</a>
+                            </li class="topnav-page-selection">
+                        
+                        </ul>
+                        </div>
+                    </div>
+                
+                
+                
+                
+                    <div class="topnav-page-selection">
+                        <a   href="https://amoro.apache.org/docs/justinmclean-patch-1/../../download/">Download</a>
+                    </div class="topnav-page-selection">
+                
+                
+                
+                
+                    <div class="topnav-page-selection">
+                        <a   href="https://amoro.apache.org/docs/justinmclean-patch-1/../../roadmap/">Roadmap</a>
+                    </div class="topnav-page-selection">
+                
+                
+                
+                
+                    
+                    <div class="versions-dropdown">
+                    <div class="topnav-page-selection">
+                        <a   href="">Community</a> <i class="fa fa-caret-down"></i>
+                    </div class="topnav-page-selection">
+                        <div class="versions-dropdown-content">
+                        <ul>
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="https://amoro.apache.org/docs/justinmclean-patch-1/../../join-community/">Join Community</a>
+                            </li class="topnav-page-selection">
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="https://amoro.apache.org/docs/justinmclean-patch-1/../../how-to-contribute/">How to contribute</a>
+                            </li class="topnav-page-selection">
+                        
+                        </ul>
+                        </div>
+                    </div>
+                
+                
+                <div class="topnav-page-selection">
+                    <a href="https://github.com/apache/incubator-amoro" target="_blank">
+                        <img src="https://amoro.apache.org/docs/justinmclean-patch-1//img/GitHub-Mark.png" target="_blank" class="top-navbar-logo"/>
+                    </a>
+                </div>
+            </div>
+            </topsection>
+    </nav>
+
+<body dir=" ltr">
+    <section>
+        <div class="grid-container leftnav-and-toc">
+            
+                
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div class="sidebar markdown-body">
+    <div id="sidebar-full">
+        
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  <div>
+        <input type="search" class="form-control" id="search-input" placeholder="Search docs..." maxlength="64" data-hotkeys="s/">
+  </div>
+
+
+        
+
+
+
+
+
+
+
+
+
+
+
+
+
+<section>
+    <div id="search-results-container">
+        <ul id="search-results"></ul>
+    </div>
+</section>
+    <div class="sidebar-menu">
+    <ul>
+        
+
+        
+        
+        
+            
+                <li>
+                    <a class="top-menu" id=""  href="../">
+                        <span>Introduction</span>
+                    </a>
+                </li>
+            
+        
+        
+        
+            
+                <li>
+
+
+                    <a class="top-menu chevron-toggle  collapsed" data-toggle="collapse" href="#Concepts">
+                        <span>Concepts</span>
+                    </a>
+                </li>
+        <div id="Concepts" class="collapse in">
+                <ul class="sub-menu">
+                    
+                        <li>
+                            <a href="../catalogs/">Catalogs</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../self-optimizing/">Self-Optimizing</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../table-watermark/">Table Watermark</a>
+                        </li>
+                    
+                </ul>
+        </div>
+            
+        
+        
+        
+            
+                <li>
+
+
+                    <a class="top-menu chevron-toggle  collapsed" data-toggle="collapse" href="#Admin_Guides">
+                        <span>Admin Guides</span>
+                    </a>
+                </li>
+        <div id="Admin_Guides" class="collapse in">
+                <ul class="sub-menu">
+                    
+                        <li>
+                            <a href="../deployment/">Deployment</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../deployment-on-kubernetes/">Deployment On Kubernetes</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../managing-catalogs/">Managing Catalogs</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../managing-optimizers/">Managing Optimizers</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../using-kyuubi/">Using Kyuubi By Terminal</a>
+                        </li>
+                    
+                </ul>
+        </div>
+            
+        
+        
+        
+            
+                <li>
+
+
+                    <a class="top-menu chevron-toggle " data-toggle="collapse" href="#User_Guides">
+                        <span>User Guides</span>
+                    </a>
+                </li>
+        <div id="User_Guides" class="collapse in">
+                <ul class="sub-menu">
+                    
+                        <li>
+                            <a href="../using-tables/">Using Tables</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../configurations/">Configurations</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../cdc-ingestion/">CDC Ingestion</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../metrics/">Metrics</a>
+                        </li>
+                    
+                </ul>
+        </div>
+            
+        
+        
+        
+            
+                <li>
+
+
+                    <a class="top-menu chevron-toggle  collapsed" data-toggle="collapse" href="#Formats">
+                        <span>Formats</span>
+                    </a>
+                </li>
+        <div id="Formats" class="collapse in">
+                <ul class="sub-menu">
+                    
+                        <li>
+                            <a href="../formats-overview/">Overview</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../iceberg-format/">Iceberg</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../mixed-iceberg-format/">Mixed-Iceberg</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../mixed-hive-format/">Mixed-Hive</a>
+                        </li>
+                    
+                </ul>
+        </div>
+            
+        
+        
+        
+            
+                <li>
+
+
+                    <a class="top-menu chevron-toggle  collapsed" data-toggle="collapse" href="#Flink">
+                        <span>Flink</span>
+                    </a>
+                </li>
+        <div id="Flink" class="collapse in">
+                <ul class="sub-menu">
+                    
+                        <li>
+                            <a href="../flink-getting-started/">Flink Getting Started</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../flink-ddl/">Flink DDL</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../flink-dml/">Flink DML</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../flink-datastream/">Flink DataStream</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../flink-using-logstore/">Using Logstore</a>
+                        </li>
+                    
+                </ul>
+        </div>
+            
+        
+        
+        
+            
+                <li>
+
+
+                    <a class="top-menu chevron-toggle  collapsed" data-toggle="collapse" href="#Spark">
+                        <span>Spark</span>
+                    </a>
+                </li>
+        <div id="Spark" class="collapse in">
+                <ul class="sub-menu">
+                    
+                        <li>
+                            <a href="../spark-getting-started/">Spark Getting Started</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../spark-configuration/">Spark Configuration</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../spark-ddl/">Spark DDL</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../spark-queries/">Spark Queries</a>
+                        </li>
+                    
+                        <li>
+                            <a href="../spark-writes/">Spark Writes</a>
+                        </li>
+                    
+                </ul>
+        </div>
+            
+        
+        
+        
+            
+                <li>
+                    <a class="top-menu" id=""  href="../trino/">
+                        <span>Trino</span>
+                    </a>
+                </li>
+            
+        
+        </ul>
+        </div>
+    </div>
+    
+</div>
+
+            
+            <div id="content" class="markdown-body">
+                <div class="margin-for-toc"><h1 id="table-configurations">Table Configurations</h1>
+<h2 id="multi-level-configuration-management">Multi-level configuration management</h2>
+<p>Amoro provides configurations that can be configured at the <code>Catalog</code>, <code>Table</code>, and <code>Engine</code> levels. The configuration
+priority is given first to the <code>Engine</code>, followed by the <code>Table</code>, and finally by the <code>Catalog</code>.</p>
+<ul>
+<li>Catalog: Generally, we recommend
+users to set default values for tables through the <a href="../managing-catalogs/#configure-properties">Catalog properties configuration</a>, such as Self-optimizing related configurations.</li>
+<li>Table: We also recommend users to
+specify customized configurations when <a href="../using-tables/#create-table">Create Table</a>, which can also be
+modified through <a href="../using-tables/#modify-table">Alter Table</a> operations.</li>
+<li>Engine: If tuning is required in the engines, then consider configuring it at the engine level, refer to
+<a href="../spark-configuration/">Spark</a> and <a href="../flink-dml/">Flink</a>.</li>
+</ul>
+<h2 id="self-optimizing-configurations">Self-optimizing configurations</h2>
+<p>Self-optimizing configurations are applicable to both Iceberg Format and Mixed streaming Format.</p>
+<table>
+<thead>
+<tr>
+<th>Key</th>
+<th>Default</th>
+<th>Description</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>self-optimizing.enabled</td>
+<td>true</td>
+<td>Enables Self-optimizing</td>
+</tr>
+<tr>
+<td>self-optimizing.group</td>
+<td>default</td>
+<td>Optimizer group for Self-optimizing</td>
+</tr>
+<tr>
+<td>self-optimizing.quota</td>
+<td>0.1</td>
+<td>Quota for Self-optimizing, indicating the CPU resource the table can take up</td>
+</tr>
+<tr>
+<td>self-optimizing.execute.num-retries</td>
+<td>5</td>
+<td>Number of retries after failure of Self-optimizing</td>
+</tr>
+<tr>
+<td>self-optimizing.target-size</td>
+<td>134217728(128MB)</td>
+<td>Target size for Self-optimizing</td>
+</tr>
+<tr>
+<td>self-optimizing.max-file-count</td>
+<td>10000</td>
+<td>Maximum number of files processed by a Self-optimizing process</td>
+</tr>
+<tr>
+<td>self-optimizing.max-task-size-bytes</td>
+<td>134217728(128MB)</td>
+<td>Maximum file size bytes in a single task for splitting tasks</td>
+</tr>
+<tr>
+<td>self-optimizing.fragment-ratio</td>
+<td>8</td>
+<td>The fragment file size threshold. We could divide self-optimizing.target-size by this ratio to get the actual fragment file size</td>
+</tr>
+<tr>
+<td>self-optimizing.minor.trigger.file-count</td>
+<td>12</td>
+<td>The minimum numbers of fragment files to trigger minor optimizing</td>
+</tr>
+<tr>
+<td>self-optimizing.minor.trigger.interval</td>
+<td>3600000(1 hour)</td>
+<td>The time interval in milliseconds to trigger minor optimizing</td>
+</tr>
+<tr>
+<td>self-optimizing.major.trigger.duplicate-ratio</td>
+<td>0.1</td>
+<td>The ratio of duplicate data of segment files to trigger major optimizing</td>
+</tr>
+<tr>
+<td>self-optimizing.full.trigger.interval</td>
+<td>-1(closed)</td>
+<td>The time interval in milliseconds to trigger full optimizing</td>
+</tr>
+<tr>
+<td>self-optimizing.full.rewrite-all-files</td>
+<td>true</td>
+<td>Whether full optimizing rewrites all files or skips files that do not need to be optimized</td>
+</tr>
+</tbody>
+</table>
+<h2 id="data-cleaning-configurations">Data-cleaning configurations</h2>
+<p>Data-cleaning configurations are applicable to both Iceberg Format and Mixed streaming Format.</p>
+<table>
+<thead>
+<tr>
+<th>Key</th>
+<th>Default</th>
+<th>Description</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>table-expire.enabled</td>
+<td>true</td>
+<td>Enables periodically expire table</td>
+</tr>
+<tr>
+<td>change.data.ttl.minutes</td>
+<td>10080(7 days)</td>
+<td>Time to live in minutes for data of ChangeStore</td>
+</tr>
+<tr>
+<td>snapshot.base.keep.minutes</td>
+<td>720(12 hours)</td>
+<td>Table-Expiration keeps the latest snapshots of BaseStore within a specified time in minutes</td>
+</tr>
+<tr>
+<td>clean-orphan-file.enabled</td>
+<td>false</td>
+<td>Enables periodically clean orphan files</td>
+</tr>
+<tr>
+<td>clean-orphan-file.min-existing-time-minutes</td>
+<td>2880(2 days)</td>
+<td>Cleaning orphan files keeps the files modified within a specified time in minutes</td>
+</tr>
+<tr>
+<td>clean-dangling-delete-files.enabled</td>
+<td>true</td>
+<td>Whether to enable cleaning of dangling delete files</td>
+</tr>
+<tr>
+<td>data-expire.enabled</td>
+<td>false</td>
+<td>Whether to enable data expiration</td>
+</tr>
+<tr>
+<td>data-expire.level</td>
+<td>partition</td>
+<td>Level of data expiration. Including partition and file</td>
+</tr>
+<tr>
+<td>data-expire.field</td>
+<td>NULL</td>
+<td>Field used to determine data expiration, supporting timestamp/timestampz/long type and string type field in date format</td>
+</tr>
+<tr>
+<td>data-expire.datetime-string-pattern</td>
+<td>yyyy-MM-dd</td>
+<td>Pattern used for matching string datetime</td>
+</tr>
+<tr>
+<td>data-expire.datetime-number-format</td>
+<td>TIMESTAMP_MS</td>
+<td>Timestamp unit for long field. Including TIMESTAMP_MS and TIMESTAMP_S</td>
+</tr>
+<tr>
+<td>data-expire.retention-time</td>
+<td>NULL</td>
+<td>Retention period for data expiration. For example, 1d means retaining data for 1 day. Other supported units include h (hour), min (minute), s (second), ms (millisecond), etc.</td>
+</tr>
+</tbody>
+</table>
+<h2 id="mixed-format-configurations">Mixed Format configurations</h2>
+<p>If using Iceberg Format,please refer to <a href="https://iceberg.apache.org/docs/latest/configuration/">Iceberg configurations</a>,the following configurations are only applicable to Mixed Format.</p>
+<h3 id="reading-configurations">Reading configurations</h3>
+<table>
+<thead>
+<tr>
+<th>Key</th>
+<th>Default</th>
+<th>Description</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>read.split.open-file-cost</td>
+<td>4194304(4MB)</td>
+<td>The estimated cost to open a file</td>
+</tr>
+<tr>
+<td>read.split.planning-lookback</td>
+<td>10</td>
+<td>Number of bins to consider when combining input splits</td>
+</tr>
+<tr>
+<td>read.split.target-size</td>
+<td>134217728(128MB)</td>
+<td>Target size when combining data input splits</td>
+</tr>
+<tr>
+<td>read.split.delete-ratio</td>
+<td>0.05</td>
+<td>When the ratio of delete files is below this threshold, the read task will be split into more tasks to improve query speed</td>
+</tr>
+</tbody>
+</table>
+<h3 id="writing-configurations">Writing configurations</h3>
+<table>
+<thead>
+<tr>
+<th>Key</th>
+<th>Default</th>
+<th>Description</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>base.write.format</td>
+<td>parquet</td>
+<td>File format for the table for BaseStore, applicable to KeyedTable</td>
+</tr>
+<tr>
+<td>change.write.format</td>
+<td>parquet</td>
+<td>File format for the table for ChangeStore, applicable to KeyedTable</td>
+</tr>
+<tr>
+<td>write.format.default</td>
+<td>parquet</td>
+<td>Default file format for the table, applicable to UnkeyedTable</td>
+</tr>
+<tr>
+<td>base.file-index.hash-bucket</td>
+<td>4</td>
+<td>Initial number of buckets for BaseStore auto-bucket</td>
+</tr>
+<tr>
+<td>change.file-index.hash-bucket</td>
+<td>4</td>
+<td>Initial number of buckets for ChangeStore auto-bucket</td>
+</tr>
+<tr>
+<td>write.target-file-size-bytes</td>
+<td>134217728(128MB)</td>
+<td>Target size when writing</td>
+</tr>
+<tr>
+<td>write.upsert.enabled</td>
+<td>false</td>
+<td>Enable upsert mode, multiple insert data with the same primary key will be merged if enabled</td>
+</tr>
+<tr>
+<td>write.distribution-mode</td>
+<td>hash</td>
+<td>Shuffle rules for writing. UnkeyedTable can choose between none and hash, while KeyedTable can only choose hash</td>
+</tr>
+<tr>
+<td>write.distribution.hash-mode</td>
+<td>auto</td>
+<td>Auto-bucket mode, which supports primary-key, partition-key, primary-partition-key, and auto</td>
+</tr>
+</tbody>
+</table>
+<h3 id="logstore-configurations">LogStore configurations</h3>
+<table>
+<thead>
+<tr>
+<th>Key</th>
+<th>Default</th>
+<th>Description</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>log-store.enabled</td>
+<td>false</td>
+<td>Enables LogStore</td>
+</tr>
+<tr>
+<td>log-store.type</td>
+<td>kafka</td>
+<td>Type of LogStore, which supports &lsquo;kafka&rsquo; and &lsquo;pulsar&rsquo;</td>
+</tr>
+<tr>
+<td>log-store.address</td>
+<td>NULL</td>
+<td>Address of LogStore, required when LogStore enabled. For Kafka, this is the Kafka bootstrap servers. For Pulsar, this is the Pulsar Service URL, such as &lsquo;pulsar://localhost:6650&rsquo;</td>
+</tr>
+<tr>
+<td>log-store.topic</td>
+<td>NULL</td>
+<td>Topic of LogStore, required when LogStore enabled</td>
+</tr>
+<tr>
+<td>properties.pulsar.admin.adminUrl</td>
+<td>NULL</td>
+<td>HTTP URL of Pulsar admin, such as &lsquo;<a href="http://my-broker.example.com:8080">http://my-broker.example.com:8080</a>&rsquo;. Only required when log-store.type=pulsar</td>
+</tr>
+<tr>
+<td>properties.XXX</td>
+<td>NULL</td>
+<td>Other configurations of LogStore. <br><br>For Kafka, all the configurations supported by Kafka Consumer/Producer can be set by prefixing them with <code>properties.</code>,<br>such as <code>'properties.batch.size'='16384'</code>,<br>refer to <a href="https://kafka.apache.org/documentation/#consumerconfigs">Kafka Consumer Configurations</a>, <a href="https://kafka.apache.org/documentation/#producerconfigs">Kafka Producer Configurations</a> for more details.<br><br> For Pulsar,all the  [...]
+</tr>
+</tbody>
+</table>
+<h3 id="watermark-configurations">Watermark configurations</h3>
+<table>
+<thead>
+<tr>
+<th>Key</th>
+<th>Default</th>
+<th>Description</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>table.event-time-field</td>
+<td>_ingest_time</td>
+<td>The event time field for calculating the watermark. The default <code>_ingest_time</code> indicates calculating with the time when the data was written</td>
+</tr>
+<tr>
+<td>table.watermark-allowed-lateness-second</td>
+<td>0</td>
+<td>The allowed lateness time in seconds when calculating watermark</td>
+</tr>
+<tr>
+<td>table.event-time-field.datetime-string-format</td>
+<td><code>yyyy-MM-dd HH:mm:ss</code></td>
+<td>The format of event time when it is in string format</td>
+</tr>
+<tr>
+<td>table.event-time-field.datetime-number-format</td>
+<td>TIMESTAMP_MS</td>
+<td>The format of event time when it is in numeric format, which supports TIMESTAMP_MS (timestamp in milliseconds) and TIMESTAMP_S (timestamp in seconds)</td>
+</tr>
+</tbody>
+</table>
+<h3 id="mixed-hive-format-configurations">Mixed-Hive format configurations</h3>
+<table>
+<thead>
+<tr>
+<th>Key</th>
+<th>Default</th>
+<th>Description</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>base.hive.auto-sync-schema-change</td>
+<td>true</td>
+<td>Whether synchronize schema changes of Hive Table from HMS</td>
+</tr>
+<tr>
+<td>base.hive.auto-sync-data-write</td>
+<td>false</td>
+<td>Whether synchronize data changes of Hive Table from HMS, this should be true when writing to Hive</td>
+</tr>
+<tr>
+<td>base.hive.consistent-write.enabled</td>
+<td>true</td>
+<td>To avoid writing dirty data, the files written to the Hive directory will be hidden files and renamed to visible files upon commit.</td>
+</tr>
+</tbody>
+</table>
+</div>
+                
+                    
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div id="toc" class="markdown-body">
+    <div id="full">
+        <nav id="TableOfContents">
+  <ul>
+    <li><a href="#multi-level-configuration-management">Multi-level configuration management</a></li>
+    <li><a href="#self-optimizing-configurations">Self-optimizing configurations</a></li>
+    <li><a href="#data-cleaning-configurations">Data-cleaning configurations</a></li>
+    <li><a href="#mixed-format-configurations">Mixed Format configurations</a>
+      <ul>
+        <li><a href="#reading-configurations">Reading configurations</a></li>
+        <li><a href="#writing-configurations">Writing configurations</a></li>
+        <li><a href="#logstore-configurations">LogStore configurations</a></li>
+        <li><a href="#watermark-configurations">Watermark configurations</a></li>
+        <li><a href="#mixed-hive-format-configurations">Mixed-Hive format configurations</a></li>
+      </ul>
+    </li>
+  </ul>
+</nav>
+    </div>
+</div>
+
+                
+            </div>
+        </div>
+    </section>
+</body>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<script src="https://amoro.apache.org/docs/justinmclean-patch-1//js/jquery-1.11.0.js"></script>
+
+
+<script src="https://amoro.apache.org/docs/justinmclean-patch-1//js/jquery.easing.min.js"></script>
+
+
+<script type="text/javascript" src="https://amoro.apache.org/docs/justinmclean-patch-1//js/search.js"></script>
+
+
+<script src="https://amoro.apache.org/docs/justinmclean-patch-1//js/bootstrap.min.js"></script>
+
+
+<script src="https://amoro.apache.org/docs/justinmclean-patch-1//js/iceberg-theme.js"></script>
+
+
+
+</html>
\ No newline at end of file
diff --git a/output/docs/justinmclean-patch-1/css/amoro-theme.css b/output/docs/justinmclean-patch-1/css/amoro-theme.css
new file mode 100644
index 0000000..c31c55f
--- /dev/null
+++ b/output/docs/justinmclean-patch-1/css/amoro-theme.css
@@ -0,0 +1,811 @@
+/*!
+ * Start Bootstrap - Landing Page Bootstrap Theme (http://startbootstrap.com)
+ * Code licensed under the Apache License v2.0.
+ * For details, see http://www.apache.org/licenses/LICENSE-2.0.
+ */
+
+body,
+html {
+    width: 100%;
+    height: 100%;
+    font-size: 15px;
+    scroll-padding-top: 4rem;
+    scroll-behavior: smooth;
+}
+
+section {
+    display: flex;
+    margin-left: 150px;
+    margin-right: 0;
+}
+
+topsection {
+    display: flex;
+    margin-left: 10%;
+    margin-right: 10%;
+}
+
+body,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+    font-family: "Lato","Helvetica Neue",Helvetica,Arial,sans-serif;
+    font-weight: 400;
+}
+
+.lead {
+    font-size: 18px;
+    font-weight: 400;
+}
+
+section#intro {
+    display: block;
+    max-width: 100%;
+    margin: 0;
+    padding: 0;
+}
+
+section#contact {
+    display: block;
+    max-width: 100%;
+    margin: 0;
+    padding: 0;
+}
+
+section#services {
+    display: block;
+}
+
+.navbar-default {
+    background-color: #F5F6FA;
+    border-color: #F5F6FA;
+}
+
+.intro-message {
+    position: relative;
+    padding-top: 20%;
+    padding-bottom: 20%;
+}
+
+.intro-message > h1 {
+    margin: 0;
+    text-shadow: 2px 2px 3px rgba(0,0,0,0.6);
+    font-size: 5em;
+}
+
+.intro-divider {
+    width: 400px;
+    border-top: 1px solid #f8f8f8;
+    border-bottom: 1px solid rgba(0,0,0,0.2);
+}
+
+.intro-message > h3 {
+    text-shadow: 2px 2px 3px rgba(0,0,0,0.6);
+}
+
+.button-box {
+    padding-top: 1rem;
+}
+
+@media(max-width:767px) {
+    .intro-message {
+        padding-bottom: 15%;
+    }
+
+    .intro-message > h1 {
+        font-size: 3em;
+    }
+
+    ul.intro-social-buttons > li {
+        display: block;
+        margin-bottom: 20px;
+        padding: 0;
+    }
+
+    ul.intro-social-buttons > li:last-child {
+        margin-bottom: 0;
+    }
+
+    .intro-divider {
+        width: 100%;
+    }
+}
+
+.network-name {
+    text-transform: uppercase;
+    font-size: 14px;
+    font-weight: 400;
+    letter-spacing: 2px;
+}
+
+.content-section-a {
+    padding: 50px 0;
+}
+
+.content-section-b {
+    padding: 50px 0;
+}
+
+.section-heading {
+    margin-bottom: 30px;
+}
+
+.section-heading-spacer {
+    float: left;
+    width: 200px;
+}
+
+.contact {
+    padding: 100px 0;
+    color: #f8f8f8;
+    background: url(../img/contact-bg.jpg) no-repeat center center;
+    background-size: cover;
+}
+
+.contact h2 {
+    margin: 0;
+    text-shadow: 2px 2px 3px rgba(0,0,0,0.6);
+    font-size: 3em;
+}
+
+.contact ul {
+    margin-bottom: 0;
+}
+
+.contact-social-buttons {
+    float: right;
+    margin-top: 0;
+}
+
+@media(max-width:1199px) {
+    ul.contact-social-buttons {
+        float: left;
+        margin-top: 15px;
+    }
+}
+
+@media(max-width:767px) {
+    .contact h2 {
+        margin: 0;
+        text-shadow: 2px 2px 3px rgba(0,0,0,0.6);
+        font-size: 3em;
+    }
+
+    ul.contact-social-buttons > li {
+        display: block;
+        margin-bottom: 20px;
+        padding: 0;
+    }
+
+    ul.contact-social-buttons > li:last-child {
+        margin-bottom: 0;
+    }
+}
+
+footer {
+    padding: 50px 0;
+}
+
+p.copyright {
+    margin: 15px 0 0;
+}
+
+.top-navbar-logo {
+    height: 25px;
+    vertical-align: top;
+}
+
+.footer-creds {
+    font-size: 0.8rem;
+}
+
+a.page-scroll {
+    font-size: 15px;
+    color: red;
+}
+
+.pad-for-navbar {
+    padding-top: 80px;
+}
+
+.center-content {
+    padding-top: 5px;
+    padding-bottom: 5px;
+}
+
+
+.termynal-container {
+    padding-top: 3rem;
+}
+
+/* Anchor tags for headers */
+.anchortag { font-size: 80%; visibility: hidden;}
+
+h1:hover a { visibility: visible}
+h2:hover a { visibility: visible}
+h3:hover a { visibility: visible}
+h4:hover a { visibility: visible}
+
+/* Fixed table of contents */
+.grid-container {
+    display: grid;
+    grid-template-columns: 5fr 1fr;
+    grid-gap: 1rem;
+    overflow-y: auto;
+    height: 90vh;
+    width: 100%;
+}
+
+/* Cards at the top of each quickstart page */
+.quickstart-container {
+    display: flex;
+    flex-wrap: wrap;
+    width: 80vw;
+    grid-template-columns: 1fr 1fr 1fr;
+    grid-gap: 1rem;
+}
+
+.content-only {
+    grid-template-columns: auto;
+}
+
+.left-nav-only {
+    grid-template-columns: 1fr 5fr
+}
+
+.toc-only {
+    grid-template-columns: 1fr;
+}
+
+.leftnav-and-toc {
+    grid-template-columns: 1fr 5fr;
+    grid-column-gap: 30px;
+}
+
+.margin-for-toc {
+    margin-right: 40%;
+}
+
+.margin-without-toc {
+    margin-right: 20%;
+}
+
+#toc {
+    position: fixed;
+    right: 0;
+    top: 0;
+    background-color:#FFF;
+    top: 70px;
+    font-size: 0.95rem;
+    width: 260px;
+    list-style-type: none;
+    margin: 0 100px;
+}
+
+div.sidebar {
+    text-decoration: none;
+    left: 0;
+    top: 0;
+    overflow-y: auto;
+    background-color: #fff;
+    display: block;
+    font-size: 16px;
+    min-width: 15rem;
+    list-style-type: none;
+    padding-right: 5px;
+}
+
+.sidebar hr {
+    height: 1px;
+    margin-top: 20px;
+    margin-bottom: 20px;
+}
+
+.sidebar-menu ul {
+    text-decoration: none;
+    list-style: none;
+}
+
+.sidebar-menu li a {
+    color: black;
+    display: flex;
+}
+
+.sidebar-menu li a:hover {
+    color: #2879BE;
+}
+
+#active {
+    color: #2879BE;
+}
+
+i {
+  justify-content: center;
+}
+
+.fa-caret {
+    display: flex;
+    align-items: center;
+    margin-right: 5px;
+}
+
+.topnav-page-selection i.fa.fa-caret-down {
+ font-size: 8px;
+}
+
+.chevron-toggle .fa-caret-down,
+.chevron-toggle.collapsed .fa-caret-down {
+    display: inherit;
+}
+
+.chevron-toggle .fa-caret-right,
+.chevron-toggle.collapsed .fa-caret-right {
+    display: none;
+}
+
+#toc ul {
+    list-style: none;
+}
+
+#content {
+    overflow-y: auto;
+    max-height: 100%;
+}
+
+@media screen and (max-width: 1280px) {
+    #toc { display: none; }  /* Hide the TOC if the page is less than 1280px */
+    .grid-container {
+        grid-template-columns: auto;
+    }
+    .margin-for-toc {
+        margin-right: 0;
+    }
+    section {
+        margin-left: 20px;
+    }
+    topsection {
+        display: flex;
+        margin-left: 20px;
+        margin-right: 20px;
+    }
+  }
+
+@media screen and (max-width: 768px) {
+    div.sidebar { display: none; }  /* Hide the sidebar if the page is less than 768px. It will be available from a hamburger menu */
+}
+
+/* Style for the hint shortcode */
+.info, .success, .warning, .error {
+    margin: 10px 0px;
+    padding:12px;
+ 
+}
+.info {
+    color: #00529B;
+    background-color: #BDE5F8;
+}
+.success {
+    color: #4F8A10;
+    background-color: #DFF2BF;
+}
+.warning {
+    color: #9F6000;
+    background-color: #FEEFB3;
+}
+.error {
+    color: #D8000C;
+    background-color: #FFD2D2;
+}
+
+.fa-table {
+  color: #000000;
+}
+
+.fa-handshake-o {
+  color: #000000;
+}
+
+.fa-object-ungroup {
+  color: #000000;
+}
+
+.fa-star-o {
+  color: #E25A1D;
+}
+
+.navbar {
+    margin-bottom: 0;
+    height: 50px;
+}
+
+.navbar-fixed-top {
+    position: sticky;
+    display: flex;
+    gap: 15px;
+    justify-content: start;
+    align-items: center;
+}
+
+.navbar-menu-fixed-top {
+    position: sticky;
+    display: flex;
+    flex: 1;
+    gap: 5px;
+    justify-content: start;
+    align-items: center;
+}
+
+.navbar-pages-group {
+    justify-content: end;
+    margin-left: auto;
+    max-width: 720px;
+    position: relative;
+}
+
+/*search*/
+.container {
+    padding-right: 2rem;
+    padding-left: 2rem;
+    position: relative;
+}
+
+.vertical-center {
+  margin: 0;
+  position: absolute;
+  top: 50%;
+  -ms-transform: translateY(-50%);
+  transform: translateY(-50%);
+}
+
+/* Add a black background color to the top navigation bar */
+.topnav {
+  overflow: hidden;
+  background-color: #e9e9e9;
+}
+
+/* Style the links inside the navigation bar */
+.topnav a {
+  float: left;
+  display: block;
+  color: black;
+  text-align: center;
+  padding: 14px 16px;
+  text-decoration: none;
+  font-size: 17px;
+}
+
+/* Change the color of links on hover */
+.topnav a:hover {
+  background-color: #ddd;
+  color: black;
+}
+
+/* Style the "active" element to highlight the current page */
+.topnav a.active {
+  background-color: #2196F3;
+  color: white;
+}
+
+#search-input {
+    margin-top: 20px;
+    min-width: 200px;
+    border-radius: 20px;
+}
+
+#searchclear {
+    position: absolute;
+    right: 5px;
+    top: 0;
+    bottom: 0;
+    height: 14px;
+    margin: auto;
+    font-size: 14px;
+    cursor: pointer;
+    color: #ccc;
+}
+
+/* Style the search results and search results container */
+#search-results {
+    margin-left: 5rem;
+    margin-right: 5rem;
+    max-width: 400px;  /* Add a media query here to change this to 100% below 640px */
+    max-height: 500px;
+    color: rgb(112, 128, 144);
+    background-color: #f9f9f9;
+    box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
+}
+
+#search-results-container {
+    position: absolute;
+    margin-left: -150px;
+    z-index: 999;
+}
+
+ul#search-results {
+  padding: 0;
+  margin: 0;
+  list-style-type: none;
+  float: left;
+  width: 100%;
+  overflow-y: auto;
+  border-radius: 6px;
+}
+
+ul#search-results  a b mark {
+    background-color: #B8E1F3;
+}
+ul#search-results li {
+  color: rgb(112, 128, 144);
+  background-color: white;
+  padding-bottom: 15px;
+  padding-left: 10px;
+  margin: 0px;
+  display: grid;
+}
+
+ul#search-results li p {
+   font-weight: bold;
+    margin-bottom: 4px;
+}
+
+hr {
+	border: 0;
+	border-top: 1px solid #777777;
+}
+
+.topnav-page-selection {
+    margin-left: 10px;
+}
+
+.topnav-page-selection a {
+    color: #000000;
+    text-decoration: none;
+}
+
+.topnav-page-selection a:hover {
+    color: #2879BE;
+}
+
+/* When the screen is less than 600px wide, stack the links and the search field vertically instead of horizontally */
+@media screen and (max-width: 600px) {
+  .topnav a, .topnav input[type=text] {
+    float: none;
+    display: block;
+    text-align: left;
+    width: 100%;
+    margin: 0;
+    padding: 14px;
+  }
+  .topnav input[type=text] {
+    border: 1px solid #ccc;
+  }
+}
+
+@media screen and (max-width: 1040px) {
+  .topnav-page-selection {
+    display: none;
+  }
+}
+
+div#full ul {
+    padding-left: 2em;
+    padding-right: 0em;
+}
+
+#sidebar-full{
+	height: 100%;
+	overflow: hidden;
+}
+
+#sidebar-full .sidebar-menu{
+	overflow: auto;
+	height: calc(100% - 80px);
+    margin-top: 20px;
+}
+
+div#sidebar-full ul {
+    padding-left: 0em;
+    padding-right: 0em;
+}
+
+div#sidebar-full ul.sub-menu {
+    padding-left: 30px;
+}
+
+a.top-menu {
+    padding-left: 10px;
+    font-weight: bold;
+}
+
+.navbar-brand {
+    padding: 10px 0px;
+}
+
+@media screen and (max-width: 720px) {
+  .navbar-brand {
+    display: none;
+  }
+}
+
+.versions-dropdown {
+  position: relative;
+  display: inline-block;
+  z-index: 999;
+}
+
+.versions-dropdown-selection {
+    margin-left: auto;
+}
+
+.versions-dropdown-selection a {
+    color: #000000;
+    text-decoration: none;
+}
+
+.versions-dropdown-selection a:hover {
+    color: #2879BE;
+}
+
+.versions-dropdown-content {
+    display: none;
+    position: fixed;
+    background-color: #f9f9f9;
+    box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
+}
+
+.versions-dropdown-content ul {
+    list-style-type: none;
+    align-items: left;
+    padding: 5px;
+    margin: 5px;
+}
+
+.versions-dropdown-content a {
+    color: black;
+    text-decoration: none;
+}
+
+.versions-dropdown:hover .versions-dropdown-content {
+    display: block;
+}
+
+.quickstart-card {
+    color: #fff;
+    width:300px;
+    position: relative;
+    -webkit-box-shadow: 0px 5px 5px 0px rgba(0,0,0,0.3);
+    -moz-box-shadow: 0px 5px 5px 0px rgba(0,0,0,0.3);
+    -o-box-shadow: 0px 5px 5px 0px rgba(0,0,0,0.3);
+    box-shadow: 0px 5px 5px 0px rgba(0,0,0,0.3);
+    background-image: linear-gradient(to bottom right, #2879be, #57A7D8);
+}
+
+.quickstart-card .quickstart-card-content {
+    padding: 30px;
+    height: 250px;
+}
+
+.quickstart-card .quickstart-card-title {
+    font-size: 25px;
+    font-family: 'Open Sans', sans-serif;
+}
+
+.quickstart-card .quickstart-card-text {
+    line-height: 1.6;
+}
+
+.quickstart-card .quickstart-card-link {
+    padding: 25px;
+    width: -webkit-fill-available;
+    border-top:1px solid #82c1bb;
+}
+
+.quickstart-card-link a {
+    text-decoration: none;
+    position: relative;
+    padding: 10px 0px;
+    color: #fff;
+}
+
+.quickstart-card .quickstart-card-link a:after {
+    top: 30px;
+    content: "";
+    display: block;
+    height: 2px;
+    left: 50%;
+    position: absolute;
+    width: 0;
+    background:#fff;
+
+    -webkit-transition: width 0.3s ease 0s, left 0.3s ease 0s;
+    -moz-transition: width 0.3s ease 0s, left 0.3s ease 0s;
+    -o-transition: width 0.3s ease 0s, left 0.3s ease 0s;
+    transition: width 0.3s ease 0s, left 0.3s ease 0s;
+}
+
+.quickstart-card .quickstart-card-link a:hover:after {
+    width: 100%;
+    left: 0;
+}
+
+.quickstart-card .quickstart-card-link a:after {
+    background:#fff;
+}
+
+/*styling for codetabs*/
+.codetabs h1 {
+  padding: 50px 0;
+  font-weight: 400;
+  text-align: center;
+}
+
+.codetabs p {
+  margin: 0 0 20px;
+  line-height: 1.5;
+}
+
+.codetabs main {
+  min-width: 320px;
+  max-width: 800px;
+  padding: 50px;
+  margin: 0 auto;
+  background: #fff;
+}
+
+.codetabs codeblock {
+  display: none;
+  padding: 20px 0 0;
+  border-top: 1px solid #ddd;
+}
+
+.codetabs input {
+  display: none;
+  visibility:hidden;
+}
+
+.codetabs label {
+  display: inline-block;
+  margin: 0 0 -1px;
+  padding: 15px 25px;
+  font-weight: 600;
+  text-align: center;
+  color: #bbb;
+  border: 1px solid transparent;
+}
+
+.codetabs label:before {
+  font-family: fontawesome;
+  font-weight: normal;
+  margin-right: 10px;
+}
+
+.codetabs label:hover {
+  color: #888;
+  cursor: pointer;
+}
+
+.codetabs input:checked + label {
+  color: #555;
+  border: 1px solid #ddd;
+  border-top: 2px solid #277ABE;
+  border-bottom: 1px solid #fff;
+}
+
+@media screen and (max-width: 500px) {
+  .codetabs label {
+    font-size: 0;
+  }
+  #LaunchSparkClient label:before {
+    margin: 0;
+    font-size: 18px;
+  }
+}
+
+@media screen and (max-width: 400px) {
+  .codetabs label {
+    padding: 15px;
+  }
+}
\ No newline at end of file
diff --git a/output/docs/justinmclean-patch-1/css/bootstrap.css b/output/docs/justinmclean-patch-1/css/bootstrap.css
new file mode 100644
index 0000000..8352fad
--- /dev/null
+++ b/output/docs/justinmclean-patch-1/css/bootstrap.css
@@ -0,0 +1,6199 @@
+/*!
+ * Bootstrap v3.2.0 (http://getbootstrap.com)
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+
+/*! normalize.css v3.0.1 | MIT License | git.io/normalize */
+html {
+  font-family: sans-serif;
+  -webkit-text-size-adjust: 100%;
+      -ms-text-size-adjust: 100%;
+}
+body {
+  margin: 0;
+}
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+nav,
+section,
+summary {
+  display: block;
+}
+audio,
+canvas,
+progress,
+video {
+  display: inline-block;
+  vertical-align: baseline;
+}
+audio:not([controls]) {
+  display: none;
+  height: 0;
+}
+[hidden],
+template {
+  display: none;
+}
+a {
+  background: transparent;
+}
+a:active,
+a:hover {
+  outline: 0;
+}
+abbr[title] {
+  border-bottom: 1px dotted;
+}
+b,
+strong {
+  font-weight: bold;
+}
+dfn {
+  font-style: italic;
+}
+h1 {
+  margin: .67em 0;
+  font-size: 2em;
+}
+mark {
+  color: #000;
+  background: #ff0;
+}
+small {
+  font-size: 80%;
+}
+sub,
+sup {
+  position: relative;
+  font-size: 75%;
+  line-height: 0;
+  vertical-align: baseline;
+}
+sup {
+  top: -.5em;
+}
+sub {
+  bottom: -.25em;
+}
+img {
+  border: 0;
+}
+svg:not(:root) {
+  overflow: hidden;
+}
+figure {
+  margin: 1em 40px;
+}
+hr {
+  height: 0;
+  -webkit-box-sizing: content-box;
+     -moz-box-sizing: content-box;
+          box-sizing: content-box;
+}
+pre {
+  overflow: auto;
+}
+code,
+kbd,
+pre,
+samp {
+  font-family: monospace, monospace;
+  font-size: 1em;
+}
+button,
+input,
+optgroup,
+select,
+textarea {
+  margin: 0;
+  font: inherit;
+  color: inherit;
+}
+button {
+  overflow: visible;
+}
+button,
+select {
+  text-transform: none;
+}
+button,
+html input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+  -webkit-appearance: button;
+  cursor: pointer;
+}
+button[disabled],
+html input[disabled] {
+  cursor: default;
+}
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+  padding: 0;
+  border: 0;
+}
+input {
+  line-height: normal;
+}
+input[type="checkbox"],
+input[type="radio"] {
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+  padding: 0;
+}
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+  height: auto;
+}
+input[type="search"] {
+  -webkit-box-sizing: content-box;
+     -moz-box-sizing: content-box;
+          box-sizing: content-box;
+  -webkit-appearance: textfield;
+}
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+  -webkit-appearance: none;
+}
+fieldset {
+  padding: .35em .625em .75em;
+  margin: 0 2px;
+  border: 1px solid #c0c0c0;
+}
+legend {
+  padding: 0;
+  border: 0;
+}
+textarea {
+  overflow: auto;
+}
+optgroup {
+  font-weight: bold;
+}
+table {
+  border-spacing: 0;
+  border-collapse: collapse;
+}
+td,
+th {
+  padding: 0;
+}
+@media print {
+  * {
+    color: #000 !important;
+    text-shadow: none !important;
+    background: transparent !important;
+    -webkit-box-shadow: none !important;
+            box-shadow: none !important;
+  }
+  a,
+  a:visited {
+    text-decoration: underline;
+  }
+  a[href]:after {
+    content: " (" attr(href) ")";
+  }
+  abbr[title]:after {
+    content: " (" attr(title) ")";
+  }
+  a[href^="javascript:"]:after,
+  a[href^="#"]:after {
+    content: "";
+  }
+  pre,
+  blockquote {
+    border: 1px solid #999;
+
+    page-break-inside: avoid;
+  }
+  thead {
+    display: table-header-group;
+  }
+  tr,
+  img {
+    page-break-inside: avoid;
+  }
+  img {
+    max-width: 100% !important;
+  }
+  p,
+  h2,
+  h3 {
+    orphans: 3;
+    widows: 3;
+  }
+  h2,
+  h3 {
+    page-break-after: avoid;
+  }
+  select {
+    background: #fff !important;
+  }
+  .navbar {
+    display: none;
+  }
+  .table td,
+  .table th {
+    background-color: #fff !important;
+  }
+  .btn > .caret,
+  .dropup > .btn > .caret {
+    border-top-color: #000 !important;
+  }
+  .label {
+    border: 1px solid #000;
+  }
+  .table {
+    border-collapse: collapse !important;
+  }
+  .table-bordered th,
+  .table-bordered td {
+    border: 1px solid #ddd !important;
+  }
+}
+@font-face {
+  font-family: 'Glyphicons Halflings';
+
+  src: url('../fonts/glyphicons-halflings-regular.eot');
+  src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
+}
+.glyphicon {
+  position: relative;
+  top: 1px;
+  display: inline-block;
+  font-family: 'Glyphicons Halflings';
+  font-style: normal;
+  font-weight: normal;
+  line-height: 1;
+
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+.glyphicon-asterisk:before {
+  content: "\2a";
+}
+.glyphicon-plus:before {
+  content: "\2b";
+}
+.glyphicon-euro:before {
+  content: "\20ac";
+}
+.glyphicon-minus:before {
+  content: "\2212";
+}
+.glyphicon-cloud:before {
+  content: "\2601";
+}
+.glyphicon-envelope:before {
+  content: "\2709";
+}
+.glyphicon-pencil:before {
+  content: "\270f";
+}
+.glyphicon-glass:before {
+  content: "\e001";
+}
+.glyphicon-music:before {
+  content: "\e002";
+}
+.glyphicon-search:before {
+  content: "\e003";
+}
+.glyphicon-heart:before {
+  content: "\e005";
+}
+.glyphicon-star:before {
+  content: "\e006";
+}
+.glyphicon-star-empty:before {
+  content: "\e007";
+}
+.glyphicon-user:before {
+  content: "\e008";
+}
+.glyphicon-film:before {
+  content: "\e009";
+}
+.glyphicon-th-large:before {
+  content: "\e010";
+}
+.glyphicon-th:before {
+  content: "\e011";
+}
+.glyphicon-th-list:before {
+  content: "\e012";
+}
+.glyphicon-ok:before {
+  content: "\e013";
+}
+.glyphicon-remove:before {
+  content: "\e014";
+}
+.glyphicon-zoom-in:before {
+  content: "\e015";
+}
+.glyphicon-zoom-out:before {
+  content: "\e016";
+}
+.glyphicon-off:before {
+  content: "\e017";
+}
+.glyphicon-signal:before {
+  content: "\e018";
+}
+.glyphicon-cog:before {
+  content: "\e019";
+}
+.glyphicon-trash:before {
+  content: "\e020";
+}
+.glyphicon-home:before {
+  content: "\e021";
+}
+.glyphicon-file:before {
+  content: "\e022";
+}
+.glyphicon-time:before {
+  content: "\e023";
+}
+.glyphicon-road:before {
+  content: "\e024";
+}
+.glyphicon-download-alt:before {
+  content: "\e025";
+}
+.glyphicon-download:before {
+  content: "\e026";
+}
+.glyphicon-upload:before {
+  content: "\e027";
+}
+.glyphicon-inbox:before {
+  content: "\e028";
+}
+.glyphicon-play-circle:before {
+  content: "\e029";
+}
+.glyphicon-repeat:before {
+  content: "\e030";
+}
+.glyphicon-refresh:before {
+  content: "\e031";
+}
+.glyphicon-list-alt:before {
+  content: "\e032";
+}
+.glyphicon-lock:before {
+  content: "\e033";
+}
+.glyphicon-flag:before {
+  content: "\e034";
+}
+.glyphicon-headphones:before {
+  content: "\e035";
+}
+.glyphicon-volume-off:before {
+  content: "\e036";
+}
+.glyphicon-volume-down:before {
+  content: "\e037";
+}
+.glyphicon-volume-up:before {
+  content: "\e038";
+}
+.glyphicon-qrcode:before {
+  content: "\e039";
+}
+.glyphicon-barcode:before {
+  content: "\e040";
+}
+.glyphicon-tag:before {
+  content: "\e041";
+}
+.glyphicon-tags:before {
+  content: "\e042";
+}
+.glyphicon-book:before {
+  content: "\e043";
+}
+.glyphicon-bookmark:before {
+  content: "\e044";
+}
+.glyphicon-print:before {
+  content: "\e045";
+}
+.glyphicon-camera:before {
+  content: "\e046";
+}
+.glyphicon-font:before {
+  content: "\e047";
+}
+.glyphicon-bold:before {
+  content: "\e048";
+}
+.glyphicon-italic:before {
+  content: "\e049";
+}
+.glyphicon-text-height:before {
+  content: "\e050";
+}
+.glyphicon-text-width:before {
+  content: "\e051";
+}
+.glyphicon-align-left:before {
+  content: "\e052";
+}
+.glyphicon-align-center:before {
+  content: "\e053";
+}
+.glyphicon-align-right:before {
+  content: "\e054";
+}
+.glyphicon-align-justify:before {
+  content: "\e055";
+}
+.glyphicon-list:before {
+  content: "\e056";
+}
+.glyphicon-indent-left:before {
+  content: "\e057";
+}
+.glyphicon-indent-right:before {
+  content: "\e058";
+}
+.glyphicon-facetime-video:before {
+  content: "\e059";
+}
+.glyphicon-picture:before {
+  content: "\e060";
+}
+.glyphicon-map-marker:before {
+  content: "\e062";
+}
+.glyphicon-adjust:before {
+  content: "\e063";
+}
+.glyphicon-tint:before {
+  content: "\e064";
+}
+.glyphicon-edit:before {
+  content: "\e065";
+}
+.glyphicon-share:before {
+  content: "\e066";
+}
+.glyphicon-check:before {
+  content: "\e067";
+}
+.glyphicon-move:before {
+  content: "\e068";
+}
+.glyphicon-step-backward:before {
+  content: "\e069";
+}
+.glyphicon-fast-backward:before {
+  content: "\e070";
+}
+.glyphicon-backward:before {
+  content: "\e071";
+}
+.glyphicon-play:before {
+  content: "\e072";
+}
+.glyphicon-pause:before {
+  content: "\e073";
+}
+.glyphicon-stop:before {
+  content: "\e074";
+}
+.glyphicon-forward:before {
+  content: "\e075";
+}
+.glyphicon-fast-forward:before {
+  content: "\e076";
+}
+.glyphicon-step-forward:before {
+  content: "\e077";
+}
+.glyphicon-eject:before {
+  content: "\e078";
+}
+.glyphicon-chevron-left:before {
+  content: "\e079";
+}
+.glyphicon-chevron-right:before {
+  content: "\e080";
+}
+.glyphicon-plus-sign:before {
+  content: "\e081";
+}
+.glyphicon-minus-sign:before {
+  content: "\e082";
+}
+.glyphicon-remove-sign:before {
+  content: "\e083";
+}
+.glyphicon-ok-sign:before {
+  content: "\e084";
+}
+.glyphicon-question-sign:before {
+  content: "\e085";
+}
+.glyphicon-info-sign:before {
+  content: "\e086";
+}
+.glyphicon-screenshot:before {
+  content: "\e087";
+}
+.glyphicon-remove-circle:before {
+  content: "\e088";
+}
+.glyphicon-ok-circle:before {
+  content: "\e089";
+}
+.glyphicon-ban-circle:before {
+  content: "\e090";
+}
+.glyphicon-arrow-left:before {
+  content: "\e091";
+}
+.glyphicon-arrow-right:before {
+  content: "\e092";
+}
+.glyphicon-arrow-up:before {
+  content: "\e093";
+}
+.glyphicon-arrow-down:before {
+  content: "\e094";
+}
+.glyphicon-share-alt:before {
+  content: "\e095";
+}
+.glyphicon-resize-full:before {
+  content: "\e096";
+}
+.glyphicon-resize-small:before {
+  content: "\e097";
+}
+.glyphicon-exclamation-sign:before {
+  content: "\e101";
+}
+.glyphicon-gift:before {
+  content: "\e102";
+}
+.glyphicon-leaf:before {
+  content: "\e103";
+}
+.glyphicon-fire:before {
+  content: "\e104";
+}
+.glyphicon-eye-open:before {
+  content: "\e105";
+}
+.glyphicon-eye-close:before {
+  content: "\e106";
+}
+.glyphicon-warning-sign:before {
+  content: "\e107";
+}
+.glyphicon-plane:before {
+  content: "\e108";
+}
+.glyphicon-calendar:before {
+  content: "\e109";
+}
+.glyphicon-random:before {
+  content: "\e110";
+}
+.glyphicon-comment:before {
+  content: "\e111";
+}
+.glyphicon-magnet:before {
+  content: "\e112";
+}
+.glyphicon-chevron-up:before {
+  content: "\e113";
+}
+.glyphicon-chevron-down:before {
+  content: "\e114";
+}
+.glyphicon-retweet:before {
+  content: "\e115";
+}
+.glyphicon-shopping-cart:before {
+  content: "\e116";
+}
+.glyphicon-folder-close:before {
+  content: "\e117";
+}
+.glyphicon-folder-open:before {
+  content: "\e118";
+}
+.glyphicon-resize-vertical:before {
+  content: "\e119";
+}
+.glyphicon-resize-horizontal:before {
+  content: "\e120";
+}
+.glyphicon-hdd:before {
+  content: "\e121";
+}
+.glyphicon-bullhorn:before {
+  content: "\e122";
+}
+.glyphicon-bell:before {
+  content: "\e123";
+}
+.glyphicon-certificate:before {
+  content: "\e124";
+}
+.glyphicon-thumbs-up:before {
+  content: "\e125";
+}
+.glyphicon-thumbs-down:before {
+  content: "\e126";
+}
+.glyphicon-hand-right:before {
+  content: "\e127";
+}
+.glyphicon-hand-left:before {
+  content: "\e128";
+}
+.glyphicon-hand-up:before {
+  content: "\e129";
+}
+.glyphicon-hand-down:before {
+  content: "\e130";
+}
+.glyphicon-circle-arrow-right:before {
+  content: "\e131";
+}
+.glyphicon-circle-arrow-left:before {
+  content: "\e132";
+}
+.glyphicon-circle-arrow-up:before {
+  content: "\e133";
+}
+.glyphicon-circle-arrow-down:before {
+  content: "\e134";
+}
+.glyphicon-globe:before {
+  content: "\e135";
+}
+.glyphicon-wrench:before {
+  content: "\e136";
+}
+.glyphicon-tasks:before {
+  content: "\e137";
+}
+.glyphicon-filter:before {
+  content: "\e138";
+}
+.glyphicon-briefcase:before {
+  content: "\e139";
+}
+.glyphicon-fullscreen:before {
+  content: "\e140";
+}
+.glyphicon-dashboard:before {
+  content: "\e141";
+}
+.glyphicon-paperclip:before {
+  content: "\e142";
+}
+.glyphicon-heart-empty:before {
+  content: "\e143";
+}
+.glyphicon-link:before {
+  content: "\e144";
+}
+.glyphicon-phone:before {
+  content: "\e145";
+}
+.glyphicon-pushpin:before {
+  content: "\e146";
+}
+.glyphicon-usd:before {
+  content: "\e148";
+}
+.glyphicon-gbp:before {
+  content: "\e149";
+}
+.glyphicon-sort:before {
+  content: "\e150";
+}
+.glyphicon-sort-by-alphabet:before {
+  content: "\e151";
+}
+.glyphicon-sort-by-alphabet-alt:before {
+  content: "\e152";
+}
+.glyphicon-sort-by-order:before {
+  content: "\e153";
+}
+.glyphicon-sort-by-order-alt:before {
+  content: "\e154";
+}
+.glyphicon-sort-by-attributes:before {
+  content: "\e155";
+}
+.glyphicon-sort-by-attributes-alt:before {
+  content: "\e156";
+}
+.glyphicon-unchecked:before {
+  content: "\e157";
+}
+.glyphicon-expand:before {
+  content: "\e158";
+}
+.glyphicon-collapse-down:before {
+  content: "\e159";
+}
+.glyphicon-collapse-up:before {
+  content: "\e160";
+}
+.glyphicon-log-in:before {
+  content: "\e161";
+}
+.glyphicon-flash:before {
+  content: "\e162";
+}
+.glyphicon-log-out:before {
+  content: "\e163";
+}
+.glyphicon-new-window:before {
+  content: "\e164";
+}
+.glyphicon-record:before {
+  content: "\e165";
+}
+.glyphicon-save:before {
+  content: "\e166";
+}
+.glyphicon-open:before {
+  content: "\e167";
+}
+.glyphicon-saved:before {
+  content: "\e168";
+}
+.glyphicon-import:before {
+  content: "\e169";
+}
+.glyphicon-export:before {
+  content: "\e170";
+}
+.glyphicon-send:before {
+  content: "\e171";
+}
+.glyphicon-floppy-disk:before {
+  content: "\e172";
+}
+.glyphicon-floppy-saved:before {
+  content: "\e173";
+}
+.glyphicon-floppy-remove:before {
+  content: "\e174";
+}
+.glyphicon-floppy-save:before {
+  content: "\e175";
+}
+.glyphicon-floppy-open:before {
+  content: "\e176";
+}
+.glyphicon-credit-card:before {
+  content: "\e177";
+}
+.glyphicon-transfer:before {
+  content: "\e178";
+}
+.glyphicon-cutlery:before {
+  content: "\e179";
+}
+.glyphicon-header:before {
+  content: "\e180";
+}
+.glyphicon-compressed:before {
+  content: "\e181";
+}
+.glyphicon-earphone:before {
+  content: "\e182";
+}
+.glyphicon-phone-alt:before {
+  content: "\e183";
+}
+.glyphicon-tower:before {
+  content: "\e184";
+}
+.glyphicon-stats:before {
+  content: "\e185";
+}
+.glyphicon-sd-video:before {
+  content: "\e186";
+}
+.glyphicon-hd-video:before {
+  content: "\e187";
+}
+.glyphicon-subtitles:before {
+  content: "\e188";
+}
+.glyphicon-sound-stereo:before {
+  content: "\e189";
+}
+.glyphicon-sound-dolby:before {
+  content: "\e190";
+}
+.glyphicon-sound-5-1:before {
+  content: "\e191";
+}
+.glyphicon-sound-6-1:before {
+  content: "\e192";
+}
+.glyphicon-sound-7-1:before {
+  content: "\e193";
+}
+.glyphicon-copyright-mark:before {
+  content: "\e194";
+}
+.glyphicon-registration-mark:before {
+  content: "\e195";
+}
+.glyphicon-cloud-download:before {
+  content: "\e197";
+}
+.glyphicon-cloud-upload:before {
+  content: "\e198";
+}
+.glyphicon-tree-conifer:before {
+  content: "\e199";
+}
+.glyphicon-tree-deciduous:before {
+  content: "\e200";
+}
+* {
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+}
+*:before,
+*:after {
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+}
+html {
+  font-size: 10px;
+
+  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+body {
+  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+  font-size: 14px;
+  line-height: 1.42857143;
+  color: #333;
+  background-color: #fff;
+}
+input,
+button,
+select,
+textarea {
+  font-family: inherit;
+  font-size: inherit;
+  line-height: inherit;
+}
+a {
+  color: #428bca;
+  text-decoration: none;
+}
+a:hover,
+a:focus {
+  color: #2a6496;
+  text-decoration: underline;
+}
+a:focus {
+  outline: thin dotted;
+  outline: 5px auto -webkit-focus-ring-color;
+  outline-offset: -2px;
+}
+figure {
+  margin: 0;
+}
+img {
+  vertical-align: middle;
+}
+.img-responsive,
+.thumbnail > img,
+.thumbnail a > img,
+.carousel-inner > .item > img,
+.carousel-inner > .item > a > img {
+  display: block;
+  width: 100% \9;
+  max-width: 100%;
+  height: auto;
+}
+.img-rounded {
+  border-radius: 6px;
+}
+.img-thumbnail {
+  display: inline-block;
+  width: 100% \9;
+  max-width: 100%;
+  height: auto;
+  padding: 4px;
+  line-height: 1.42857143;
+  background-color: #fff;
+  border: 1px solid #ddd;
+  border-radius: 4px;
+  -webkit-transition: all .2s ease-in-out;
+       -o-transition: all .2s ease-in-out;
+          transition: all .2s ease-in-out;
+}
+.img-circle {
+  border-radius: 50%;
+}
+hr {
+  margin-top: 20px;
+  margin-bottom: 20px;
+  border: 0;
+  border-top: 1px solid #eee;
+}
+.sr-only {
+  position: absolute;
+  width: 1px;
+  height: 1px;
+  padding: 0;
+  margin: -1px;
+  overflow: hidden;
+  clip: rect(0, 0, 0, 0);
+  border: 0;
+}
+.sr-only-focusable:active,
+.sr-only-focusable:focus {
+  position: static;
+  width: auto;
+  height: auto;
+  margin: 0;
+  overflow: visible;
+  clip: auto;
+}
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+.h1,
+.h2,
+.h3,
+.h4,
+.h5,
+.h6 {
+  font-family: inherit;
+  font-weight: 500;
+  line-height: 1.1;
+  color: inherit;
+}
+h1 small,
+h2 small,
+h3 small,
+h4 small,
+h5 small,
+h6 small,
+.h1 small,
+.h2 small,
+.h3 small,
+.h4 small,
+.h5 small,
+.h6 small,
+h1 .small,
+h2 .small,
+h3 .small,
+h4 .small,
+h5 .small,
+h6 .small,
+.h1 .small,
+.h2 .small,
+.h3 .small,
+.h4 .small,
+.h5 .small,
+.h6 .small {
+  font-weight: normal;
+  line-height: 1;
+  color: #777;
+}
+h1,
+.h1,
+h2,
+.h2,
+h3,
+.h3 {
+  margin-top: 20px;
+  margin-bottom: 10px;
+}
+h1 small,
+.h1 small,
+h2 small,
+.h2 small,
+h3 small,
+.h3 small,
+h1 .small,
+.h1 .small,
+h2 .small,
+.h2 .small,
+h3 .small,
+.h3 .small {
+  font-size: 65%;
+}
+h4,
+.h4,
+h5,
+.h5,
+h6,
+.h6 {
+  margin-top: 10px;
+  margin-bottom: 10px;
+}
+h4 small,
+.h4 small,
+h5 small,
+.h5 small,
+h6 small,
+.h6 small,
+h4 .small,
+.h4 .small,
+h5 .small,
+.h5 .small,
+h6 .small,
+.h6 .small {
+  font-size: 75%;
+}
+h1,
+.h1 {
+  font-size: 36px;
+}
+h2,
+.h2 {
+  font-size: 30px;
+}
+h3,
+.h3 {
+  font-size: 24px;
+}
+h4,
+.h4 {
+  font-size: 18px;
+}
+h5,
+.h5 {
+  font-size: 14px;
+}
+h6,
+.h6 {
+  font-size: 12px;
+}
+p {
+  margin: 0 0 10px;
+}
+.lead {
+  margin-bottom: 20px;
+  font-size: 16px;
+  font-weight: 300;
+  line-height: 1.4;
+}
+@media (min-width: 768px) {
+  .lead {
+    font-size: 21px;
+  }
+}
+small,
+.small {
+  font-size: 85%;
+}
+cite {
+  font-style: normal;
+}
+mark,
+.mark {
+  padding: .2em;
+  background-color: #fcf8e3;
+}
+.text-left {
+  text-align: left;
+}
+.text-right {
+  text-align: right;
+}
+.text-center {
+  text-align: center;
+}
+.text-justify {
+  text-align: justify;
+}
+.text-nowrap {
+  white-space: nowrap;
+}
+.text-lowercase {
+  text-transform: lowercase;
+}
+.text-uppercase {
+  text-transform: uppercase;
+}
+.text-capitalize {
+  text-transform: capitalize;
+}
+.text-muted {
+  color: #777;
+}
+.text-primary {
+  color: #428bca;
+}
+a.text-primary:hover {
+  color: #3071a9;
+}
+.text-success {
+  color: #3c763d;
+}
+a.text-success:hover {
+  color: #2b542c;
+}
+.text-info {
+  color: #31708f;
+}
+a.text-info:hover {
+  color: #245269;
+}
+.text-warning {
+  color: #8a6d3b;
+}
+a.text-warning:hover {
+  color: #66512c;
+}
+.text-danger {
+  color: #a94442;
+}
+a.text-danger:hover {
+  color: #843534;
+}
+.bg-primary {
+  color: #fff;
+  background-color: #428bca;
+}
+a.bg-primary:hover {
+  background-color: #3071a9;
+}
+.bg-success {
+  background-color: #dff0d8;
+}
+a.bg-success:hover {
+  background-color: #c1e2b3;
+}
+.bg-info {
+  background-color: #d9edf7;
+}
+a.bg-info:hover {
+  background-color: #afd9ee;
+}
+.bg-warning {
+  background-color: #fcf8e3;
+}
+a.bg-warning:hover {
+  background-color: #f7ecb5;
+}
+.bg-danger {
+  background-color: #f2dede;
+}
+a.bg-danger:hover {
+  background-color: #e4b9b9;
+}
+.page-header {
+  padding-bottom: 9px;
+  margin: 40px 0 20px;
+  border-bottom: 1px solid #eee;
+}
+ul,
+ol {
+  margin-top: 0;
+  margin-bottom: 10px;
+}
+ul ul,
+ol ul,
+ul ol,
+ol ol {
+  margin-bottom: 0;
+}
+.list-unstyled {
+  padding-left: 0;
+  list-style: none;
+}
+.list-inline {
+  padding-left: 0;
+  margin-left: -5px;
+  list-style: none;
+}
+.list-inline > li {
+  display: inline-block;
+  padding-right: 5px;
+  padding-left: 5px;
+}
+dl {
+  margin-top: 0;
+  margin-bottom: 20px;
+}
+dt,
+dd {
+  line-height: 1.42857143;
+}
+dt {
+  font-weight: bold;
+}
+dd {
+  margin-left: 0;
+}
+@media (min-width: 768px) {
+  .dl-horizontal dt {
+    float: left;
+    width: 160px;
+    overflow: hidden;
+    clear: left;
+    text-align: right;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+  }
+  .dl-horizontal dd {
+    margin-left: 180px;
+  }
+}
+abbr[title],
+abbr[data-original-title] {
+  cursor: help;
+  border-bottom: 1px dotted #777;
+}
+.initialism {
+  font-size: 90%;
+  text-transform: uppercase;
+}
+blockquote {
+  padding: 10px 20px;
+  margin: 0 0 20px;
+  font-size: 17.5px;
+  border-left: 5px solid #eee;
+}
+blockquote p:last-child,
+blockquote ul:last-child,
+blockquote ol:last-child {
+  margin-bottom: 0;
+}
+blockquote footer,
+blockquote small,
+blockquote .small {
+  display: block;
+  font-size: 80%;
+  line-height: 1.42857143;
+  color: #777;
+}
+blockquote footer:before,
+blockquote small:before,
+blockquote .small:before {
+  content: '\2014 \00A0';
+}
+.blockquote-reverse,
+blockquote.pull-right {
+  padding-right: 15px;
+  padding-left: 0;
+  text-align: right;
+  border-right: 5px solid #eee;
+  border-left: 0;
+}
+.blockquote-reverse footer:before,
+blockquote.pull-right footer:before,
+.blockquote-reverse small:before,
+blockquote.pull-right small:before,
+.blockquote-reverse .small:before,
+blockquote.pull-right .small:before {
+  content: '';
+}
+.blockquote-reverse footer:after,
+blockquote.pull-right footer:after,
+.blockquote-reverse small:after,
+blockquote.pull-right small:after,
+.blockquote-reverse .small:after,
+blockquote.pull-right .small:after {
+  content: '\00A0 \2014';
+}
+blockquote:before,
+blockquote:after {
+  content: "";
+}
+address {
+  margin-bottom: 20px;
+  font-style: normal;
+  line-height: 1.42857143;
+}
+code,
+kbd,
+pre,
+samp {
+  font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
+}
+code {
+  padding: 2px 4px;
+  font-size: 90%;
+  color: #c7254e;
+  background-color: #f9f2f4;
+  border-radius: 4px;
+}
+kbd {
+  padding: 2px 4px;
+  font-size: 90%;
+  color: #fff;
+  background-color: #333;
+  border-radius: 3px;
+  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
+          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
+}
+kbd kbd {
+  padding: 0;
+  font-size: 100%;
+  -webkit-box-shadow: none;
+          box-shadow: none;
+}
+pre {
+  display: block;
+  padding: 9.5px;
+  margin: 0 0 10px;
+  font-size: 13px;
+  line-height: 1.42857143;
+  color: #333;
+  word-break: break-all;
+  word-wrap: break-word;
+  background-color: #f5f5f5;
+  border: 1px solid #ccc;
+  border-radius: 4px;
+}
+pre code {
+  padding: 0;
+  font-size: inherit;
+  color: inherit;
+  white-space: pre-wrap;
+  background-color: transparent;
+  border-radius: 0;
+}
+.pre-scrollable {
+  max-height: 340px;
+  overflow-y: scroll;
+}
+.container {
+  padding-right: 15px;
+  padding-left: 15px;
+  margin-right: auto;
+  margin-left: auto;
+}
+@media (min-width: 768px) {
+  .container {
+    width: 750px;
+  }
+}
+@media (min-width: 992px) {
+  .container {
+    width: 970px;
+  }
+}
+@media (min-width: 1200px) {
+  .container {
+    width: 1170px;
+  }
+}
+.container-fluid {
+  padding-right: 15px;
+  padding-left: 15px;
+  margin-right: auto;
+  margin-left: auto;
+}
+.row {
+  margin-right: -15px;
+  margin-left: -15px;
+}
+.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11,  [...]
+  position: relative;
+  min-height: 1px;
+  padding-right: 15px;
+  padding-left: 15px;
+}
+.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
+  float: left;
+}
+.col-xs-12 {
+  width: 100%;
+}
+.col-xs-11 {
+  width: 91.66666667%;
+}
+.col-xs-10 {
+  width: 83.33333333%;
+}
+.col-xs-9 {
+  width: 75%;
+}
+.col-xs-8 {
+  width: 66.66666667%;
+}
+.col-xs-7 {
+  width: 58.33333333%;
+}
+.col-xs-6 {
+  width: 50%;
+}
+.col-xs-5 {
+  width: 41.66666667%;
+}
+.col-xs-4 {
+  width: 33.33333333%;
+}
+.col-xs-3 {
+  width: 25%;
+}
+.col-xs-2 {
+  width: 16.66666667%;
+}
+.col-xs-1 {
+  width: 8.33333333%;
+}
+.col-xs-pull-12 {
+  right: 100%;
+}
+.col-xs-pull-11 {
+  right: 91.66666667%;
+}
+.col-xs-pull-10 {
+  right: 83.33333333%;
+}
+.col-xs-pull-9 {
+  right: 75%;
+}
+.col-xs-pull-8 {
+  right: 66.66666667%;
+}
+.col-xs-pull-7 {
+  right: 58.33333333%;
+}
+.col-xs-pull-6 {
+  right: 50%;
+}
+.col-xs-pull-5 {
+  right: 41.66666667%;
+}
+.col-xs-pull-4 {
+  right: 33.33333333%;
+}
+.col-xs-pull-3 {
+  right: 25%;
+}
+.col-xs-pull-2 {
+  right: 16.66666667%;
+}
+.col-xs-pull-1 {
+  right: 8.33333333%;
+}
+.col-xs-pull-0 {
+  right: auto;
+}
+.col-xs-push-12 {
+  left: 100%;
+}
+.col-xs-push-11 {
+  left: 91.66666667%;
+}
+.col-xs-push-10 {
+  left: 83.33333333%;
+}
+.col-xs-push-9 {
+  left: 75%;
+}
+.col-xs-push-8 {
+  left: 66.66666667%;
+}
+.col-xs-push-7 {
+  left: 58.33333333%;
+}
+.col-xs-push-6 {
+  left: 50%;
+}
+.col-xs-push-5 {
+  left: 41.66666667%;
+}
+.col-xs-push-4 {
+  left: 33.33333333%;
+}
+.col-xs-push-3 {
+  left: 25%;
+}
+.col-xs-push-2 {
+  left: 16.66666667%;
+}
+.col-xs-push-1 {
+  left: 8.33333333%;
+}
+.col-xs-push-0 {
+  left: auto;
+}
+.col-xs-offset-12 {
+  margin-left: 100%;
+}
+.col-xs-offset-11 {
+  margin-left: 91.66666667%;
+}
+.col-xs-offset-10 {
+  margin-left: 83.33333333%;
+}
+.col-xs-offset-9 {
+  margin-left: 75%;
+}
+.col-xs-offset-8 {
+  margin-left: 66.66666667%;
+}
+.col-xs-offset-7 {
+  margin-left: 58.33333333%;
+}
+.col-xs-offset-6 {
+  margin-left: 50%;
+}
+.col-xs-offset-5 {
+  margin-left: 41.66666667%;
+}
+.col-xs-offset-4 {
+  margin-left: 33.33333333%;
+}
+.col-xs-offset-3 {
+  margin-left: 25%;
+}
+.col-xs-offset-2 {
+  margin-left: 16.66666667%;
+}
+.col-xs-offset-1 {
+  margin-left: 8.33333333%;
+}
+.col-xs-offset-0 {
+  margin-left: 0;
+}
+@media (min-width: 768px) {
+  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
+    float: left;
+  }
+  .col-sm-12 {
+    width: 100%;
+  }
+  .col-sm-11 {
+    width: 91.66666667%;
+  }
+  .col-sm-10 {
+    width: 83.33333333%;
+  }
+  .col-sm-9 {
+    width: 75%;
+  }
+  .col-sm-8 {
+    width: 66.66666667%;
+  }
+  .col-sm-7 {
+    width: 58.33333333%;
+  }
+  .col-sm-6 {
+    width: 50%;
+  }
+  .col-sm-5 {
+    width: 41.66666667%;
+  }
+  .col-sm-4 {
+    width: 33.33333333%;
+  }
+  .col-sm-3 {
+    width: 25%;
+  }
+  .col-sm-2 {
+    width: 16.66666667%;
+  }
+  .col-sm-1 {
+    width: 8.33333333%;
+  }
+  .col-sm-pull-12 {
+    right: 100%;
+  }
+  .col-sm-pull-11 {
+    right: 91.66666667%;
+  }
+  .col-sm-pull-10 {
+    right: 83.33333333%;
+  }
+  .col-sm-pull-9 {
+    right: 75%;
+  }
+  .col-sm-pull-8 {
+    right: 66.66666667%;
+  }
+  .col-sm-pull-7 {
+    right: 58.33333333%;
+  }
+  .col-sm-pull-6 {
+    right: 50%;
+  }
+  .col-sm-pull-5 {
+    right: 41.66666667%;
+  }
+  .col-sm-pull-4 {
+    right: 33.33333333%;
+  }
+  .col-sm-pull-3 {
+    right: 25%;
+  }
+  .col-sm-pull-2 {
+    right: 16.66666667%;
+  }
+  .col-sm-pull-1 {
+    right: 8.33333333%;
+  }
+  .col-sm-pull-0 {
+    right: auto;
+  }
+  .col-sm-push-12 {
+    left: 100%;
+  }
+  .col-sm-push-11 {
+    left: 91.66666667%;
+  }
+  .col-sm-push-10 {
+    left: 83.33333333%;
+  }
+  .col-sm-push-9 {
+    left: 75%;
+  }
+  .col-sm-push-8 {
+    left: 66.66666667%;
+  }
+  .col-sm-push-7 {
+    left: 58.33333333%;
+  }
+  .col-sm-push-6 {
+    left: 50%;
+  }
+  .col-sm-push-5 {
+    left: 41.66666667%;
+  }
+  .col-sm-push-4 {
+    left: 33.33333333%;
+  }
+  .col-sm-push-3 {
+    left: 25%;
+  }
+  .col-sm-push-2 {
+    left: 16.66666667%;
+  }
+  .col-sm-push-1 {
+    left: 8.33333333%;
+  }
+  .col-sm-push-0 {
+    left: auto;
+  }
+  .col-sm-offset-12 {
+    margin-left: 100%;
+  }
+  .col-sm-offset-11 {
+    margin-left: 91.66666667%;
+  }
+  .col-sm-offset-10 {
+    margin-left: 83.33333333%;
+  }
+  .col-sm-offset-9 {
+    margin-left: 75%;
+  }
+  .col-sm-offset-8 {
+    margin-left: 66.66666667%;
+  }
+  .col-sm-offset-7 {
+    margin-left: 58.33333333%;
+  }
+  .col-sm-offset-6 {
+    margin-left: 50%;
+  }
+  .col-sm-offset-5 {
+    margin-left: 41.66666667%;
+  }
+  .col-sm-offset-4 {
+    margin-left: 33.33333333%;
+  }
+  .col-sm-offset-3 {
+    margin-left: 25%;
+  }
+  .col-sm-offset-2 {
+    margin-left: 16.66666667%;
+  }
+  .col-sm-offset-1 {
+    margin-left: 8.33333333%;
+  }
+  .col-sm-offset-0 {
+    margin-left: 0;
+  }
+}
+@media (min-width: 992px) {
+  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
+    float: left;
+  }
+  .col-md-12 {
+    width: 100%;
+  }
+  .col-md-11 {
+    width: 91.66666667%;
+  }
+  .col-md-10 {
+    width: 83.33333333%;
+  }
+  .col-md-9 {
+    width: 75%;
+  }
+  .col-md-8 {
+    width: 66.66666667%;
+  }
+  .col-md-7 {
+    width: 58.33333333%;
+  }
+  .col-md-6 {
+    width: 50%;
+  }
+  .col-md-5 {
+    width: 41.66666667%;
+  }
+  .col-md-4 {
+    width: 33.33333333%;
+  }
+  .col-md-3 {
+    width: 25%;
+  }
+  .col-md-2 {
+    width: 16.66666667%;
+  }
+  .col-md-1 {
+    width: 8.33333333%;
+  }
+  .col-md-pull-12 {
+    right: 100%;
+  }
+  .col-md-pull-11 {
+    right: 91.66666667%;
+  }
+  .col-md-pull-10 {
+    right: 83.33333333%;
+  }
+  .col-md-pull-9 {
+    right: 75%;
+  }
+  .col-md-pull-8 {
+    right: 66.66666667%;
+  }
+  .col-md-pull-7 {
+    right: 58.33333333%;
+  }
+  .col-md-pull-6 {
+    right: 50%;
+  }
+  .col-md-pull-5 {
+    right: 41.66666667%;
+  }
+  .col-md-pull-4 {
+    right: 33.33333333%;
+  }
+  .col-md-pull-3 {
+    right: 25%;
+  }
+  .col-md-pull-2 {
+    right: 16.66666667%;
+  }
+  .col-md-pull-1 {
+    right: 8.33333333%;
+  }
+  .col-md-pull-0 {
+    right: auto;
+  }
+  .col-md-push-12 {
+    left: 100%;
+  }
+  .col-md-push-11 {
+    left: 91.66666667%;
+  }
+  .col-md-push-10 {
+    left: 83.33333333%;
+  }
+  .col-md-push-9 {
+    left: 75%;
+  }
+  .col-md-push-8 {
+    left: 66.66666667%;
+  }
+  .col-md-push-7 {
+    left: 58.33333333%;
+  }
+  .col-md-push-6 {
+    left: 50%;
+  }
+  .col-md-push-5 {
+    left: 41.66666667%;
+  }
+  .col-md-push-4 {
+    left: 33.33333333%;
+  }
+  .col-md-push-3 {
+    left: 25%;
+  }
+  .col-md-push-2 {
+    left: 16.66666667%;
+  }
+  .col-md-push-1 {
+    left: 8.33333333%;
+  }
+  .col-md-push-0 {
+    left: auto;
+  }
+  .col-md-offset-12 {
+    margin-left: 100%;
+  }
+  .col-md-offset-11 {
+    margin-left: 91.66666667%;
+  }
+  .col-md-offset-10 {
+    margin-left: 83.33333333%;
+  }
+  .col-md-offset-9 {
+    margin-left: 75%;
+  }
+  .col-md-offset-8 {
+    margin-left: 66.66666667%;
+  }
+  .col-md-offset-7 {
+    margin-left: 58.33333333%;
+  }
+  .col-md-offset-6 {
+    margin-left: 50%;
+  }
+  .col-md-offset-5 {
+    margin-left: 41.66666667%;
+  }
+  .col-md-offset-4 {
+    margin-left: 33.33333333%;
+  }
+  .col-md-offset-3 {
+    margin-left: 25%;
+  }
+  .col-md-offset-2 {
+    margin-left: 16.66666667%;
+  }
+  .col-md-offset-1 {
+    margin-left: 8.33333333%;
+  }
+  .col-md-offset-0 {
+    margin-left: 0;
+  }
+}
+@media (min-width: 1200px) {
+  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
+    float: left;
+  }
+  .col-lg-12 {
+    width: 100%;
+  }
+  .col-lg-11 {
+    width: 91.66666667%;
+  }
+  .col-lg-10 {
+    width: 83.33333333%;
+  }
+  .col-lg-9 {
+    width: 75%;
+  }
+  .col-lg-8 {
+    width: 66.66666667%;
+  }
+  .col-lg-7 {
+    width: 58.33333333%;
+  }
+  .col-lg-6 {
+    width: 50%;
+  }
+  .col-lg-5 {
+    width: 41.66666667%;
+  }
+  .col-lg-4 {
+    width: 33.33333333%;
+  }
+  .col-lg-3 {
+    width: 25%;
+  }
+  .col-lg-2 {
+    width: 16.66666667%;
+  }
+  .col-lg-1 {
+    width: 8.33333333%;
+  }
+  .col-lg-pull-12 {
+    right: 100%;
+  }
+  .col-lg-pull-11 {
+    right: 91.66666667%;
+  }
+  .col-lg-pull-10 {
+    right: 83.33333333%;
+  }
+  .col-lg-pull-9 {
+    right: 75%;
+  }
+  .col-lg-pull-8 {
+    right: 66.66666667%;
+  }
+  .col-lg-pull-7 {
+    right: 58.33333333%;
+  }
+  .col-lg-pull-6 {
+    right: 50%;
+  }
+  .col-lg-pull-5 {
+    right: 41.66666667%;
+  }
+  .col-lg-pull-4 {
+    right: 33.33333333%;
+  }
+  .col-lg-pull-3 {
+    right: 25%;
+  }
+  .col-lg-pull-2 {
+    right: 16.66666667%;
+  }
+  .col-lg-pull-1 {
+    right: 8.33333333%;
+  }
+  .col-lg-pull-0 {
+    right: auto;
+  }
+  .col-lg-push-12 {
+    left: 100%;
+  }
+  .col-lg-push-11 {
+    left: 91.66666667%;
+  }
+  .col-lg-push-10 {
+    left: 83.33333333%;
+  }
+  .col-lg-push-9 {
+    left: 75%;
+  }
+  .col-lg-push-8 {
+    left: 66.66666667%;
+  }
+  .col-lg-push-7 {
+    left: 58.33333333%;
+  }
+  .col-lg-push-6 {
+    left: 50%;
+  }
+  .col-lg-push-5 {
+    left: 41.66666667%;
+  }
+  .col-lg-push-4 {
+    left: 33.33333333%;
+  }
+  .col-lg-push-3 {
+    left: 25%;
+  }
+  .col-lg-push-2 {
+    left: 16.66666667%;
+  }
+  .col-lg-push-1 {
+    left: 8.33333333%;
+  }
+  .col-lg-push-0 {
+    left: auto;
+  }
+  .col-lg-offset-12 {
+    margin-left: 100%;
+  }
+  .col-lg-offset-11 {
+    margin-left: 91.66666667%;
+  }
+  .col-lg-offset-10 {
+    margin-left: 83.33333333%;
+  }
+  .col-lg-offset-9 {
+    margin-left: 75%;
+  }
+  .col-lg-offset-8 {
+    margin-left: 66.66666667%;
+  }
+  .col-lg-offset-7 {
+    margin-left: 58.33333333%;
+  }
+  .col-lg-offset-6 {
+    margin-left: 50%;
+  }
+  .col-lg-offset-5 {
+    margin-left: 41.66666667%;
+  }
+  .col-lg-offset-4 {
+    margin-left: 33.33333333%;
+  }
+  .col-lg-offset-3 {
+    margin-left: 25%;
+  }
+  .col-lg-offset-2 {
+    margin-left: 16.66666667%;
+  }
+  .col-lg-offset-1 {
+    margin-left: 8.33333333%;
+  }
+  .col-lg-offset-0 {
+    margin-left: 0;
+  }
+}
+table {
+  background-color: transparent;
+}
+th {
+  text-align: left;
+}
+.table {
+  width: 100%;
+  max-width: 100%;
+  margin-bottom: 20px;
+}
+.table > thead > tr > th,
+.table > tbody > tr > th,
+.table > tfoot > tr > th,
+.table > thead > tr > td,
+.table > tbody > tr > td,
+.table > tfoot > tr > td {
+  padding: 8px;
+  line-height: 1.42857143;
+  vertical-align: top;
+  border-top: 1px solid #ddd;
+}
+.table > thead > tr > th {
+  vertical-align: bottom;
+  border-bottom: 2px solid #ddd;
+}
+.table > caption + thead > tr:first-child > th,
+.table > colgroup + thead > tr:first-child > th,
+.table > thead:first-child > tr:first-child > th,
+.table > caption + thead > tr:first-child > td,
+.table > colgroup + thead > tr:first-child > td,
+.table > thead:first-child > tr:first-child > td {
+  border-top: 0;
+}
+.table > tbody + tbody {
+  border-top: 2px solid #ddd;
+}
+.table .table {
+  background-color: #fff;
+}
+.table-condensed > thead > tr > th,
+.table-condensed > tbody > tr > th,
+.table-condensed > tfoot > tr > th,
+.table-condensed > thead > tr > td,
+.table-condensed > tbody > tr > td,
+.table-condensed > tfoot > tr > td {
+  padding: 5px;
+}
+.table-bordered {
+  border: 1px solid #ddd;
+}
+.table-bordered > thead > tr > th,
+.table-bordered > tbody > tr > th,
+.table-bordered > tfoot > tr > th,
+.table-bordered > thead > tr > td,
+.table-bordered > tbody > tr > td,
+.table-bordered > tfoot > tr > td {
+  border: 1px solid #ddd;
+}
+.table-bordered > thead > tr > th,
+.table-bordered > thead > tr > td {
+  border-bottom-width: 2px;
+}
+.table-striped > tbody > tr:nth-child(odd) > td,
+.table-striped > tbody > tr:nth-child(odd) > th {
+  background-color: #f9f9f9;
+}
+.table-hover > tbody > tr:hover > td,
+.table-hover > tbody > tr:hover > th {
+  background-color: #f5f5f5;
+}
+table col[class*="col-"] {
+  position: static;
+  display: table-column;
+  float: none;
+}
+table td[class*="col-"],
+table th[class*="col-"] {
+  position: static;
+  display: table-cell;
+  float: none;
+}
+.table > thead > tr > td.active,
+.table > tbody > tr > td.active,
+.table > tfoot > tr > td.active,
+.table > thead > tr > th.active,
+.table > tbody > tr > th.active,
+.table > tfoot > tr > th.active,
+.table > thead > tr.active > td,
+.table > tbody > tr.active > td,
+.table > tfoot > tr.active > td,
+.table > thead > tr.active > th,
+.table > tbody > tr.active > th,
+.table > tfoot > tr.active > th {
+  background-color: #f5f5f5;
+}
+.table-hover > tbody > tr > td.active:hover,
+.table-hover > tbody > tr > th.active:hover,
+.table-hover > tbody > tr.active:hover > td,
+.table-hover > tbody > tr:hover > .active,
+.table-hover > tbody > tr.active:hover > th {
+  background-color: #e8e8e8;
+}
+.table > thead > tr > td.success,
+.table > tbody > tr > td.success,
+.table > tfoot > tr > td.success,
+.table > thead > tr > th.success,
+.table > tbody > tr > th.success,
+.table > tfoot > tr > th.success,
+.table > thead > tr.success > td,
+.table > tbody > tr.success > td,
+.table > tfoot > tr.success > td,
+.table > thead > tr.success > th,
+.table > tbody > tr.success > th,
+.table > tfoot > tr.success > th {
+  background-color: #dff0d8;
+}
+.table-hover > tbody > tr > td.success:hover,
+.table-hover > tbody > tr > th.success:hover,
+.table-hover > tbody > tr.success:hover > td,
+.table-hover > tbody > tr:hover > .success,
+.table-hover > tbody > tr.success:hover > th {
+  background-color: #d0e9c6;
+}
+.table > thead > tr > td.info,
+.table > tbody > tr > td.info,
+.table > tfoot > tr > td.info,
+.table > thead > tr > th.info,
+.table > tbody > tr > th.info,
+.table > tfoot > tr > th.info,
+.table > thead > tr.info > td,
+.table > tbody > tr.info > td,
+.table > tfoot > tr.info > td,
+.table > thead > tr.info > th,
+.table > tbody > tr.info > th,
+.table > tfoot > tr.info > th {
+  background-color: #d9edf7;
+}
+.table-hover > tbody > tr > td.info:hover,
+.table-hover > tbody > tr > th.info:hover,
+.table-hover > tbody > tr.info:hover > td,
+.table-hover > tbody > tr:hover > .info,
+.table-hover > tbody > tr.info:hover > th {
+  background-color: #c4e3f3;
+}
+.table > thead > tr > td.warning,
+.table > tbody > tr > td.warning,
+.table > tfoot > tr > td.warning,
+.table > thead > tr > th.warning,
+.table > tbody > tr > th.warning,
+.table > tfoot > tr > th.warning,
+.table > thead > tr.warning > td,
+.table > tbody > tr.warning > td,
+.table > tfoot > tr.warning > td,
+.table > thead > tr.warning > th,
+.table > tbody > tr.warning > th,
+.table > tfoot > tr.warning > th {
+  background-color: #fcf8e3;
+}
+.table-hover > tbody > tr > td.warning:hover,
+.table-hover > tbody > tr > th.warning:hover,
+.table-hover > tbody > tr.warning:hover > td,
+.table-hover > tbody > tr:hover > .warning,
+.table-hover > tbody > tr.warning:hover > th {
+  background-color: #faf2cc;
+}
+.table > thead > tr > td.danger,
+.table > tbody > tr > td.danger,
+.table > tfoot > tr > td.danger,
+.table > thead > tr > th.danger,
+.table > tbody > tr > th.danger,
+.table > tfoot > tr > th.danger,
+.table > thead > tr.danger > td,
+.table > tbody > tr.danger > td,
+.table > tfoot > tr.danger > td,
+.table > thead > tr.danger > th,
+.table > tbody > tr.danger > th,
+.table > tfoot > tr.danger > th {
+  background-color: #f2dede;
+}
+.table-hover > tbody > tr > td.danger:hover,
+.table-hover > tbody > tr > th.danger:hover,
+.table-hover > tbody > tr.danger:hover > td,
+.table-hover > tbody > tr:hover > .danger,
+.table-hover > tbody > tr.danger:hover > th {
+  background-color: #ebcccc;
+}
+@media screen and (max-width: 767px) {
+  .table-responsive {
+    width: 100%;
+    margin-bottom: 15px;
+    overflow-x: auto;
+    overflow-y: hidden;
+    -webkit-overflow-scrolling: touch;
+    -ms-overflow-style: -ms-autohiding-scrollbar;
+    border: 1px solid #ddd;
+  }
+  .table-responsive > .table {
+    margin-bottom: 0;
+  }
+  .table-responsive > .table > thead > tr > th,
+  .table-responsive > .table > tbody > tr > th,
+  .table-responsive > .table > tfoot > tr > th,
+  .table-responsive > .table > thead > tr > td,
+  .table-responsive > .table > tbody > tr > td,
+  .table-responsive > .table > tfoot > tr > td {
+    white-space: nowrap;
+  }
+  .table-responsive > .table-bordered {
+    border: 0;
+  }
+  .table-responsive > .table-bordered > thead > tr > th:first-child,
+  .table-responsive > .table-bordered > tbody > tr > th:first-child,
+  .table-responsive > .table-bordered > tfoot > tr > th:first-child,
+  .table-responsive > .table-bordered > thead > tr > td:first-child,
+  .table-responsive > .table-bordered > tbody > tr > td:first-child,
+  .table-responsive > .table-bordered > tfoot > tr > td:first-child {
+    border-left: 0;
+  }
+  .table-responsive > .table-bordered > thead > tr > th:last-child,
+  .table-responsive > .table-bordered > tbody > tr > th:last-child,
+  .table-responsive > .table-bordered > tfoot > tr > th:last-child,
+  .table-responsive > .table-bordered > thead > tr > td:last-child,
+  .table-responsive > .table-bordered > tbody > tr > td:last-child,
+  .table-responsive > .table-bordered > tfoot > tr > td:last-child {
+    border-right: 0;
+  }
+  .table-responsive > .table-bordered > tbody > tr:last-child > th,
+  .table-responsive > .table-bordered > tfoot > tr:last-child > th,
+  .table-responsive > .table-bordered > tbody > tr:last-child > td,
+  .table-responsive > .table-bordered > tfoot > tr:last-child > td {
+    border-bottom: 0;
+  }
+}
+fieldset {
+  min-width: 0;
+  padding: 0;
+  margin: 0;
+  border: 0;
+}
+legend {
+  display: block;
+  width: 100%;
+  padding: 0;
+  margin-bottom: 20px;
+  font-size: 21px;
+  line-height: inherit;
+  color: #333;
+  border: 0;
+  border-bottom: 1px solid #e5e5e5;
+}
+label {
+  display: inline-block;
+  max-width: 100%;
+  margin-bottom: 5px;
+  font-weight: bold;
+}
+input[type="search"] {
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+}
+input[type="radio"],
+input[type="checkbox"] {
+  margin: 4px 0 0;
+  margin-top: 1px \9;
+  line-height: normal;
+}
+input[type="file"] {
+  display: block;
+}
+input[type="range"] {
+  display: block;
+  width: 100%;
+}
+select[multiple],
+select[size] {
+  height: auto;
+}
+input[type="file"]:focus,
+input[type="radio"]:focus,
+input[type="checkbox"]:focus {
+  outline: thin dotted;
+  outline: 5px auto -webkit-focus-ring-color;
+  outline-offset: -2px;
+}
+output {
+  display: block;
+  padding-top: 7px;
+  font-size: 14px;
+  line-height: 1.42857143;
+  color: #555;
+}
+.form-control {
+  display: block;
+  width: 100%;
+  height: 34px;
+  padding: 6px 12px;
+  font-size: 14px;
+  line-height: 1.42857143;
+  color: #555;
+  background-color: #fff;
+  background-image: none;
+  border: 1px solid #ccc;
+  border-radius: 4px;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+  -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
+       -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+          transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+}
+.form-control:focus {
+  border-color: #66afe9;
+  outline: 0;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
+          box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
+}
+.form-control::-moz-placeholder {
+  color: #777;
+  opacity: 1;
+}
+.form-control:-ms-input-placeholder {
+  color: #777;
+}
+.form-control::-webkit-input-placeholder {
+  color: #777;
+}
+.form-control[disabled],
+.form-control[readonly],
+fieldset[disabled] .form-control {
+  cursor: not-allowed;
+  background-color: #eee;
+  opacity: 1;
+}
+textarea.form-control {
+  height: auto;
+}
+input[type="search"] {
+  -webkit-appearance: none;
+}
+input[type="date"],
+input[type="time"],
+input[type="datetime-local"],
+input[type="month"] {
+  line-height: 34px;
+  line-height: 1.42857143 \0;
+}
+input[type="date"].input-sm,
+input[type="time"].input-sm,
+input[type="datetime-local"].input-sm,
+input[type="month"].input-sm {
+  line-height: 30px;
+}
+input[type="date"].input-lg,
+input[type="time"].input-lg,
+input[type="datetime-local"].input-lg,
+input[type="month"].input-lg {
+  line-height: 46px;
+}
+.form-group {
+  margin-bottom: 15px;
+}
+.radio,
+.checkbox {
+  position: relative;
+  display: block;
+  min-height: 20px;
+  margin-top: 10px;
+  margin-bottom: 10px;
+}
+.radio label,
+.checkbox label {
+  padding-left: 20px;
+  margin-bottom: 0;
+  font-weight: normal;
+  cursor: pointer;
+}
+.radio input[type="radio"],
+.radio-inline input[type="radio"],
+.checkbox input[type="checkbox"],
+.checkbox-inline input[type="checkbox"] {
+  position: absolute;
+  margin-top: 4px \9;
+  margin-left: -20px;
+}
+.radio + .radio,
+.checkbox + .checkbox {
+  margin-top: -5px;
+}
+.radio-inline,
+.checkbox-inline {
+  display: inline-block;
+  padding-left: 20px;
+  margin-bottom: 0;
+  font-weight: normal;
+  vertical-align: middle;
+  cursor: pointer;
+}
+.radio-inline + .radio-inline,
+.checkbox-inline + .checkbox-inline {
+  margin-top: 0;
+  margin-left: 10px;
+}
+input[type="radio"][disabled],
+input[type="checkbox"][disabled],
+input[type="radio"].disabled,
+input[type="checkbox"].disabled,
+fieldset[disabled] input[type="radio"],
+fieldset[disabled] input[type="checkbox"] {
+  cursor: not-allowed;
+}
+.radio-inline.disabled,
+.checkbox-inline.disabled,
+fieldset[disabled] .radio-inline,
+fieldset[disabled] .checkbox-inline {
+  cursor: not-allowed;
+}
+.radio.disabled label,
+.checkbox.disabled label,
+fieldset[disabled] .radio label,
+fieldset[disabled] .checkbox label {
+  cursor: not-allowed;
+}
+.form-control-static {
+  padding-top: 7px;
+  padding-bottom: 7px;
+  margin-bottom: 0;
+}
+.form-control-static.input-lg,
+.form-control-static.input-sm {
+  padding-right: 0;
+  padding-left: 0;
+}
+.input-sm,
+.form-horizontal .form-group-sm .form-control {
+  height: 30px;
+  padding: 5px 10px;
+  font-size: 12px;
+  line-height: 1.5;
+  border-radius: 3px;
+}
+select.input-sm {
+  height: 30px;
+  line-height: 30px;
+}
+textarea.input-sm,
+select[multiple].input-sm {
+  height: auto;
+}
+.input-lg,
+.form-horizontal .form-group-lg .form-control {
+  height: 46px;
+  padding: 10px 16px;
+  font-size: 18px;
+  line-height: 1.33;
+  border-radius: 6px;
+}
+select.input-lg {
+  height: 46px;
+  line-height: 46px;
+}
+textarea.input-lg,
+select[multiple].input-lg {
+  height: auto;
+}
+.has-feedback {
+  position: relative;
+}
+.has-feedback .form-control {
+  padding-right: 42.5px;
+}
+.form-control-feedback {
+  position: absolute;
+  top: 25px;
+  right: 0;
+  z-index: 2;
+  display: block;
+  width: 34px;
+  height: 34px;
+  line-height: 34px;
+  text-align: center;
+}
+.input-lg + .form-control-feedback {
+  width: 46px;
+  height: 46px;
+  line-height: 46px;
+}
+.input-sm + .form-control-feedback {
+  width: 30px;
+  height: 30px;
+  line-height: 30px;
+}
+.has-success .help-block,
+.has-success .control-label,
+.has-success .radio,
+.has-success .checkbox,
+.has-success .radio-inline,
+.has-success .checkbox-inline {
+  color: #3c763d;
+}
+.has-success .form-control {
+  border-color: #3c763d;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+}
+.has-success .form-control:focus {
+  border-color: #2b542c;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
+}
+.has-success .input-group-addon {
+  color: #3c763d;
+  background-color: #dff0d8;
+  border-color: #3c763d;
+}
+.has-success .form-control-feedback {
+  color: #3c763d;
+}
+.has-warning .help-block,
+.has-warning .control-label,
+.has-warning .radio,
+.has-warning .checkbox,
+.has-warning .radio-inline,
+.has-warning .checkbox-inline {
+  color: #8a6d3b;
+}
+.has-warning .form-control {
+  border-color: #8a6d3b;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+}
+.has-warning .form-control:focus {
+  border-color: #66512c;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
+}
+.has-warning .input-group-addon {
+  color: #8a6d3b;
+  background-color: #fcf8e3;
+  border-color: #8a6d3b;
+}
+.has-warning .form-control-feedback {
+  color: #8a6d3b;
+}
+.has-error .help-block,
+.has-error .control-label,
+.has-error .radio,
+.has-error .checkbox,
+.has-error .radio-inline,
+.has-error .checkbox-inline {
+  color: #a94442;
+}
+.has-error .form-control {
+  border-color: #a94442;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+}
+.has-error .form-control:focus {
+  border-color: #843534;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
+}
+.has-error .input-group-addon {
+  color: #a94442;
+  background-color: #f2dede;
+  border-color: #a94442;
+}
+.has-error .form-control-feedback {
+  color: #a94442;
+}
+.has-feedback label.sr-only ~ .form-control-feedback {
+  top: 0;
+}
+.help-block {
+  display: block;
+  margin-top: 5px;
+  margin-bottom: 10px;
+  color: #737373;
+}
+@media (min-width: 768px) {
+  .form-inline .form-group {
+    display: inline-block;
+    margin-bottom: 0;
+    vertical-align: middle;
+  }
+  .form-inline .form-control {
+    display: inline-block;
+    width: auto;
+    vertical-align: middle;
+  }
+  .form-inline .input-group {
+    display: inline-table;
+    vertical-align: middle;
+  }
+  .form-inline .input-group .input-group-addon,
+  .form-inline .input-group .input-group-btn,
+  .form-inline .input-group .form-control {
+    width: auto;
+  }
+  .form-inline .input-group > .form-control {
+    width: 100%;
+  }
+  .form-inline .control-label {
+    margin-bottom: 0;
+    vertical-align: middle;
+  }
+  .form-inline .radio,
+  .form-inline .checkbox {
+    display: inline-block;
+    margin-top: 0;
+    margin-bottom: 0;
+    vertical-align: middle;
+  }
+  .form-inline .radio label,
+  .form-inline .checkbox label {
+    padding-left: 0;
+  }
+  .form-inline .radio input[type="radio"],
+  .form-inline .checkbox input[type="checkbox"] {
+    position: relative;
+    margin-left: 0;
+  }
+  .form-inline .has-feedback .form-control-feedback {
+    top: 0;
+  }
+}
+.form-horizontal .radio,
+.form-horizontal .checkbox,
+.form-horizontal .radio-inline,
+.form-horizontal .checkbox-inline {
+  padding-top: 7px;
+  margin-top: 0;
+  margin-bottom: 0;
+}
+.form-horizontal .radio,
+.form-horizontal .checkbox {
+  min-height: 27px;
+}
+.form-horizontal .form-group {
+  margin-right: -15px;
+  margin-left: -15px;
+}
+@media (min-width: 768px) {
+  .form-horizontal .control-label {
+    padding-top: 7px;
+    margin-bottom: 0;
+    text-align: right;
+  }
+}
+.form-horizontal .has-feedback .form-control-feedback {
+  top: 0;
+  right: 15px;
+}
+@media (min-width: 768px) {
+  .form-horizontal .form-group-lg .control-label {
+    padding-top: 14.3px;
+  }
+}
+@media (min-width: 768px) {
+  .form-horizontal .form-group-sm .control-label {
+    padding-top: 6px;
+  }
+}
+.btn {
+  display: inline-block;
+  padding: 6px 12px;
+  margin-bottom: 0;
+  font-size: 14px;
+  font-weight: normal;
+  line-height: 1.42857143;
+  text-align: center;
+  white-space: nowrap;
+  vertical-align: middle;
+  cursor: pointer;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  background-image: none;
+  border: 1px solid transparent;
+  border-radius: 4px;
+}
+.btn:focus,
+.btn:active:focus,
+.btn.active:focus {
+  outline: thin dotted;
+  outline: 5px auto -webkit-focus-ring-color;
+  outline-offset: -2px;
+}
+.btn:hover,
+.btn:focus {
+  color: #333;
+  text-decoration: none;
+}
+.btn:active,
+.btn.active {
+  background-image: none;
+  outline: 0;
+  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+}
+.btn.disabled,
+.btn[disabled],
+fieldset[disabled] .btn {
+  pointer-events: none;
+  cursor: not-allowed;
+  filter: alpha(opacity=65);
+  -webkit-box-shadow: none;
+          box-shadow: none;
+  opacity: .65;
+}
+.btn-default {
+  color: #333;
+  background-color: #fff;
+  border-color: #ccc;
+}
+.btn-default:hover,
+.btn-default:focus,
+.btn-default:active,
+.btn-default.active,
+.open > .dropdown-toggle.btn-default {
+  color: #333;
+  background-color: #e6e6e6;
+  border-color: #adadad;
+}
+.btn-default:active,
+.btn-default.active,
+.open > .dropdown-toggle.btn-default {
+  background-image: none;
+}
+.btn-default.disabled,
+.btn-default[disabled],
+fieldset[disabled] .btn-default,
+.btn-default.disabled:hover,
+.btn-default[disabled]:hover,
+fieldset[disabled] .btn-default:hover,
+.btn-default.disabled:focus,
+.btn-default[disabled]:focus,
+fieldset[disabled] .btn-default:focus,
+.btn-default.disabled:active,
+.btn-default[disabled]:active,
+fieldset[disabled] .btn-default:active,
+.btn-default.disabled.active,
+.btn-default[disabled].active,
+fieldset[disabled] .btn-default.active {
+  background-color: #fff;
+  border-color: #ccc;
+}
+.btn-default .badge {
+  color: #fff;
+  background-color: #333;
+}
+.btn-primary {
+  color: #fff;
+  background-color: #428bca;
+  border-color: #357ebd;
+}
+.btn-primary:hover,
+.btn-primary:focus,
+.btn-primary:active,
+.btn-primary.active,
+.open > .dropdown-toggle.btn-primary {
+  color: #fff;
+  background-color: #3071a9;
+  border-color: #285e8e;
+}
+.btn-primary:active,
+.btn-primary.active,
+.open > .dropdown-toggle.btn-primary {
+  background-image: none;
+}
+.btn-primary.disabled,
+.btn-primary[disabled],
+fieldset[disabled] .btn-primary,
+.btn-primary.disabled:hover,
+.btn-primary[disabled]:hover,
+fieldset[disabled] .btn-primary:hover,
+.btn-primary.disabled:focus,
+.btn-primary[disabled]:focus,
+fieldset[disabled] .btn-primary:focus,
+.btn-primary.disabled:active,
+.btn-primary[disabled]:active,
+fieldset[disabled] .btn-primary:active,
+.btn-primary.disabled.active,
+.btn-primary[disabled].active,
+fieldset[disabled] .btn-primary.active {
+  background-color: #428bca;
+  border-color: #357ebd;
+}
+.btn-primary .badge {
+  color: #428bca;
+  background-color: #fff;
+}
+.btn-success {
+  color: #fff;
+  background-color: #5cb85c;
+  border-color: #4cae4c;
+}
+.btn-success:hover,
+.btn-success:focus,
+.btn-success:active,
+.btn-success.active,
+.open > .dropdown-toggle.btn-success {
+  color: #fff;
+  background-color: #449d44;
+  border-color: #398439;
+}
+.btn-success:active,
+.btn-success.active,
+.open > .dropdown-toggle.btn-success {
+  background-image: none;
+}
+.btn-success.disabled,
+.btn-success[disabled],
+fieldset[disabled] .btn-success,
+.btn-success.disabled:hover,
+.btn-success[disabled]:hover,
+fieldset[disabled] .btn-success:hover,
+.btn-success.disabled:focus,
+.btn-success[disabled]:focus,
+fieldset[disabled] .btn-success:focus,
+.btn-success.disabled:active,
+.btn-success[disabled]:active,
+fieldset[disabled] .btn-success:active,
+.btn-success.disabled.active,
+.btn-success[disabled].active,
+fieldset[disabled] .btn-success.active {
+  background-color: #5cb85c;
+  border-color: #4cae4c;
+}
+.btn-success .badge {
+  color: #5cb85c;
+  background-color: #fff;
+}
+.btn-info {
+  color: #fff;
+  background-color: #5bc0de;
+  border-color: #46b8da;
+}
+.btn-info:hover,
+.btn-info:focus,
+.btn-info:active,
+.btn-info.active,
+.open > .dropdown-toggle.btn-info {
+  color: #fff;
+  background-color: #31b0d5;
+  border-color: #269abc;
+}
+.btn-info:active,
+.btn-info.active,
+.open > .dropdown-toggle.btn-info {
+  background-image: none;
+}
+.btn-info.disabled,
+.btn-info[disabled],
+fieldset[disabled] .btn-info,
+.btn-info.disabled:hover,
+.btn-info[disabled]:hover,
+fieldset[disabled] .btn-info:hover,
+.btn-info.disabled:focus,
+.btn-info[disabled]:focus,
+fieldset[disabled] .btn-info:focus,
+.btn-info.disabled:active,
+.btn-info[disabled]:active,
+fieldset[disabled] .btn-info:active,
+.btn-info.disabled.active,
+.btn-info[disabled].active,
+fieldset[disabled] .btn-info.active {
+  background-color: #5bc0de;
+  border-color: #46b8da;
+}
+.btn-info .badge {
+  color: #5bc0de;
+  background-color: #fff;
+}
+.btn-warning {
+  color: #fff;
+  background-color: #f0ad4e;
+  border-color: #eea236;
+}
+.btn-warning:hover,
+.btn-warning:focus,
+.btn-warning:active,
+.btn-warning.active,
+.open > .dropdown-toggle.btn-warning {
+  color: #fff;
+  background-color: #ec971f;
+  border-color: #d58512;
+}
+.btn-warning:active,
+.btn-warning.active,
+.open > .dropdown-toggle.btn-warning {
+  background-image: none;
+}
+.btn-warning.disabled,
+.btn-warning[disabled],
+fieldset[disabled] .btn-warning,
+.btn-warning.disabled:hover,
+.btn-warning[disabled]:hover,
+fieldset[disabled] .btn-warning:hover,
+.btn-warning.disabled:focus,
+.btn-warning[disabled]:focus,
+fieldset[disabled] .btn-warning:focus,
+.btn-warning.disabled:active,
+.btn-warning[disabled]:active,
+fieldset[disabled] .btn-warning:active,
+.btn-warning.disabled.active,
+.btn-warning[disabled].active,
+fieldset[disabled] .btn-warning.active {
+  background-color: #f0ad4e;
+  border-color: #eea236;
+}
+.btn-warning .badge {
+  color: #f0ad4e;
+  background-color: #fff;
+}
+.btn-danger {
+  color: #fff;
+  background-color: #d9534f;
+  border-color: #d43f3a;
+}
+.btn-danger:hover,
+.btn-danger:focus,
+.btn-danger:active,
+.btn-danger.active,
+.open > .dropdown-toggle.btn-danger {
+  color: #fff;
+  background-color: #c9302c;
+  border-color: #ac2925;
+}
+.btn-danger:active,
+.btn-danger.active,
+.open > .dropdown-toggle.btn-danger {
+  background-image: none;
+}
+.btn-danger.disabled,
+.btn-danger[disabled],
+fieldset[disabled] .btn-danger,
+.btn-danger.disabled:hover,
+.btn-danger[disabled]:hover,
+fieldset[disabled] .btn-danger:hover,
+.btn-danger.disabled:focus,
+.btn-danger[disabled]:focus,
+fieldset[disabled] .btn-danger:focus,
+.btn-danger.disabled:active,
+.btn-danger[disabled]:active,
+fieldset[disabled] .btn-danger:active,
+.btn-danger.disabled.active,
+.btn-danger[disabled].active,
+fieldset[disabled] .btn-danger.active {
+  background-color: #d9534f;
+  border-color: #d43f3a;
+}
+.btn-danger .badge {
+  color: #d9534f;
+  background-color: #fff;
+}
+.btn-link {
+  font-weight: normal;
+  color: #428bca;
+  cursor: pointer;
+  border-radius: 0;
+}
+.btn-link,
+.btn-link:active,
+.btn-link[disabled],
+fieldset[disabled] .btn-link {
+  background-color: transparent;
+  -webkit-box-shadow: none;
+          box-shadow: none;
+}
+.btn-link,
+.btn-link:hover,
+.btn-link:focus,
+.btn-link:active {
+  border-color: transparent;
+}
+.btn-link:hover,
+.btn-link:focus {
+  color: #2a6496;
+  text-decoration: underline;
+  background-color: transparent;
+}
+.btn-link[disabled]:hover,
+fieldset[disabled] .btn-link:hover,
+.btn-link[disabled]:focus,
+fieldset[disabled] .btn-link:focus {
+  color: #777;
+  text-decoration: none;
+}
+.btn-lg,
+.btn-group-lg > .btn {
+  padding: 10px 16px;
+  font-size: 18px;
+  line-height: 1.33;
+  border-radius: 6px;
+}
+.btn-sm,
+.btn-group-sm > .btn {
+  padding: 5px 10px;
+  font-size: 12px;
+  line-height: 1.5;
+  border-radius: 3px;
+}
+.btn-xs,
+.btn-group-xs > .btn {
+  padding: 1px 5px;
+  font-size: 12px;
+  line-height: 1.5;
+  border-radius: 3px;
+}
+.btn-block {
+  display: block;
+  width: 100%;
+}
+.btn-block + .btn-block {
+  margin-top: 5px;
+}
+input[type="submit"].btn-block,
+input[type="reset"].btn-block,
+input[type="button"].btn-block {
+  width: 100%;
+}
+.fade {
+  opacity: 0;
+  -webkit-transition: opacity .15s linear;
+       -o-transition: opacity .15s linear;
+          transition: opacity .15s linear;
+}
+.fade.in {
+  opacity: 1;
+}
+.collapse {
+  display: none;
+}
+.collapse.in {
+  display: block;
+}
+tr.collapse.in {
+  display: table-row;
+}
+tbody.collapse.in {
+  display: table-row-group;
+}
+.collapsing {
+  position: relative;
+  height: 0;
+  overflow: hidden;
+  -webkit-transition: height .35s ease;
+       -o-transition: height .35s ease;
+          transition: height .35s ease;
+}
+.caret {
+  display: inline-block;
+  width: 0;
+  height: 0;
+  margin-left: 2px;
+  vertical-align: middle;
+  border-top: 4px solid;
+  border-right: 4px solid transparent;
+  border-left: 4px solid transparent;
+}
+.dropdown {
+  position: relative;
+}
+.dropdown-toggle:focus {
+  outline: 0;
+}
+.dropdown-menu {
+  position: absolute;
+  top: 100%;
+  left: 0;
+  z-index: 1000;
+  display: none;
+  float: left;
+  min-width: 160px;
+  padding: 5px 0;
+  margin: 2px 0 0;
+  font-size: 14px;
+  text-align: left;
+  list-style: none;
+  background-color: #fff;
+  -webkit-background-clip: padding-box;
+          background-clip: padding-box;
+  border: 1px solid #ccc;
+  border: 1px solid rgba(0, 0, 0, .15);
+  border-radius: 4px;
+  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
+          box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
+}
+.dropdown-menu.pull-right {
+  right: 0;
+  left: auto;
+}
+.dropdown-menu .divider {
+  height: 1px;
+  margin: 9px 0;
+  overflow: hidden;
+  background-color: #e5e5e5;
+}
+.dropdown-menu > li > a {
+  display: block;
+  padding: 3px 20px;
+  clear: both;
+  font-weight: normal;
+  line-height: 1.42857143;
+  color: #333;
+  white-space: nowrap;
+}
+.dropdown-menu > li > a:hover,
+.dropdown-menu > li > a:focus {
+  color: #262626;
+  text-decoration: none;
+  background-color: #f5f5f5;
+}
+.dropdown-menu > .active > a,
+.dropdown-menu > .active > a:hover,
+.dropdown-menu > .active > a:focus {
+  color: #fff;
+  text-decoration: none;
+  background-color: #428bca;
+  outline: 0;
+}
+.dropdown-menu > .disabled > a,
+.dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+  color: #777;
+}
+.dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+  text-decoration: none;
+  cursor: not-allowed;
+  background-color: transparent;
+  background-image: none;
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+}
+.open > .dropdown-menu {
+  display: block;
+}
+.open > a {
+  outline: 0;
+}
+.dropdown-menu-right {
+  right: 0;
+  left: auto;
+}
+.dropdown-menu-left {
+  right: auto;
+  left: 0;
+}
+.dropdown-header {
+  display: block;
+  padding: 3px 20px;
+  font-size: 12px;
+  line-height: 1.42857143;
+  color: #777;
+  white-space: nowrap;
+}
+.dropdown-backdrop {
+  position: fixed;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 990;
+}
+.pull-right > .dropdown-menu {
+  right: 0;
+  left: auto;
+}
+.dropup .caret,
+.navbar-fixed-bottom .dropdown .caret {
+  content: "";
+  border-top: 0;
+  border-bottom: 4px solid;
+}
+.dropup .dropdown-menu,
+.navbar-fixed-bottom .dropdown .dropdown-menu {
+  top: auto;
+  bottom: 100%;
+  margin-bottom: 1px;
+}
+@media (min-width: 768px) {
+  .navbar-right .dropdown-menu {
+    right: 0;
+    left: auto;
+  }
+  .navbar-right .dropdown-menu-left {
+    right: auto;
+    left: 0;
+  }
+}
+.btn-group,
+.btn-group-vertical {
+  position: relative;
+  display: inline-block;
+  vertical-align: middle;
+}
+.btn-group > .btn,
+.btn-group-vertical > .btn {
+  position: relative;
+  float: left;
+}
+.btn-group > .btn:hover,
+.btn-group-vertical > .btn:hover,
+.btn-group > .btn:focus,
+.btn-group-vertical > .btn:focus,
+.btn-group > .btn:active,
+.btn-group-vertical > .btn:active,
+.btn-group > .btn.active,
+.btn-group-vertical > .btn.active {
+  z-index: 2;
+}
+.btn-group > .btn:focus,
+.btn-group-vertical > .btn:focus {
+  outline: 0;
+}
+.btn-group .btn + .btn,
+.btn-group .btn + .btn-group,
+.btn-group .btn-group + .btn,
+.btn-group .btn-group + .btn-group {
+  margin-left: -1px;
+}
+.btn-toolbar {
+  margin-left: -5px;
+}
+.btn-toolbar .btn-group,
+.btn-toolbar .input-group {
+  float: left;
+}
+.btn-toolbar > .btn,
+.btn-toolbar > .btn-group,
+.btn-toolbar > .input-group {
+  margin-left: 5px;
+}
+.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
+  border-radius: 0;
+}
+.btn-group > .btn:first-child {
+  margin-left: 0;
+}
+.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+.btn-group > .btn:last-child:not(:first-child),
+.btn-group > .dropdown-toggle:not(:first-child) {
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+.btn-group > .btn-group {
+  float: left;
+}
+.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
+  border-radius: 0;
+}
+.btn-group > .btn-group:first-child > .btn:last-child,
+.btn-group > .btn-group:first-child > .dropdown-toggle {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+.btn-group > .btn-group:last-child > .btn:first-child {
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+.btn-group .dropdown-toggle:active,
+.btn-group.open .dropdown-toggle {
+  outline: 0;
+}
+.btn-group > .btn + .dropdown-toggle {
+  padding-right: 8px;
+  padding-left: 8px;
+}
+.btn-group > .btn-lg + .dropdown-toggle {
+  padding-right: 12px;
+  padding-left: 12px;
+}
+.btn-group.open .dropdown-toggle {
+  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+}
+.btn-group.open .dropdown-toggle.btn-link {
+  -webkit-box-shadow: none;
+          box-shadow: none;
+}
+.btn .caret {
+  margin-left: 0;
+}
+.btn-lg .caret {
+  border-width: 5px 5px 0;
+  border-bottom-width: 0;
+}
+.dropup .btn-lg .caret {
+  border-width: 0 5px 5px;
+}
+.btn-group-vertical > .btn,
+.btn-group-vertical > .btn-group,
+.btn-group-vertical > .btn-group > .btn {
+  display: block;
+  float: none;
+  width: 100%;
+  max-width: 100%;
+}
+.btn-group-vertical > .btn-group > .btn {
+  float: none;
+}
+.btn-group-vertical > .btn + .btn,
+.btn-group-vertical > .btn + .btn-group,
+.btn-group-vertical > .btn-group + .btn,
+.btn-group-vertical > .btn-group + .btn-group {
+  margin-top: -1px;
+  margin-left: 0;
+}
+.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
+  border-radius: 0;
+}
+.btn-group-vertical > .btn:first-child:not(:last-child) {
+  border-top-right-radius: 4px;
+  border-bottom-right-radius: 0;
+  border-bottom-left-radius: 0;
+}
+.btn-group-vertical > .btn:last-child:not(:first-child) {
+  border-top-left-radius: 0;
+  border-top-right-radius: 0;
+  border-bottom-left-radius: 4px;
+}
+.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
+  border-radius: 0;
+}
+.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
+.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
+  border-bottom-right-radius: 0;
+  border-bottom-left-radius: 0;
+}
+.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
+  border-top-left-radius: 0;
+  border-top-right-radius: 0;
+}
+.btn-group-justified {
+  display: table;
+  width: 100%;
+  table-layout: fixed;
+  border-collapse: separate;
+}
+.btn-group-justified > .btn,
+.btn-group-justified > .btn-group {
+  display: table-cell;
+  float: none;
+  width: 1%;
+}
+.btn-group-justified > .btn-group .btn {
+  width: 100%;
+}
+.btn-group-justified > .btn-group .dropdown-menu {
+  left: auto;
+}
+[data-toggle="buttons"] > .btn > input[type="radio"],
+[data-toggle="buttons"] > .btn > input[type="checkbox"] {
+  position: absolute;
+  z-index: -1;
+  filter: alpha(opacity=0);
+  opacity: 0;
+}
+.input-group {
+  position: relative;
+  display: table;
+  border-collapse: separate;
+}
+.input-group[class*="col-"] {
+  float: none;
+  padding-right: 0;
+  padding-left: 0;
+}
+.input-group .form-control {
+  position: relative;
+  z-index: 2;
+  float: left;
+  width: 100%;
+  margin-bottom: 0;
+}
+.input-group-lg > .form-control,
+.input-group-lg > .input-group-addon,
+.input-group-lg > .input-group-btn > .btn {
+  height: 46px;
+  padding: 10px 16px;
+  font-size: 18px;
+  line-height: 1.33;
+  border-radius: 6px;
+}
+select.input-group-lg > .form-control,
+select.input-group-lg > .input-group-addon,
+select.input-group-lg > .input-group-btn > .btn {
+  height: 46px;
+  line-height: 46px;
+}
+textarea.input-group-lg > .form-control,
+textarea.input-group-lg > .input-group-addon,
+textarea.input-group-lg > .input-group-btn > .btn,
+select[multiple].input-group-lg > .form-control,
+select[multiple].input-group-lg > .input-group-addon,
+select[multiple].input-group-lg > .input-group-btn > .btn {
+  height: auto;
+}
+.input-group-sm > .form-control,
+.input-group-sm > .input-group-addon,
+.input-group-sm > .input-group-btn > .btn {
+  height: 30px;
+  padding: 5px 10px;
+  font-size: 12px;
+  line-height: 1.5;
+  border-radius: 3px;
+}
+select.input-group-sm > .form-control,
+select.input-group-sm > .input-group-addon,
+select.input-group-sm > .input-group-btn > .btn {
+  height: 30px;
+  line-height: 30px;
+}
+textarea.input-group-sm > .form-control,
+textarea.input-group-sm > .input-group-addon,
+textarea.input-group-sm > .input-group-btn > .btn,
+select[multiple].input-group-sm > .form-control,
+select[multiple].input-group-sm > .input-group-addon,
+select[multiple].input-group-sm > .input-group-btn > .btn {
+  height: auto;
+}
+.input-group-addon,
+.input-group-btn,
+.input-group .form-control {
+  display: table-cell;
+}
+.input-group-addon:not(:first-child):not(:last-child),
+.input-group-btn:not(:first-child):not(:last-child),
+.input-group .form-control:not(:first-child):not(:last-child) {
+  border-radius: 0;
+}
+.input-group-addon,
+.input-group-btn {
+  width: 1%;
+  white-space: nowrap;
+  vertical-align: middle;
+}
+.input-group-addon {
+  padding: 6px 12px;
+  font-size: 14px;
+  font-weight: normal;
+  line-height: 1;
+  color: #555;
+  text-align: center;
+  background-color: #eee;
+  border: 1px solid #ccc;
+  border-radius: 4px;
+}
+.input-group-addon.input-sm {
+  padding: 5px 10px;
+  font-size: 12px;
+  border-radius: 3px;
+}
+.input-group-addon.input-lg {
+  padding: 10px 16px;
+  font-size: 18px;
+  border-radius: 6px;
+}
+.input-group-addon input[type="radio"],
+.input-group-addon input[type="checkbox"] {
+  margin-top: 0;
+}
+.input-group .form-control:first-child,
+.input-group-addon:first-child,
+.input-group-btn:first-child > .btn,
+.input-group-btn:first-child > .btn-group > .btn,
+.input-group-btn:first-child > .dropdown-toggle,
+.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
+.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+.input-group-addon:first-child {
+  border-right: 0;
+}
+.input-group .form-control:last-child,
+.input-group-addon:last-child,
+.input-group-btn:last-child > .btn,
+.input-group-btn:last-child > .btn-group > .btn,
+.input-group-btn:last-child > .dropdown-toggle,
+.input-group-btn:first-child > .btn:not(:first-child),
+.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+.input-group-addon:last-child {
+  border-left: 0;
+}
+.input-group-btn {
+  position: relative;
+  font-size: 0;
+  white-space: nowrap;
+}
+.input-group-btn > .btn {
+  position: relative;
+}
+.input-group-btn > .btn + .btn {
+  margin-left: -1px;
+}
+.input-group-btn > .btn:hover,
+.input-group-btn > .btn:focus,
+.input-group-btn > .btn:active {
+  z-index: 2;
+}
+.input-group-btn:first-child > .btn,
+.input-group-btn:first-child > .btn-group {
+  margin-right: -1px;
+}
+.input-group-btn:last-child > .btn,
+.input-group-btn:last-child > .btn-group {
+  margin-left: -1px;
+}
+.nav {
+  padding-left: 0;
+  margin-bottom: 0;
+  list-style: none;
+}
+.nav > li {
+  position: relative;
+  display: block;
+}
+.nav > li > a {
+  position: relative;
+  display: block;
+  padding: 10px 15px;
+}
+.nav > li > a:hover,
+.nav > li > a:focus {
+  text-decoration: none;
+  background-color: #eee;
+}
+.nav > li.disabled > a {
+  color: #777;
+}
+.nav > li.disabled > a:hover,
+.nav > li.disabled > a:focus {
+  color: #777;
+  text-decoration: none;
+  cursor: not-allowed;
+  background-color: transparent;
+}
+.nav .open > a,
+.nav .open > a:hover,
+.nav .open > a:focus {
+  background-color: #eee;
+  border-color: #428bca;
+}
+.nav .nav-divider {
+  height: 1px;
+  margin: 9px 0;
+  overflow: hidden;
+  background-color: #e5e5e5;
+}
+.nav > li > a > img {
+  max-width: none;
+}
+.nav-tabs {
+  border-bottom: 1px solid #ddd;
+}
+.nav-tabs > li {
+  float: left;
+  margin-bottom: -1px;
+}
+.nav-tabs > li > a {
+  margin-right: 2px;
+  line-height: 1.42857143;
+  border: 1px solid transparent;
+  border-radius: 4px 4px 0 0;
+}
+.nav-tabs > li > a:hover {
+  border-color: #eee #eee #ddd;
+}
+.nav-tabs > li.active > a,
+.nav-tabs > li.active > a:hover,
+.nav-tabs > li.active > a:focus {
+  color: #555;
+  cursor: default;
+  background-color: #fff;
+  border: 1px solid #ddd;
+  border-bottom-color: transparent;
+}
+.nav-tabs.nav-justified {
+  width: 100%;
+  border-bottom: 0;
+}
+.nav-tabs.nav-justified > li {
+  float: none;
+}
+.nav-tabs.nav-justified > li > a {
+  margin-bottom: 5px;
+  text-align: center;
+}
+.nav-tabs.nav-justified > .dropdown .dropdown-menu {
+  top: auto;
+  left: auto;
+}
+@media (min-width: 768px) {
+  .nav-tabs.nav-justified > li {
+    display: table-cell;
+    width: 1%;
+  }
+  .nav-tabs.nav-justified > li > a {
+    margin-bottom: 0;
+  }
+}
+.nav-tabs.nav-justified > li > a {
+  margin-right: 0;
+  border-radius: 4px;
+}
+.nav-tabs.nav-justified > .active > a,
+.nav-tabs.nav-justified > .active > a:hover,
+.nav-tabs.nav-justified > .active > a:focus {
+  border: 1px solid #ddd;
+}
+@media (min-width: 768px) {
+  .nav-tabs.nav-justified > li > a {
+    border-bottom: 1px solid #ddd;
+    border-radius: 4px 4px 0 0;
+  }
+  .nav-tabs.nav-justified > .active > a,
+  .nav-tabs.nav-justified > .active > a:hover,
+  .nav-tabs.nav-justified > .active > a:focus {
+    border-bottom-color: #fff;
+  }
+}
+.nav-pills > li {
+  float: left;
+}
+.nav-pills > li > a {
+  border-radius: 4px;
+}
+.nav-pills > li + li {
+  margin-left: 2px;
+}
+.nav-pills > li.active > a,
+.nav-pills > li.active > a:hover,
+.nav-pills > li.active > a:focus {
+  color: #fff;
+  background-color: #428bca;
+}
+.nav-stacked > li {
+  float: none;
+}
+.nav-stacked > li + li {
+  margin-top: 2px;
+  margin-left: 0;
+}
+.nav-justified {
+  width: 100%;
+}
+.nav-justified > li {
+  float: none;
+}
+.nav-justified > li > a {
+  margin-bottom: 5px;
+  text-align: center;
+}
+.nav-justified > .dropdown .dropdown-menu {
+  top: auto;
+  left: auto;
+}
+@media (min-width: 768px) {
+  .nav-justified > li {
+    display: table-cell;
+    width: 1%;
+  }
+  .nav-justified > li > a {
+    margin-bottom: 0;
+  }
+}
+.nav-tabs-justified {
+  border-bottom: 0;
+}
+.nav-tabs-justified > li > a {
+  margin-right: 0;
+  border-radius: 4px;
+}
+.nav-tabs-justified > .active > a,
+.nav-tabs-justified > .active > a:hover,
+.nav-tabs-justified > .active > a:focus {
+  border: 1px solid #ddd;
+}
+@media (min-width: 768px) {
+  .nav-tabs-justified > li > a {
+    border-bottom: 1px solid #ddd;
+    border-radius: 4px 4px 0 0;
+  }
+  .nav-tabs-justified > .active > a,
+  .nav-tabs-justified > .active > a:hover,
+  .nav-tabs-justified > .active > a:focus {
+    border-bottom-color: #fff;
+  }
+}
+.tab-content > .tab-pane {
+  display: none;
+}
+.tab-content > .active {
+  display: block;
+}
+.nav-tabs .dropdown-menu {
+  margin-top: -1px;
+  border-top-left-radius: 0;
+  border-top-right-radius: 0;
+}
+.navbar {
+  position: relative;
+  min-height: 50px;
+  margin-bottom: 20px;
+  border: 1px solid transparent;
+}
+@media (min-width: 768px) {
+  .navbar {
+    border-radius: 4px;
+  }
+}
+@media (min-width: 768px) {
+  .navbar-header {
+    float: left;
+  }
+}
+.navbar-collapse {
+  padding-right: 15px;
+  padding-left: 15px;
+  overflow-x: visible;
+  -webkit-overflow-scrolling: touch;
+  border-top: 1px solid transparent;
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
+          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
+}
+.navbar-collapse.in {
+  overflow-y: auto;
+}
+@media (min-width: 768px) {
+  .navbar-collapse {
+    width: auto;
+    border-top: 0;
+    -webkit-box-shadow: none;
+            box-shadow: none;
+  }
+  .navbar-collapse.collapse {
+    display: block !important;
+    height: auto !important;
+    padding-bottom: 0;
+    overflow: visible !important;
+  }
+  .navbar-collapse.in {
+    overflow-y: visible;
+  }
+  .navbar-fixed-top .navbar-collapse,
+  .navbar-static-top .navbar-collapse,
+  .navbar-fixed-bottom .navbar-collapse {
+    padding-right: 0;
+    padding-left: 0;
+  }
+}
+.navbar-fixed-top .navbar-collapse,
+.navbar-fixed-bottom .navbar-collapse {
+  max-height: 340px;
+}
+@media (max-width: 480px) and (orientation: landscape) {
+  .navbar-fixed-top .navbar-collapse,
+  .navbar-fixed-bottom .navbar-collapse {
+    max-height: 200px;
+  }
+}
+.container > .navbar-header,
+.container-fluid > .navbar-header,
+.container > .navbar-collapse,
+.container-fluid > .navbar-collapse {
+  margin-right: -15px;
+  margin-left: -15px;
+}
+@media (min-width: 768px) {
+  .container > .navbar-header,
+  .container-fluid > .navbar-header,
+  .container > .navbar-collapse,
+  .container-fluid > .navbar-collapse {
+    margin-right: 0;
+    margin-left: 0;
+  }
+}
+.navbar-static-top {
+  z-index: 1000;
+  border-width: 0 0 1px;
+}
+@media (min-width: 768px) {
+  .navbar-static-top {
+    border-radius: 0;
+  }
+}
+.navbar-fixed-top,
+.navbar-fixed-bottom {
+  position: fixed;
+  right: 0;
+  left: 0;
+  z-index: 1030;
+  -webkit-transform: translate3d(0, 0, 0);
+       -o-transform: translate3d(0, 0, 0);
+          transform: translate3d(0, 0, 0);
+}
+@media (min-width: 768px) {
+  .navbar-fixed-top,
+  .navbar-fixed-bottom {
+    border-radius: 0;
+  }
+}
+.navbar-fixed-top {
+  top: 0;
+  border-width: 0 0 1px;
+}
+.navbar-fixed-bottom {
+  bottom: 0;
+  margin-bottom: 0;
+  border-width: 1px 0 0;
+}
+.navbar-brand {
+  float: left;
+  height: 50px;
+  padding: 15px 15px;
+  font-size: 18px;
+  line-height: 20px;
+}
+.navbar-brand:hover,
+.navbar-brand:focus {
+  text-decoration: none;
+}
+@media (min-width: 768px) {
+  .navbar > .container .navbar-brand,
+  .navbar > .container-fluid .navbar-brand {
+    margin-left: -15px;
+  }
+}
+.navbar-toggle {
+  position: relative;
+  float: right;
+  padding: 9px 10px;
+  margin-top: 8px;
+  margin-right: 15px;
+  margin-bottom: 8px;
+  background-color: transparent;
+  background-image: none;
+  border: 1px solid transparent;
+  border-radius: 4px;
+}
+.navbar-toggle:focus {
+  outline: 0;
+}
+.navbar-toggle .icon-bar {
+  display: block;
+  width: 22px;
+  height: 2px;
+  border-radius: 1px;
+}
+.navbar-toggle .icon-bar + .icon-bar {
+  margin-top: 4px;
+}
+@media (min-width: 768px) {
+  .navbar-toggle {
+    display: none;
+  }
+}
+.navbar-nav {
+  margin: 7.5px -15px;
+}
+.navbar-nav > li > a {
+  padding-top: 10px;
+  padding-bottom: 10px;
+  line-height: 20px;
+}
+@media (max-width: 767px) {
+  .navbar-nav .open .dropdown-menu {
+    position: static;
+    float: none;
+    width: auto;
+    margin-top: 0;
+    background-color: transparent;
+    border: 0;
+    -webkit-box-shadow: none;
+            box-shadow: none;
+  }
+  .navbar-nav .open .dropdown-menu > li > a,
+  .navbar-nav .open .dropdown-menu .dropdown-header {
+    padding: 5px 15px 5px 25px;
+  }
+  .navbar-nav .open .dropdown-menu > li > a {
+    line-height: 20px;
+  }
+  .navbar-nav .open .dropdown-menu > li > a:hover,
+  .navbar-nav .open .dropdown-menu > li > a:focus {
+    background-image: none;
+  }
+}
+@media (min-width: 768px) {
+  .navbar-nav {
+    float: left;
+    margin: 0;
+  }
+  .navbar-nav > li {
+    float: left;
+  }
+  .navbar-nav > li > a {
+    padding-top: 15px;
+    padding-bottom: 15px;
+  }
+  .navbar-nav.navbar-right:last-child {
+    margin-right: -15px;
+  }
+}
+@media (min-width: 768px) {
+  .navbar-left {
+    float: left !important;
+  }
+  .navbar-right {
+    float: right !important;
+  }
+}
+.navbar-form {
+  padding: 10px 15px;
+  margin-top: 8px;
+  margin-right: -15px;
+  margin-bottom: 8px;
+  margin-left: -15px;
+  border-top: 1px solid transparent;
+  border-bottom: 1px solid transparent;
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
+          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
+}
+@media (min-width: 768px) {
+  .navbar-form .form-group {
+    display: inline-block;
+    margin-bottom: 0;
+    vertical-align: middle;
+  }
+  .navbar-form .form-control {
+    display: inline-block;
+    width: auto;
+    vertical-align: middle;
+  }
+  .navbar-form .input-group {
+    display: inline-table;
+    vertical-align: middle;
+  }
+  .navbar-form .input-group .input-group-addon,
+  .navbar-form .input-group .input-group-btn,
+  .navbar-form .input-group .form-control {
+    width: auto;
+  }
+  .navbar-form .input-group > .form-control {
+    width: 100%;
+  }
+  .navbar-form .control-label {
+    margin-bottom: 0;
+    vertical-align: middle;
+  }
+  .navbar-form .radio,
+  .navbar-form .checkbox {
+    display: inline-block;
+    margin-top: 0;
+    margin-bottom: 0;
+    vertical-align: middle;
+  }
+  .navbar-form .radio label,
+  .navbar-form .checkbox label {
+    padding-left: 0;
+  }
+  .navbar-form .radio input[type="radio"],
+  .navbar-form .checkbox input[type="checkbox"] {
+    position: relative;
+    margin-left: 0;
+  }
+  .navbar-form .has-feedback .form-control-feedback {
+    top: 0;
+  }
+}
+@media (max-width: 767px) {
+  .navbar-form .form-group {
+    margin-bottom: 5px;
+  }
+}
+@media (min-width: 768px) {
+  .navbar-form {
+    width: auto;
+    padding-top: 0;
+    padding-bottom: 0;
+    margin-right: 0;
+    margin-left: 0;
+    border: 0;
+    -webkit-box-shadow: none;
+            box-shadow: none;
+  }
+  .navbar-form.navbar-right:last-child {
+    margin-right: -15px;
+  }
+}
+.navbar-nav > li > .dropdown-menu {
+  margin-top: 0;
+  border-top-left-radius: 0;
+  border-top-right-radius: 0;
+}
+.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
+  border-bottom-right-radius: 0;
+  border-bottom-left-radius: 0;
+}
+.navbar-btn {
+  margin-top: 8px;
+  margin-bottom: 8px;
+}
+.navbar-btn.btn-sm {
+  margin-top: 10px;
+  margin-bottom: 10px;
+}
+.navbar-btn.btn-xs {
+  margin-top: 14px;
+  margin-bottom: 14px;
+}
+.navbar-text {
+  margin-top: 15px;
+  margin-bottom: 15px;
+}
+@media (min-width: 768px) {
+  .navbar-text {
+    float: left;
+    margin-right: 15px;
+    margin-left: 15px;
+  }
+  .navbar-text.navbar-right:last-child {
+    margin-right: 0;
+  }
+}
+.navbar-default {
+  background-color: #f8f8f8;
+  border-color: #e7e7e7;
+}
+.navbar-default .navbar-brand {
+  color: #777;
+}
+.navbar-default .navbar-brand:hover,
+.navbar-default .navbar-brand:focus {
+  color: #5e5e5e;
+  background-color: transparent;
+}
+.navbar-default .navbar-text {
+  color: #777;
+}
+.navbar-default .navbar-nav > li > a {
+  color: #777;
+}
+.navbar-default .navbar-nav > li > a:hover,
+.navbar-default .navbar-nav > li > a:focus {
+  color: #333;
+  background-color: transparent;
+}
+.navbar-default .navbar-nav > .active > a:hover,
+.navbar-default .navbar-nav > .active > a:focus {
+  color: #555;
+}
+.navbar-default .navbar-nav > .disabled > a,
+.navbar-default .navbar-nav > .disabled > a:hover,
+.navbar-default .navbar-nav > .disabled > a:focus {
+  color: #ccc;
+  background-color: transparent;
+}
+.navbar-default .navbar-toggle {
+  border-color: #ddd;
+}
+.navbar-default .navbar-toggle:hover,
+.navbar-default .navbar-toggle:focus {
+  background-color: #ddd;
+}
+.navbar-default .navbar-toggle .icon-bar {
+  background-color: #888;
+}
+.navbar-default .navbar-collapse,
+.navbar-default .navbar-form {
+  border-color: #e7e7e7;
+}
+.navbar-default .navbar-nav > .open > a,
+.navbar-default .navbar-nav > .open > a:hover,
+.navbar-default .navbar-nav > .open > a:focus {
+  color: #555;
+}
+@media (max-width: 767px) {
+  .navbar-default .navbar-nav .open .dropdown-menu > li > a {
+    color: #777;
+  }
+  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
+  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
+    color: #333;
+    background-color: transparent;
+  }
+  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
+  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
+  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
+    color: #555;
+  }
+  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
+  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
+  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+    color: #ccc;
+    background-color: transparent;
+  }
+}
+.navbar-default .navbar-link {
+  color: #777;
+}
+.navbar-default .navbar-link:hover {
+  color: #333;
+}
+.navbar-default .btn-link {
+  color: #777;
+}
+.navbar-default .btn-link:hover,
+.navbar-default .btn-link:focus {
+  color: #333;
+}
+.navbar-default .btn-link[disabled]:hover,
+fieldset[disabled] .navbar-default .btn-link:hover,
+.navbar-default .btn-link[disabled]:focus,
+fieldset[disabled] .navbar-default .btn-link:focus {
+  color: #ccc;
+}
+.navbar-inverse {
+  background-color: #222;
+  border-color: #080808;
+}
+.navbar-inverse .navbar-brand {
+  color: #777;
+}
+.navbar-inverse .navbar-brand:hover,
+.navbar-inverse .navbar-brand:focus {
+  color: #fff;
+  background-color: transparent;
+}
+.navbar-inverse .navbar-text {
+  color: #777;
+}
+.navbar-inverse .navbar-nav > li > a {
+  color: #777;
+}
+.navbar-inverse .navbar-nav > li > a:hover,
+.navbar-inverse .navbar-nav > li > a:focus {
+  color: #fff;
+  background-color: transparent;
+}
+.navbar-inverse .navbar-nav > .active > a,
+.navbar-inverse .navbar-nav > .active > a:hover,
+.navbar-inverse .navbar-nav > .active > a:focus {
+  color: #fff;
+  background-color: #080808;
+}
+.navbar-inverse .navbar-nav > .disabled > a,
+.navbar-inverse .navbar-nav > .disabled > a:hover,
+.navbar-inverse .navbar-nav > .disabled > a:focus {
+  color: #444;
+  background-color: transparent;
+}
+.navbar-inverse .navbar-toggle {
+  border-color: #333;
+}
+.navbar-inverse .navbar-toggle:hover,
+.navbar-inverse .navbar-toggle:focus {
+  background-color: #333;
+}
+.navbar-inverse .navbar-toggle .icon-bar {
+  background-color: #fff;
+}
+.navbar-inverse .navbar-collapse,
+.navbar-inverse .navbar-form {
+  border-color: #101010;
+}
+.navbar-inverse .navbar-nav > .open > a,
+.navbar-inverse .navbar-nav > .open > a:hover,
+.navbar-inverse .navbar-nav > .open > a:focus {
+  color: #fff;
+  background-color: #080808;
+}
+@media (max-width: 767px) {
+  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
+    border-color: #080808;
+  }
+  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
+    background-color: #080808;
+  }
+  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
+    color: #777;
+  }
+  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
+  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
+    color: #fff;
+    background-color: transparent;
+  }
+  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
+  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
+  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
+    color: #fff;
+    background-color: #080808;
+  }
+  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
+  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
+  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+    color: #444;
+    background-color: transparent;
+  }
+}
+.navbar-inverse .navbar-link {
+  color: #777;
+}
+.navbar-inverse .navbar-link:hover {
+  color: #fff;
+}
+.navbar-inverse .btn-link {
+  color: #777;
+}
+.navbar-inverse .btn-link:hover,
+.navbar-inverse .btn-link:focus {
+  color: #fff;
+}
+.navbar-inverse .btn-link[disabled]:hover,
+fieldset[disabled] .navbar-inverse .btn-link:hover,
+.navbar-inverse .btn-link[disabled]:focus,
+fieldset[disabled] .navbar-inverse .btn-link:focus {
+  color: #444;
+}
+.breadcrumb {
+  padding: 8px 15px;
+  margin-bottom: 20px;
+  list-style: none;
+  background-color: #f5f5f5;
+  border-radius: 4px;
+}
+.breadcrumb > li {
+  display: inline-block;
+}
+.breadcrumb > li + li:before {
+  padding: 0 5px;
+  color: #ccc;
+  content: "/\00a0";
+}
+.breadcrumb > .active {
+  color: #777;
+}
+.pagination {
+  display: inline-block;
+  padding-left: 0;
+  margin: 20px 0;
+  border-radius: 4px;
+}
+.pagination > li {
+  display: inline;
+}
+.pagination > li > a,
+.pagination > li > span {
+  position: relative;
+  float: left;
+  padding: 6px 12px;
+  margin-left: -1px;
+  line-height: 1.42857143;
+  color: #428bca;
+  text-decoration: none;
+  background-color: #fff;
+  border: 1px solid #ddd;
+}
+.pagination > li:first-child > a,
+.pagination > li:first-child > span {
+  margin-left: 0;
+  border-top-left-radius: 4px;
+  border-bottom-left-radius: 4px;
+}
+.pagination > li:last-child > a,
+.pagination > li:last-child > span {
+  border-top-right-radius: 4px;
+  border-bottom-right-radius: 4px;
+}
+.pagination > li > a:hover,
+.pagination > li > span:hover,
+.pagination > li > a:focus,
+.pagination > li > span:focus {
+  color: #2a6496;
+  background-color: #eee;
+  border-color: #ddd;
+}
+.pagination > .active > a,
+.pagination > .active > span,
+.pagination > .active > a:hover,
+.pagination > .active > span:hover,
+.pagination > .active > a:focus,
+.pagination > .active > span:focus {
+  z-index: 2;
+  color: #fff;
+  cursor: default;
+  background-color: #428bca;
+  border-color: #428bca;
+}
+.pagination > .disabled > span,
+.pagination > .disabled > span:hover,
+.pagination > .disabled > span:focus,
+.pagination > .disabled > a,
+.pagination > .disabled > a:hover,
+.pagination > .disabled > a:focus {
+  color: #777;
+  cursor: not-allowed;
+  background-color: #fff;
+  border-color: #ddd;
+}
+.pagination-lg > li > a,
+.pagination-lg > li > span {
+  padding: 10px 16px;
+  font-size: 18px;
+}
+.pagination-lg > li:first-child > a,
+.pagination-lg > li:first-child > span {
+  border-top-left-radius: 6px;
+  border-bottom-left-radius: 6px;
+}
+.pagination-lg > li:last-child > a,
+.pagination-lg > li:last-child > span {
+  border-top-right-radius: 6px;
+  border-bottom-right-radius: 6px;
+}
+.pagination-sm > li > a,
+.pagination-sm > li > span {
+  padding: 5px 10px;
+  font-size: 12px;
+}
+.pagination-sm > li:first-child > a,
+.pagination-sm > li:first-child > span {
+  border-top-left-radius: 3px;
+  border-bottom-left-radius: 3px;
+}
+.pagination-sm > li:last-child > a,
+.pagination-sm > li:last-child > span {
+  border-top-right-radius: 3px;
+  border-bottom-right-radius: 3px;
+}
+.pager {
+  padding-left: 0;
+  margin: 20px 0;
+  text-align: center;
+  list-style: none;
+}
+.pager li {
+  display: inline;
+}
+.pager li > a,
+.pager li > span {
+  display: inline-block;
+  padding: 5px 14px;
+  background-color: #fff;
+  border: 1px solid #ddd;
+  border-radius: 15px;
+}
+.pager li > a:hover,
+.pager li > a:focus {
+  text-decoration: none;
+  background-color: #eee;
+}
+.pager .next > a,
+.pager .next > span {
+  float: right;
+}
+.pager .previous > a,
+.pager .previous > span {
+  float: left;
+}
+.pager .disabled > a,
+.pager .disabled > a:hover,
+.pager .disabled > a:focus,
+.pager .disabled > span {
+  color: #777;
+  cursor: not-allowed;
+  background-color: #fff;
+}
+.label {
+  display: inline;
+  padding: .2em .6em .3em;
+  font-size: 75%;
+  font-weight: bold;
+  line-height: 1;
+  color: #fff;
+  text-align: center;
+  white-space: nowrap;
+  vertical-align: baseline;
+  border-radius: .25em;
+}
+a.label:hover,
+a.label:focus {
+  color: #fff;
+  text-decoration: none;
+  cursor: pointer;
+}
+.label:empty {
+  display: none;
+}
+.btn .label {
+  position: relative;
+  top: -1px;
+}
+.label-default {
+  background-color: #777;
+}
+.label-default[href]:hover,
+.label-default[href]:focus {
+  background-color: #5e5e5e;
+}
+.label-primary {
+  background-color: #428bca;
+}
+.label-primary[href]:hover,
+.label-primary[href]:focus {
+  background-color: #3071a9;
+}
+.label-success {
+  background-color: #5cb85c;
+}
+.label-success[href]:hover,
+.label-success[href]:focus {
+  background-color: #449d44;
+}
+.label-info {
+  background-color: #5bc0de;
+}
+.label-info[href]:hover,
+.label-info[href]:focus {
+  background-color: #31b0d5;
+}
+.label-warning {
+  background-color: #f0ad4e;
+}
+.label-warning[href]:hover,
+.label-warning[href]:focus {
+  background-color: #ec971f;
+}
+.label-danger {
+  background-color: #d9534f;
+}
+.label-danger[href]:hover,
+.label-danger[href]:focus {
+  background-color: #c9302c;
+}
+.badge {
+  display: inline-block;
+  min-width: 10px;
+  padding: 3px 7px;
+  font-size: 12px;
+  font-weight: bold;
+  line-height: 1;
+  color: #fff;
+  text-align: center;
+  white-space: nowrap;
+  vertical-align: baseline;
+  background-color: #777;
+  border-radius: 10px;
+}
+.badge:empty {
+  display: none;
+}
+.btn .badge {
+  position: relative;
+  top: -1px;
+}
+.btn-xs .badge {
+  top: 0;
+  padding: 1px 5px;
+}
+a.badge:hover,
+a.badge:focus {
+  color: #fff;
+  text-decoration: none;
+  cursor: pointer;
+}
+a.list-group-item.active > .badge,
+.nav-pills > .active > a > .badge {
+  color: #428bca;
+  background-color: #fff;
+}
+.nav-pills > li > a > .badge {
+  margin-left: 3px;
+}
+.jumbotron {
+  padding: 30px;
+  margin-bottom: 30px;
+  color: inherit;
+  background-color: #eee;
+}
+.jumbotron h1,
+.jumbotron .h1 {
+  color: inherit;
+}
+.jumbotron p {
+  margin-bottom: 15px;
+  font-size: 21px;
+  font-weight: 200;
+}
+.jumbotron > hr {
+  border-top-color: #d5d5d5;
+}
+.container .jumbotron {
+  border-radius: 6px;
+}
+.jumbotron .container {
+  max-width: 100%;
+}
+@media screen and (min-width: 768px) {
+  .jumbotron {
+    padding-top: 48px;
+    padding-bottom: 48px;
+  }
+  .container .jumbotron {
+    padding-right: 60px;
+    padding-left: 60px;
+  }
+  .jumbotron h1,
+  .jumbotron .h1 {
+    font-size: 63px;
+  }
+}
+.thumbnail {
+  display: block;
+  padding: 4px;
+  margin-bottom: 20px;
+  line-height: 1.42857143;
+  background-color: #fff;
+  border: 1px solid #ddd;
+  border-radius: 4px;
+  -webkit-transition: all .2s ease-in-out;
+       -o-transition: all .2s ease-in-out;
+          transition: all .2s ease-in-out;
+}
+.thumbnail > img,
+.thumbnail a > img {
+  margin-right: auto;
+  margin-left: auto;
+}
+a.thumbnail:hover,
+a.thumbnail:focus,
+a.thumbnail.active {
+  border-color: #428bca;
+}
+.thumbnail .caption {
+  padding: 9px;
+  color: #333;
+}
+.alert {
+  padding: 15px;
+  margin-bottom: 20px;
+  border: 1px solid transparent;
+  border-radius: 4px;
+}
+.alert h4 {
+  margin-top: 0;
+  color: inherit;
+}
+.alert .alert-link {
+  font-weight: bold;
+}
+.alert > p,
+.alert > ul {
+  margin-bottom: 0;
+}
+.alert > p + p {
+  margin-top: 5px;
+}
+.alert-dismissable,
+.alert-dismissible {
+  padding-right: 35px;
+}
+.alert-dismissable .close,
+.alert-dismissible .close {
+  position: relative;
+  top: -2px;
+  right: -21px;
+  color: inherit;
+}
+.alert-success {
+  color: #3c763d;
+  background-color: #dff0d8;
+  border-color: #d6e9c6;
+}
+.alert-success hr {
+  border-top-color: #c9e2b3;
+}
+.alert-success .alert-link {
+  color: #2b542c;
+}
+.alert-info {
+  color: #31708f;
+  background-color: #d9edf7;
+  border-color: #bce8f1;
+}
+.alert-info hr {
+  border-top-color: #a6e1ec;
+}
+.alert-info .alert-link {
+  color: #245269;
+}
+.alert-warning {
+  color: #8a6d3b;
+  background-color: #fcf8e3;
+  border-color: #faebcc;
+}
+.alert-warning hr {
+  border-top-color: #f7e1b5;
+}
+.alert-warning .alert-link {
+  color: #66512c;
+}
+.alert-danger {
+  color: #a94442;
+  background-color: #f2dede;
+  border-color: #ebccd1;
+}
+.alert-danger hr {
+  border-top-color: #e4b9c0;
+}
+.alert-danger .alert-link {
+  color: #843534;
+}
+@-webkit-keyframes progress-bar-stripes {
+  from {
+    background-position: 40px 0;
+  }
+  to {
+    background-position: 0 0;
+  }
+}
+@-o-keyframes progress-bar-stripes {
+  from {
+    background-position: 40px 0;
+  }
+  to {
+    background-position: 0 0;
+  }
+}
+@keyframes progress-bar-stripes {
+  from {
+    background-position: 40px 0;
+  }
+  to {
+    background-position: 0 0;
+  }
+}
+.progress {
+  height: 20px;
+  margin-bottom: 20px;
+  overflow: hidden;
+  background-color: #f5f5f5;
+  border-radius: 4px;
+  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
+          box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
+}
+.progress-bar {
+  float: left;
+  width: 0;
+  height: 100%;
+  font-size: 12px;
+  line-height: 20px;
+  color: #fff;
+  text-align: center;
+  background-color: #428bca;
+  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
+          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
+  -webkit-transition: width .6s ease;
+       -o-transition: width .6s ease;
+          transition: width .6s ease;
+}
+.progress-striped .progress-bar,
+.progress-bar-striped {
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+  -webkit-background-size: 40px 40px;
+          background-size: 40px 40px;
+}
+.progress.active .progress-bar,
+.progress-bar.active {
+  -webkit-animation: progress-bar-stripes 2s linear infinite;
+       -o-animation: progress-bar-stripes 2s linear infinite;
+          animation: progress-bar-stripes 2s linear infinite;
+}
+.progress-bar[aria-valuenow="1"],
+.progress-bar[aria-valuenow="2"] {
+  min-width: 30px;
+}
+.progress-bar[aria-valuenow="0"] {
+  min-width: 30px;
+  color: #777;
+  background-color: transparent;
+  background-image: none;
+  -webkit-box-shadow: none;
+          box-shadow: none;
+}
+.progress-bar-success {
+  background-color: #5cb85c;
+}
+.progress-striped .progress-bar-success {
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+.progress-bar-info {
+  background-color: #5bc0de;
+}
+.progress-striped .progress-bar-info {
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+.progress-bar-warning {
+  background-color: #f0ad4e;
+}
+.progress-striped .progress-bar-warning {
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+.progress-bar-danger {
+  background-color: #d9534f;
+}
+.progress-striped .progress-bar-danger {
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+.media,
+.media-body {
+  overflow: hidden;
+  zoom: 1;
+}
+.media,
+.media .media {
+  margin-top: 15px;
+}
+.media:first-child {
+  margin-top: 0;
+}
+.media-object {
+  display: block;
+}
+.media-heading {
+  margin: 0 0 5px;
+}
+.media > .pull-left {
+  margin-right: 10px;
+}
+.media > .pull-right {
+  margin-left: 10px;
+}
+.media-list {
+  padding-left: 0;
+  list-style: none;
+}
+.list-group {
+  padding-left: 0;
+  margin-bottom: 20px;
+}
+.list-group-item {
+  position: relative;
+  display: block;
+  padding: 10px 15px;
+  margin-bottom: -1px;
+  background-color: #fff;
+  border: 1px solid #ddd;
+}
+.list-group-item:first-child {
+  border-top-left-radius: 4px;
+  border-top-right-radius: 4px;
+}
+.list-group-item:last-child {
+  margin-bottom: 0;
+  border-bottom-right-radius: 4px;
+  border-bottom-left-radius: 4px;
+}
+.list-group-item > .badge {
+  float: right;
+}
+.list-group-item > .badge + .badge {
+  margin-right: 5px;
+}
+a.list-group-item {
+  color: #555;
+}
+a.list-group-item .list-group-item-heading {
+  color: #333;
+}
+a.list-group-item:hover,
+a.list-group-item:focus {
+  color: #555;
+  text-decoration: none;
+  background-color: #f5f5f5;
+}
+.list-group-item.disabled,
+.list-group-item.disabled:hover,
+.list-group-item.disabled:focus {
+  color: #777;
+  background-color: #eee;
+}
+.list-group-item.disabled .list-group-item-heading,
+.list-group-item.disabled:hover .list-group-item-heading,
+.list-group-item.disabled:focus .list-group-item-heading {
+  color: inherit;
+}
+.list-group-item.disabled .list-group-item-text,
+.list-group-item.disabled:hover .list-group-item-text,
+.list-group-item.disabled:focus .list-group-item-text {
+  color: #777;
+}
+.list-group-item.active,
+.list-group-item.active:hover,
+.list-group-item.active:focus {
+  z-index: 2;
+  color: #fff;
+  background-color: #428bca;
+  border-color: #428bca;
+}
+.list-group-item.active .list-group-item-heading,
+.list-group-item.active:hover .list-group-item-heading,
+.list-group-item.active:focus .list-group-item-heading,
+.list-group-item.active .list-group-item-heading > small,
+.list-group-item.active:hover .list-group-item-heading > small,
+.list-group-item.active:focus .list-group-item-heading > small,
+.list-group-item.active .list-group-item-heading > .small,
+.list-group-item.active:hover .list-group-item-heading > .small,
+.list-group-item.active:focus .list-group-item-heading > .small {
+  color: inherit;
+}
+.list-group-item.active .list-group-item-text,
+.list-group-item.active:hover .list-group-item-text,
+.list-group-item.active:focus .list-group-item-text {
+  color: #e1edf7;
+}
+.list-group-item-success {
+  color: #3c763d;
+  background-color: #dff0d8;
+}
+a.list-group-item-success {
+  color: #3c763d;
+}
+a.list-group-item-success .list-group-item-heading {
+  color: inherit;
+}
+a.list-group-item-success:hover,
+a.list-group-item-success:focus {
+  color: #3c763d;
+  background-color: #d0e9c6;
+}
+a.list-group-item-success.active,
+a.list-group-item-success.active:hover,
+a.list-group-item-success.active:focus {
+  color: #fff;
+  background-color: #3c763d;
+  border-color: #3c763d;
+}
+.list-group-item-info {
+  color: #31708f;
+  background-color: #d9edf7;
+}
+a.list-group-item-info {
+  color: #31708f;
+}
+a.list-group-item-info .list-group-item-heading {
+  color: inherit;
+}
+a.list-group-item-info:hover,
+a.list-group-item-info:focus {
+  color: #31708f;
+  background-color: #c4e3f3;
+}
+a.list-group-item-info.active,
+a.list-group-item-info.active:hover,
+a.list-group-item-info.active:focus {
+  color: #fff;
+  background-color: #31708f;
+  border-color: #31708f;
+}
+.list-group-item-warning {
+  color: #8a6d3b;
+  background-color: #fcf8e3;
+}
+a.list-group-item-warning {
+  color: #8a6d3b;
+}
+a.list-group-item-warning .list-group-item-heading {
+  color: inherit;
+}
+a.list-group-item-warning:hover,
+a.list-group-item-warning:focus {
+  color: #8a6d3b;
+  background-color: #faf2cc;
+}
+a.list-group-item-warning.active,
+a.list-group-item-warning.active:hover,
+a.list-group-item-warning.active:focus {
+  color: #fff;
+  background-color: #8a6d3b;
+  border-color: #8a6d3b;
+}
+.list-group-item-danger {
+  color: #a94442;
+  background-color: #f2dede;
+}
+a.list-group-item-danger {
+  color: #a94442;
+}
+a.list-group-item-danger .list-group-item-heading {
+  color: inherit;
+}
+a.list-group-item-danger:hover,
+a.list-group-item-danger:focus {
+  color: #a94442;
+  background-color: #ebcccc;
+}
+a.list-group-item-danger.active,
+a.list-group-item-danger.active:hover,
+a.list-group-item-danger.active:focus {
+  color: #fff;
+  background-color: #a94442;
+  border-color: #a94442;
+}
+.list-group-item-heading {
+  margin-top: 0;
+  margin-bottom: 5px;
+}
+.list-group-item-text {
+  margin-bottom: 0;
+  line-height: 1.3;
+}
+.panel {
+  margin-bottom: 20px;
+  background-color: #fff;
+  border: 1px solid transparent;
+  border-radius: 4px;
+  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
+          box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
+}
+.panel-body {
+  padding: 15px;
+}
+.panel-heading {
+  padding: 10px 15px;
+  border-bottom: 1px solid transparent;
+  border-top-left-radius: 3px;
+  border-top-right-radius: 3px;
+}
+.panel-heading > .dropdown .dropdown-toggle {
+  color: inherit;
+}
+.panel-title {
+  margin-top: 0;
+  margin-bottom: 0;
+  font-size: 16px;
+  color: inherit;
+}
+.panel-title > a {
+  color: inherit;
+}
+.panel-footer {
+  padding: 10px 15px;
+  background-color: #f5f5f5;
+  border-top: 1px solid #ddd;
+  border-bottom-right-radius: 3px;
+  border-bottom-left-radius: 3px;
+}
+.panel > .list-group {
+  margin-bottom: 0;
+}
+.panel > .list-group .list-group-item {
+  border-width: 1px 0;
+  border-radius: 0;
+}
+.panel > .list-group:first-child .list-group-item:first-child {
+  border-top: 0;
+  border-top-left-radius: 3px;
+  border-top-right-radius: 3px;
+}
+.panel > .list-group:last-child .list-group-item:last-child {
+  border-bottom: 0;
+  border-bottom-right-radius: 3px;
+  border-bottom-left-radius: 3px;
+}
+.panel-heading + .list-group .list-group-item:first-child {
+  border-top-width: 0;
+}
+.list-group + .panel-footer {
+  border-top-width: 0;
+}
+.panel > .table,
+.panel > .table-responsive > .table,
+.panel > .panel-collapse > .table {
+  margin-bottom: 0;
+}
+.panel > .table:first-child,
+.panel > .table-responsive:first-child > .table:first-child {
+  border-top-left-radius: 3px;
+  border-top-right-radius: 3px;
+}
+.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
+.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
+  border-top-left-radius: 3px;
+}
+.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
+.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
+  border-top-right-radius: 3px;
+}
+.panel > .table:last-child,
+.panel > .table-responsive:last-child > .table:last-child {
+  border-bottom-right-radius: 3px;
+  border-bottom-left-radius: 3px;
+}
+.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
+.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
+  border-bottom-left-radius: 3px;
+}
+.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
+.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
+  border-bottom-right-radius: 3px;
+}
+.panel > .panel-body + .table,
+.panel > .panel-body + .table-responsive {
+  border-top: 1px solid #ddd;
+}
+.panel > .table > tbody:first-child > tr:first-child th,
+.panel > .table > tbody:first-child > tr:first-child td {
+  border-top: 0;
+}
+.panel > .table-bordered,
+.panel > .table-responsive > .table-bordered {
+  border: 0;
+}
+.panel > .table-bordered > thead > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
+.panel > .table-bordered > tbody > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
+.panel > .table-bordered > tfoot > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
+.panel > .table-bordered > thead > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
+.panel > .table-bordered > tbody > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
+.panel > .table-bordered > tfoot > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
+  border-left: 0;
+}
+.panel > .table-bordered > thead > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
+.panel > .table-bordered > tbody > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
+.panel > .table-bordered > tfoot > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
+.panel > .table-bordered > thead > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
+.panel > .table-bordered > tbody > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
+.panel > .table-bordered > tfoot > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
+  border-right: 0;
+}
+.panel > .table-bordered > thead > tr:first-child > td,
+.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
+.panel > .table-bordered > tbody > tr:first-child > td,
+.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
+.panel > .table-bordered > thead > tr:first-child > th,
+.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
+.panel > .table-bordered > tbody > tr:first-child > th,
+.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
+  border-bottom: 0;
+}
+.panel > .table-bordered > tbody > tr:last-child > td,
+.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
+.panel > .table-bordered > tfoot > tr:last-child > td,
+.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
+.panel > .table-bordered > tbody > tr:last-child > th,
+.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
+.panel > .table-bordered > tfoot > tr:last-child > th,
+.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
+  border-bottom: 0;
+}
+.panel > .table-responsive {
+  margin-bottom: 0;
+  border: 0;
+}
+.panel-group {
+  margin-bottom: 20px;
+}
+.panel-group .panel {
+  margin-bottom: 0;
+  border-radius: 4px;
+}
+.panel-group .panel + .panel {
+  margin-top: 5px;
+}
+.panel-group .panel-heading {
+  border-bottom: 0;
+}
+.panel-group .panel-heading + .panel-collapse > .panel-body {
+  border-top: 1px solid #ddd;
+}
+.panel-group .panel-footer {
+  border-top: 0;
+}
+.panel-group .panel-footer + .panel-collapse .panel-body {
+  border-bottom: 1px solid #ddd;
+}
+.panel-default {
+  border-color: #ddd;
+}
+.panel-default > .panel-heading {
+  color: #333;
+  background-color: #f5f5f5;
+  border-color: #ddd;
+}
+.panel-default > .panel-heading + .panel-collapse > .panel-body {
+  border-top-color: #ddd;
+}
+.panel-default > .panel-heading .badge {
+  color: #f5f5f5;
+  background-color: #333;
+}
+.panel-default > .panel-footer + .panel-collapse > .panel-body {
+  border-bottom-color: #ddd;
+}
+.panel-primary {
+  border-color: #428bca;
+}
+.panel-primary > .panel-heading {
+  color: #fff;
+  background-color: #428bca;
+  border-color: #428bca;
+}
+.panel-primary > .panel-heading + .panel-collapse > .panel-body {
+  border-top-color: #428bca;
+}
+.panel-primary > .panel-heading .badge {
+  color: #428bca;
+  background-color: #fff;
+}
+.panel-primary > .panel-footer + .panel-collapse > .panel-body {
+  border-bottom-color: #428bca;
+}
+.panel-success {
+  border-color: #d6e9c6;
+}
+.panel-success > .panel-heading {
+  color: #3c763d;
+  background-color: #dff0d8;
+  border-color: #d6e9c6;
+}
+.panel-success > .panel-heading + .panel-collapse > .panel-body {
+  border-top-color: #d6e9c6;
+}
+.panel-success > .panel-heading .badge {
+  color: #dff0d8;
+  background-color: #3c763d;
+}
+.panel-success > .panel-footer + .panel-collapse > .panel-body {
+  border-bottom-color: #d6e9c6;
+}
+.panel-info {
+  border-color: #bce8f1;
+}
+.panel-info > .panel-heading {
+  color: #31708f;
+  background-color: #d9edf7;
+  border-color: #bce8f1;
+}
+.panel-info > .panel-heading + .panel-collapse > .panel-body {
+  border-top-color: #bce8f1;
+}
+.panel-info > .panel-heading .badge {
+  color: #d9edf7;
+  background-color: #31708f;
+}
+.panel-info > .panel-footer + .panel-collapse > .panel-body {
+  border-bottom-color: #bce8f1;
+}
+.panel-warning {
+  border-color: #faebcc;
+}
+.panel-warning > .panel-heading {
+  color: #8a6d3b;
+  background-color: #fcf8e3;
+  border-color: #faebcc;
+}
+.panel-warning > .panel-heading + .panel-collapse > .panel-body {
+  border-top-color: #faebcc;
+}
+.panel-warning > .panel-heading .badge {
+  color: #fcf8e3;
+  background-color: #8a6d3b;
+}
+.panel-warning > .panel-footer + .panel-collapse > .panel-body {
+  border-bottom-color: #faebcc;
+}
+.panel-danger {
+  border-color: #ebccd1;
+}
+.panel-danger > .panel-heading {
+  color: #a94442;
+  background-color: #f2dede;
+  border-color: #ebccd1;
+}
+.panel-danger > .panel-heading + .panel-collapse > .panel-body {
+  border-top-color: #ebccd1;
+}
+.panel-danger > .panel-heading .badge {
+  color: #f2dede;
+  background-color: #a94442;
+}
+.panel-danger > .panel-footer + .panel-collapse > .panel-body {
+  border-bottom-color: #ebccd1;
+}
+.embed-responsive {
+  position: relative;
+  display: block;
+  height: 0;
+  padding: 0;
+  overflow: hidden;
+}
+.embed-responsive .embed-responsive-item,
+.embed-responsive iframe,
+.embed-responsive embed,
+.embed-responsive object {
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  border: 0;
+}
+.embed-responsive.embed-responsive-16by9 {
+  padding-bottom: 56.25%;
+}
+.embed-responsive.embed-responsive-4by3 {
+  padding-bottom: 75%;
+}
+.well {
+  min-height: 20px;
+  padding: 19px;
+  margin-bottom: 20px;
+  background-color: #f5f5f5;
+  border: 1px solid #e3e3e3;
+  border-radius: 4px;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
+}
+.well blockquote {
+  border-color: #ddd;
+  border-color: rgba(0, 0, 0, .15);
+}
+.well-lg {
+  padding: 24px;
+  border-radius: 6px;
+}
+.well-sm {
+  padding: 9px;
+  border-radius: 3px;
+}
+.close {
+  float: right;
+  font-size: 21px;
+  font-weight: bold;
+  line-height: 1;
+  color: #000;
+  text-shadow: 0 1px 0 #fff;
+  filter: alpha(opacity=20);
+  opacity: .2;
+}
+.close:hover,
+.close:focus {
+  color: #000;
+  text-decoration: none;
+  cursor: pointer;
+  filter: alpha(opacity=50);
+  opacity: .5;
+}
+button.close {
+  -webkit-appearance: none;
+  padding: 0;
+  cursor: pointer;
+  background: transparent;
+  border: 0;
+}
+.modal-open {
+  overflow: hidden;
+}
+.modal {
+  position: fixed;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 1050;
+  display: none;
+  overflow: hidden;
+  -webkit-overflow-scrolling: touch;
+  outline: 0;
+}
+.modal.fade .modal-dialog {
+  -webkit-transition: -webkit-transform .3s ease-out;
+       -o-transition:      -o-transform .3s ease-out;
+          transition:         transform .3s ease-out;
+  -webkit-transform: translate3d(0, -25%, 0);
+       -o-transform: translate3d(0, -25%, 0);
+          transform: translate3d(0, -25%, 0);
+}
+.modal.in .modal-dialog {
+  -webkit-transform: translate3d(0, 0, 0);
+       -o-transform: translate3d(0, 0, 0);
+          transform: translate3d(0, 0, 0);
+}
+.modal-open .modal {
+  overflow-x: hidden;
+  overflow-y: auto;
+}
+.modal-dialog {
+  position: relative;
+  width: auto;
+  margin: 10px;
+}
+.modal-content {
+  position: relative;
+  background-color: #fff;
+  -webkit-background-clip: padding-box;
+          background-clip: padding-box;
+  border: 1px solid #999;
+  border: 1px solid rgba(0, 0, 0, .2);
+  border-radius: 6px;
+  outline: 0;
+  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
+          box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
+}
+.modal-backdrop {
+  position: fixed;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 1040;
+  background-color: #000;
+}
+.modal-backdrop.fade {
+  filter: alpha(opacity=0);
+  opacity: 0;
+}
+.modal-backdrop.in {
+  filter: alpha(opacity=50);
+  opacity: .5;
+}
+.modal-header {
+  min-height: 16.42857143px;
+  padding: 15px;
+  border-bottom: 1px solid #e5e5e5;
+}
+.modal-header .close {
+  margin-top: -2px;
+}
+.modal-title {
+  margin: 0;
+  line-height: 1.42857143;
+}
+.modal-body {
+  position: relative;
+  padding: 15px;
+}
+.modal-footer {
+  padding: 15px;
+  text-align: right;
+  border-top: 1px solid #e5e5e5;
+}
+.modal-footer .btn + .btn {
+  margin-bottom: 0;
+  margin-left: 5px;
+}
+.modal-footer .btn-group .btn + .btn {
+  margin-left: -1px;
+}
+.modal-footer .btn-block + .btn-block {
+  margin-left: 0;
+}
+.modal-scrollbar-measure {
+  position: absolute;
+  top: -9999px;
+  width: 50px;
+  height: 50px;
+  overflow: scroll;
+}
+@media (min-width: 768px) {
+  .modal-dialog {
+    width: 600px;
+    margin: 30px auto;
+  }
+  .modal-content {
+    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
+            box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
+  }
+  .modal-sm {
+    width: 300px;
+  }
+}
+@media (min-width: 992px) {
+  .modal-lg {
+    width: 900px;
+  }
+}
+.tooltip {
+  position: absolute;
+  z-index: 1070;
+  display: block;
+  font-size: 12px;
+  line-height: 1.4;
+  visibility: visible;
+  filter: alpha(opacity=0);
+  opacity: 0;
+}
+.tooltip.in {
+  filter: alpha(opacity=90);
+  opacity: .9;
+}
+.tooltip.top {
+  padding: 5px 0;
+  margin-top: -3px;
+}
+.tooltip.right {
+  padding: 0 5px;
+  margin-left: 3px;
+}
+.tooltip.bottom {
+  padding: 5px 0;
+  margin-top: 3px;
+}
+.tooltip.left {
+  padding: 0 5px;
+  margin-left: -3px;
+}
+.tooltip-inner {
+  max-width: 200px;
+  padding: 3px 8px;
+  color: #fff;
+  text-align: center;
+  text-decoration: none;
+  background-color: #000;
+  border-radius: 4px;
+}
+.tooltip-arrow {
+  position: absolute;
+  width: 0;
+  height: 0;
+  border-color: transparent;
+  border-style: solid;
+}
+.tooltip.top .tooltip-arrow {
+  bottom: 0;
+  left: 50%;
+  margin-left: -5px;
+  border-width: 5px 5px 0;
+  border-top-color: #000;
+}
+.tooltip.top-left .tooltip-arrow {
+  bottom: 0;
+  left: 5px;
+  border-width: 5px 5px 0;
+  border-top-color: #000;
+}
+.tooltip.top-right .tooltip-arrow {
+  right: 5px;
+  bottom: 0;
+  border-width: 5px 5px 0;
+  border-top-color: #000;
+}
+.tooltip.right .tooltip-arrow {
+  top: 50%;
+  left: 0;
+  margin-top: -5px;
+  border-width: 5px 5px 5px 0;
+  border-right-color: #000;
+}
+.tooltip.left .tooltip-arrow {
+  top: 50%;
+  right: 0;
+  margin-top: -5px;
+  border-width: 5px 0 5px 5px;
+  border-left-color: #000;
+}
+.tooltip.bottom .tooltip-arrow {
+  top: 0;
+  left: 50%;
+  margin-left: -5px;
+  border-width: 0 5px 5px;
+  border-bottom-color: #000;
+}
+.tooltip.bottom-left .tooltip-arrow {
+  top: 0;
+  left: 5px;
+  border-width: 0 5px 5px;
+  border-bottom-color: #000;
+}
+.tooltip.bottom-right .tooltip-arrow {
+  top: 0;
+  right: 5px;
+  border-width: 0 5px 5px;
+  border-bottom-color: #000;
+}
+.popover {
+  position: absolute;
+  top: 0;
+  left: 0;
+  z-index: 1060;
+  display: none;
+  max-width: 276px;
+  padding: 1px;
+  text-align: left;
+  white-space: normal;
+  background-color: #fff;
+  -webkit-background-clip: padding-box;
+          background-clip: padding-box;
+  border: 1px solid #ccc;
+  border: 1px solid rgba(0, 0, 0, .2);
+  border-radius: 6px;
+  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
+          box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
+}
+.popover.top {
+  margin-top: -10px;
+}
+.popover.right {
+  margin-left: 10px;
+}
+.popover.bottom {
+  margin-top: 10px;
+}
+.popover.left {
+  margin-left: -10px;
+}
+.popover-title {
+  padding: 8px 14px;
+  margin: 0;
+  font-size: 14px;
+  font-weight: normal;
+  line-height: 18px;
+  background-color: #f7f7f7;
+  border-bottom: 1px solid #ebebeb;
+  border-radius: 5px 5px 0 0;
+}
+.popover-content {
+  padding: 9px 14px;
+}
+.popover > .arrow,
+.popover > .arrow:after {
+  position: absolute;
+  display: block;
+  width: 0;
+  height: 0;
+  border-color: transparent;
+  border-style: solid;
+}
+.popover > .arrow {
+  border-width: 11px;
+}
+.popover > .arrow:after {
+  content: "";
+  border-width: 10px;
+}
+.popover.top > .arrow {
+  bottom: -11px;
+  left: 50%;
+  margin-left: -11px;
+  border-top-color: #999;
+  border-top-color: rgba(0, 0, 0, .25);
+  border-bottom-width: 0;
+}
+.popover.top > .arrow:after {
+  bottom: 1px;
+  margin-left: -10px;
+  content: " ";
+  border-top-color: #fff;
+  border-bottom-width: 0;
+}
+.popover.right > .arrow {
+  top: 50%;
+  left: -11px;
+  margin-top: -11px;
+  border-right-color: #999;
+  border-right-color: rgba(0, 0, 0, .25);
+  border-left-width: 0;
+}
+.popover.right > .arrow:after {
+  bottom: -10px;
+  left: 1px;
+  content: " ";
+  border-right-color: #fff;
+  border-left-width: 0;
+}
+.popover.bottom > .arrow {
+  top: -11px;
+  left: 50%;
+  margin-left: -11px;
+  border-top-width: 0;
+  border-bottom-color: #999;
+  border-bottom-color: rgba(0, 0, 0, .25);
+}
+.popover.bottom > .arrow:after {
+  top: 1px;
+  margin-left: -10px;
+  content: " ";
+  border-top-width: 0;
+  border-bottom-color: #fff;
+}
+.popover.left > .arrow {
+  top: 50%;
+  right: -11px;
+  margin-top: -11px;
+  border-right-width: 0;
+  border-left-color: #999;
+  border-left-color: rgba(0, 0, 0, .25);
+}
+.popover.left > .arrow:after {
+  right: 1px;
+  bottom: -10px;
+  content: " ";
+  border-right-width: 0;
+  border-left-color: #fff;
+}
+.carousel {
+  position: relative;
+}
+.carousel-inner {
+  position: relative;
+  width: 100%;
+  overflow: hidden;
+}
+.carousel-inner > .item {
+  position: relative;
+  display: none;
+  -webkit-transition: .6s ease-in-out left;
+       -o-transition: .6s ease-in-out left;
+          transition: .6s ease-in-out left;
+}
+.carousel-inner > .item > img,
+.carousel-inner > .item > a > img {
+  line-height: 1;
+}
+.carousel-inner > .active,
+.carousel-inner > .next,
+.carousel-inner > .prev {
+  display: block;
+}
+.carousel-inner > .active {
+  left: 0;
+}
+.carousel-inner > .next,
+.carousel-inner > .prev {
+  position: absolute;
+  top: 0;
+  width: 100%;
+}
+.carousel-inner > .next {
+  left: 100%;
+}
+.carousel-inner > .prev {
+  left: -100%;
+}
+.carousel-inner > .next.left,
+.carousel-inner > .prev.right {
+  left: 0;
+}
+.carousel-inner > .active.left {
+  left: -100%;
+}
+.carousel-inner > .active.right {
+  left: 100%;
+}
+.carousel-control {
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  left: 0;
+  width: 15%;
+  font-size: 20px;
+  color: #fff;
+  text-align: center;
+  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
+  filter: alpha(opacity=50);
+  opacity: .5;
+}
+.carousel-control.left {
+  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
+  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
+  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));
+  background-image:         linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
+  background-repeat: repeat-x;
+}
+.carousel-control.right {
+  right: 0;
+  left: auto;
+  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
+  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
+  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));
+  background-image:         linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
+  background-repeat: repeat-x;
+}
+.carousel-control:hover,
+.carousel-control:focus {
+  color: #fff;
+  text-decoration: none;
+  filter: alpha(opacity=90);
+  outline: 0;
+  opacity: .9;
+}
+.carousel-control .icon-prev,
+.carousel-control .icon-next,
+.carousel-control .glyphicon-chevron-left,
+.carousel-control .glyphicon-chevron-right {
+  position: absolute;
+  top: 50%;
+  z-index: 5;
+  display: inline-block;
+}
+.carousel-control .icon-prev,
+.carousel-control .glyphicon-chevron-left {
+  left: 50%;
+  margin-left: -10px;
+}
+.carousel-control .icon-next,
+.carousel-control .glyphicon-chevron-right {
+  right: 50%;
+  margin-right: -10px;
+}
+.carousel-control .icon-prev,
+.carousel-control .icon-next {
+  width: 20px;
+  height: 20px;
+  margin-top: -10px;
+  font-family: serif;
+}
+.carousel-control .icon-prev:before {
+  content: '\2039';
+}
+.carousel-control .icon-next:before {
+  content: '\203a';
+}
+.carousel-indicators {
+  position: absolute;
+  bottom: 10px;
+  left: 50%;
+  z-index: 15;
+  width: 60%;
+  padding-left: 0;
+  margin-left: -30%;
+  text-align: center;
+  list-style: none;
+}
+.carousel-indicators li {
+  display: inline-block;
+  width: 10px;
+  height: 10px;
+  margin: 1px;
+  text-indent: -999px;
+  cursor: pointer;
+  background-color: #000 \9;
+  background-color: rgba(0, 0, 0, 0);
+  border: 1px solid #fff;
+  border-radius: 10px;
+}
+.carousel-indicators .active {
+  width: 12px;
+  height: 12px;
+  margin: 0;
+  background-color: #fff;
+}
+.carousel-caption {
+  position: absolute;
+  right: 15%;
+  bottom: 20px;
+  left: 15%;
+  z-index: 10;
+  padding-top: 20px;
+  padding-bottom: 20px;
+  color: #fff;
+  text-align: center;
+  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
+}
+.carousel-caption .btn {
+  text-shadow: none;
+}
+@media screen and (min-width: 768px) {
+  .carousel-control .glyphicon-chevron-left,
+  .carousel-control .glyphicon-chevron-right,
+  .carousel-control .icon-prev,
+  .carousel-control .icon-next {
+    width: 30px;
+    height: 30px;
+    margin-top: -15px;
+    font-size: 30px;
+  }
+  .carousel-control .glyphicon-chevron-left,
+  .carousel-control .icon-prev {
+    margin-left: -15px;
+  }
+  .carousel-control .glyphicon-chevron-right,
+  .carousel-control .icon-next {
+    margin-right: -15px;
+  }
+  .carousel-caption {
+    right: 20%;
+    left: 20%;
+    padding-bottom: 30px;
+  }
+  .carousel-indicators {
+    bottom: 20px;
+  }
+}
+.clearfix:before,
+.clearfix:after,
+.dl-horizontal dd:before,
+.dl-horizontal dd:after,
+.container:before,
+.container:after,
+.container-fluid:before,
+.container-fluid:after,
+.row:before,
+.row:after,
+.form-horizontal .form-group:before,
+.form-horizontal .form-group:after,
+.btn-toolbar:before,
+.btn-toolbar:after,
+.btn-group-vertical > .btn-group:before,
+.btn-group-vertical > .btn-group:after,
+.nav:before,
+.nav:after,
+.navbar:before,
+.navbar:after,
+.navbar-header:before,
+.navbar-header:after,
+.navbar-collapse:before,
+.navbar-collapse:after,
+.pager:before,
+.pager:after,
+.panel-body:before,
+.panel-body:after,
+.modal-footer:before,
+.modal-footer:after {
+  display: table;
+  content: " ";
+}
+.clearfix:after,
+.dl-horizontal dd:after,
+.container:after,
+.container-fluid:after,
+.row:after,
+.form-horizontal .form-group:after,
+.btn-toolbar:after,
+.btn-group-vertical > .btn-group:after,
+.nav:after,
+.navbar:after,
+.navbar-header:after,
+.navbar-collapse:after,
+.pager:after,
+.panel-body:after,
+.modal-footer:after {
+  clear: both;
+}
+.center-block {
+  display: block;
+  margin-right: auto;
+  margin-left: auto;
+}
+.pull-right {
+  float: right !important;
+}
+.pull-left {
+  float: left !important;
+}
+.hide {
+  display: none !important;
+}
+.show {
+  display: block !important;
+}
+.invisible {
+  visibility: hidden;
+}
+.text-hide {
+  font: 0/0 a;
+  color: transparent;
+  text-shadow: none;
+  background-color: transparent;
+  border: 0;
+}
+.hidden {
+  display: none !important;
+  visibility: hidden !important;
+}
+.affix {
+  position: fixed;
+  -webkit-transform: translate3d(0, 0, 0);
+       -o-transform: translate3d(0, 0, 0);
+          transform: translate3d(0, 0, 0);
+}
+@-ms-viewport {
+  width: device-width;
+}
+.visible-xs,
+.visible-sm,
+.visible-md,
+.visible-lg {
+  display: none !important;
+}
+.visible-xs-block,
+.visible-xs-inline,
+.visible-xs-inline-block,
+.visible-sm-block,
... 31650 lines suppressed ...