You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zeppelin.apache.org by jo...@apache.org on 2026/07/01 15:10:23 UTC

(zeppelin-site) branch asf-site updated: Remove external resource loads from site docs (#73)

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

jongyoul pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/zeppelin-site.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new f77d66cf3 Remove external resource loads from site docs (#73)
f77d66cf3 is described below

commit f77d66cf3e6f0cbc558f6255ae459492b6f9766c
Author: Jongyoul Lee <jo...@gmail.com>
AuthorDate: Thu Jul 2 00:10:18 2026 +0900

    Remove external resource loads from site docs (#73)
---
 _includes/themes/zeppelin/default.html             |   17 +-
 assets/themes/fonts/fontawesome-webfont.woff2      |  Bin 0 -> 77160 bytes
 assets/themes/fonts/material-icons.ttf             |  Bin 0 -> 356840 bytes
 assets/themes/zeppelin/angular.min.js              |  251 +
 .../themes/zeppelin/css/fonts/PatuaOne-Regular.ttf |  Bin 0 -> 33876 bytes
 assets/themes/zeppelin/css/style.css               |   10 +-
 assets/themes/zeppelin/font-awesome.min.css        |    4 +
 assets/themes/zeppelin/icon.css                    |   20 +
 assets/themes/zeppelin/jquery-1.10.2.min.js        |    6 +
 assets/themes/zeppelin/js/medium.controller.js     |    8 +-
 assets/themes/zeppelin/ui-bootstrap-tpls-2.5.0.js  | 7776 ++++++++++++++++++++
 docs/0.10.0/assets/jquery-1.10.2.min.js            |    6 +
 .../assets/themes/fonts/fontawesome-webfont.eot    |  Bin 0 -> 56006 bytes
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 .../assets/themes/fonts/fontawesome-webfont.ttf    |  Bin 0 -> 112160 bytes
 .../assets/themes/fonts/fontawesome-webfont.woff   |  Bin 0 -> 65452 bytes
 docs/0.10.0/assets/themes/zeppelin/css/style.css   |    2 -
 .../assets/themes/zeppelin/font-awesome.min.css    |    4 +
 .../contribution/how_to_contribute_code.html       |   10 +-
 .../contribution/how_to_contribute_website.html    |   10 +-
 .../contribution/useful_developer_tools.html       |   10 +-
 docs/0.10.0/development/helium/overview.html       |   10 +-
 .../development/helium/writing_application.html    |   10 +-
 docs/0.10.0/development/helium/writing_spell.html  |   10 +-
 .../helium/writing_visualization_basic.html        |   10 +-
 .../writing_visualization_transformation.html      |   10 +-
 .../development/writing_zeppelin_interpreter.html  |   10 +-
 docs/0.10.0/index.html                             |   10 +-
 docs/0.10.0/interpreter/alluxio.html               |   10 +-
 docs/0.10.0/interpreter/beam.html                  |   10 +-
 docs/0.10.0/interpreter/bigquery.html              |   10 +-
 docs/0.10.0/interpreter/cassandra.html             |   10 +-
 docs/0.10.0/interpreter/elasticsearch.html         |   10 +-
 docs/0.10.0/interpreter/flink.html                 |   10 +-
 docs/0.10.0/interpreter/geode.html                 |   12 +-
 docs/0.10.0/interpreter/groovy.html                |   10 +-
 docs/0.10.0/interpreter/hazelcastjet.html          |   10 +-
 docs/0.10.0/interpreter/hbase.html                 |   10 +-
 docs/0.10.0/interpreter/hdfs.html                  |   10 +-
 docs/0.10.0/interpreter/hive.html                  |   10 +-
 docs/0.10.0/interpreter/ignite.html                |   10 +-
 docs/0.10.0/interpreter/influxdb.html              |   10 +-
 docs/0.10.0/interpreter/java.html                  |   10 +-
 docs/0.10.0/interpreter/jdbc.html                  |   10 +-
 docs/0.10.0/interpreter/jupyter.html               |   10 +-
 docs/0.10.0/interpreter/kotlin.html                |   10 +-
 docs/0.10.0/interpreter/ksql.html                  |   10 +-
 docs/0.10.0/interpreter/kylin.html                 |   10 +-
 docs/0.10.0/interpreter/lens.html                  |   10 +-
 docs/0.10.0/interpreter/livy.html                  |   10 +-
 docs/0.10.0/interpreter/mahout.html                |   10 +-
 docs/0.10.0/interpreter/markdown.html              |   10 +-
 docs/0.10.0/interpreter/mongodb.html               |   10 +-
 docs/0.10.0/interpreter/neo4j.html                 |   10 +-
 docs/0.10.0/interpreter/pig.html                   |   10 +-
 docs/0.10.0/interpreter/postgresql.html            |   10 +-
 docs/0.10.0/interpreter/python.html                |   10 +-
 docs/0.10.0/interpreter/r.html                     |   10 +-
 docs/0.10.0/interpreter/sap.html                   |   10 +-
 docs/0.10.0/interpreter/scalding.html              |   10 +-
 docs/0.10.0/interpreter/scio.html                  |   10 +-
 docs/0.10.0/interpreter/shell.html                 |   10 +-
 docs/0.10.0/interpreter/spark.html                 |   10 +-
 docs/0.10.0/interpreter/sparql.html                |   10 +-
 docs/0.10.0/interpreter/submarine.html             |   10 +-
 docs/0.10.0/pleasecontribute.html                  |   10 +-
 docs/0.10.0/quickstart/docker.html                 |   10 +-
 docs/0.10.0/quickstart/explore_ui.html             |   10 +-
 docs/0.10.0/quickstart/flink_with_zeppelin.html    |   10 +-
 docs/0.10.0/quickstart/install.html                |   10 +-
 docs/0.10.0/quickstart/kubernetes.html             |   10 +-
 docs/0.10.0/quickstart/python_with_zeppelin.html   |   10 +-
 docs/0.10.0/quickstart/r_with_zeppelin.html        |   10 +-
 docs/0.10.0/quickstart/spark_with_zeppelin.html    |   10 +-
 docs/0.10.0/quickstart/sql_with_zeppelin.html      |   10 +-
 docs/0.10.0/quickstart/tutorial.html               |   10 +-
 docs/0.10.0/quickstart/yarn.html                   |   10 +-
 docs/0.10.0/screenshots.html                       |   10 +-
 docs/0.10.0/search.html                            |   10 +-
 docs/0.10.0/setup/basics/hadoop_integration.html   |   10 +-
 docs/0.10.0/setup/basics/how_to_build.html         |   11 +-
 docs/0.10.0/setup/basics/multi_user_support.html   |   10 +-
 docs/0.10.0/setup/basics/systemd.html              |   10 +-
 docs/0.10.0/setup/deployment/cdh.html              |   10 +-
 docs/0.10.0/setup/deployment/docker.html           |   10 +-
 .../setup/deployment/flink_and_spark_cluster.html  |   10 +-
 .../setup/deployment/spark_cluster_mode.html       |   10 +-
 docs/0.10.0/setup/deployment/virtual_machine.html  |   10 +-
 docs/0.10.0/setup/deployment/yarn_install.html     |   10 +-
 docs/0.10.0/setup/operation/configuration.html     |   10 +-
 docs/0.10.0/setup/operation/monitoring.html        |   10 +-
 docs/0.10.0/setup/operation/proxy_setting.html     |   10 +-
 docs/0.10.0/setup/operation/trouble_shooting.html  |   10 +-
 docs/0.10.0/setup/operation/upgrading.html         |   10 +-
 .../setup/security/authentication_nginx.html       |   10 +-
 .../setup/security/datasource_authorization.html   |   10 +-
 .../setup/security/http_security_headers.html      |   10 +-
 .../setup/security/notebook_authorization.html     |   10 +-
 .../setup/security/shiro_authentication.html       |   10 +-
 docs/0.10.0/setup/storage/storage.html             |   10 +-
 .../usage/display_system/angular_backend.html      |   10 +-
 .../usage/display_system/angular_frontend.html     |   10 +-
 docs/0.10.0/usage/display_system/basic.html        |   14 +-
 docs/0.10.0/usage/dynamic_form/intro.html          |   10 +-
 .../usage/interpreter/dependency_management.html   |   10 +-
 docs/0.10.0/usage/interpreter/dynamic_loading.html |   10 +-
 docs/0.10.0/usage/interpreter/execution_hooks.html |   10 +-
 docs/0.10.0/usage/interpreter/installation.html    |   10 +-
 .../interpreter/interpreter_binding_mode.html      |   10 +-
 docs/0.10.0/usage/interpreter/overview.html        |   10 +-
 .../usage/interpreter/user_impersonation.html      |   10 +-
 .../usage/other_features/cron_scheduler.html       |   10 +-
 .../usage/other_features/customizing_homepage.html |   10 +-
 .../usage/other_features/notebook_actions.html     |   10 +-
 .../usage/other_features/personalized_mode.html    |   10 +-
 .../other_features/publishing_paragraphs.html      |   10 +-
 .../usage/other_features/zeppelin_context.html     |   10 +-
 docs/0.10.0/usage/rest_api/configuration.html      |   10 +-
 docs/0.10.0/usage/rest_api/credential.html         |   10 +-
 docs/0.10.0/usage/rest_api/helium.html             |   10 +-
 docs/0.10.0/usage/rest_api/interpreter.html        |   10 +-
 docs/0.10.0/usage/rest_api/notebook.html           |   10 +-
 .../0.10.0/usage/rest_api/notebook_repository.html |   10 +-
 docs/0.10.0/usage/rest_api/zeppelin_server.html    |   10 +-
 docs/0.10.0/usage/zeppelin_sdk/client_api.html     |   10 +-
 docs/0.10.0/usage/zeppelin_sdk/session_api.html    |   10 +-
 docs/0.10.1/assets/jquery-1.10.2.min.js            |    6 +
 .../assets/themes/fonts/fontawesome-webfont.eot    |  Bin 0 -> 56006 bytes
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 .../assets/themes/fonts/fontawesome-webfont.ttf    |  Bin 0 -> 112160 bytes
 .../assets/themes/fonts/fontawesome-webfont.woff   |  Bin 0 -> 65452 bytes
 docs/0.10.1/assets/themes/zeppelin/css/style.css   |    2 -
 .../assets/themes/zeppelin/font-awesome.min.css    |    4 +
 .../contribution/how_to_contribute_code.html       |   10 +-
 .../contribution/how_to_contribute_website.html    |   10 +-
 .../contribution/useful_developer_tools.html       |   10 +-
 docs/0.10.1/development/helium/overview.html       |   10 +-
 .../development/helium/writing_application.html    |   10 +-
 docs/0.10.1/development/helium/writing_spell.html  |   10 +-
 .../helium/writing_visualization_basic.html        |   10 +-
 .../writing_visualization_transformation.html      |   10 +-
 .../development/writing_zeppelin_interpreter.html  |   10 +-
 docs/0.10.1/index.html                             |   10 +-
 docs/0.10.1/interpreter/alluxio.html               |   10 +-
 docs/0.10.1/interpreter/beam.html                  |   10 +-
 docs/0.10.1/interpreter/bigquery.html              |   10 +-
 docs/0.10.1/interpreter/cassandra.html             |   10 +-
 docs/0.10.1/interpreter/elasticsearch.html         |   10 +-
 docs/0.10.1/interpreter/flink.html                 |   10 +-
 docs/0.10.1/interpreter/geode.html                 |   12 +-
 docs/0.10.1/interpreter/groovy.html                |   10 +-
 docs/0.10.1/interpreter/hazelcastjet.html          |   10 +-
 docs/0.10.1/interpreter/hbase.html                 |   10 +-
 docs/0.10.1/interpreter/hdfs.html                  |   10 +-
 docs/0.10.1/interpreter/hive.html                  |   10 +-
 docs/0.10.1/interpreter/ignite.html                |   10 +-
 docs/0.10.1/interpreter/influxdb.html              |   10 +-
 docs/0.10.1/interpreter/java.html                  |   10 +-
 docs/0.10.1/interpreter/jdbc.html                  |   10 +-
 docs/0.10.1/interpreter/jupyter.html               |   10 +-
 docs/0.10.1/interpreter/kotlin.html                |   10 +-
 docs/0.10.1/interpreter/ksql.html                  |   10 +-
 docs/0.10.1/interpreter/kylin.html                 |   10 +-
 docs/0.10.1/interpreter/lens.html                  |   10 +-
 docs/0.10.1/interpreter/livy.html                  |   10 +-
 docs/0.10.1/interpreter/mahout.html                |   10 +-
 docs/0.10.1/interpreter/markdown.html              |   10 +-
 docs/0.10.1/interpreter/mongodb.html               |   10 +-
 docs/0.10.1/interpreter/neo4j.html                 |   10 +-
 docs/0.10.1/interpreter/pig.html                   |   10 +-
 docs/0.10.1/interpreter/postgresql.html            |   10 +-
 docs/0.10.1/interpreter/python.html                |   10 +-
 docs/0.10.1/interpreter/r.html                     |   10 +-
 docs/0.10.1/interpreter/sap.html                   |   10 +-
 docs/0.10.1/interpreter/scalding.html              |   10 +-
 docs/0.10.1/interpreter/scio.html                  |   10 +-
 docs/0.10.1/interpreter/shell.html                 |   10 +-
 docs/0.10.1/interpreter/spark.html                 |   10 +-
 docs/0.10.1/interpreter/sparql.html                |   10 +-
 docs/0.10.1/interpreter/submarine.html             |   10 +-
 docs/0.10.1/pleasecontribute.html                  |   10 +-
 docs/0.10.1/quickstart/docker.html                 |   10 +-
 docs/0.10.1/quickstart/explore_ui.html             |   10 +-
 docs/0.10.1/quickstart/flink_with_zeppelin.html    |   10 +-
 docs/0.10.1/quickstart/install.html                |   10 +-
 docs/0.10.1/quickstart/kubernetes.html             |   10 +-
 docs/0.10.1/quickstart/python_with_zeppelin.html   |   10 +-
 docs/0.10.1/quickstart/r_with_zeppelin.html        |   10 +-
 docs/0.10.1/quickstart/spark_with_zeppelin.html    |   10 +-
 docs/0.10.1/quickstart/sql_with_zeppelin.html      |   10 +-
 docs/0.10.1/quickstart/tutorial.html               |   10 +-
 docs/0.10.1/quickstart/yarn.html                   |   10 +-
 docs/0.10.1/screenshots.html                       |   10 +-
 docs/0.10.1/search.html                            |   10 +-
 docs/0.10.1/setup/basics/hadoop_integration.html   |   10 +-
 docs/0.10.1/setup/basics/how_to_build.html         |   11 +-
 docs/0.10.1/setup/basics/multi_user_support.html   |   10 +-
 docs/0.10.1/setup/basics/systemd.html              |   10 +-
 docs/0.10.1/setup/deployment/cdh.html              |   10 +-
 docs/0.10.1/setup/deployment/docker.html           |   10 +-
 .../setup/deployment/flink_and_spark_cluster.html  |   10 +-
 .../setup/deployment/spark_cluster_mode.html       |   10 +-
 docs/0.10.1/setup/deployment/virtual_machine.html  |   10 +-
 docs/0.10.1/setup/deployment/yarn_install.html     |   10 +-
 docs/0.10.1/setup/operation/configuration.html     |   10 +-
 docs/0.10.1/setup/operation/monitoring.html        |   10 +-
 docs/0.10.1/setup/operation/proxy_setting.html     |   10 +-
 docs/0.10.1/setup/operation/trouble_shooting.html  |   10 +-
 docs/0.10.1/setup/operation/upgrading.html         |   10 +-
 .../setup/security/authentication_nginx.html       |   10 +-
 .../setup/security/datasource_authorization.html   |   10 +-
 .../setup/security/http_security_headers.html      |   10 +-
 .../setup/security/notebook_authorization.html     |   10 +-
 .../setup/security/shiro_authentication.html       |   10 +-
 docs/0.10.1/setup/storage/storage.html             |   10 +-
 .../usage/display_system/angular_backend.html      |   10 +-
 .../usage/display_system/angular_frontend.html     |   10 +-
 docs/0.10.1/usage/display_system/basic.html        |   14 +-
 docs/0.10.1/usage/dynamic_form/intro.html          |   10 +-
 .../usage/interpreter/dependency_management.html   |   10 +-
 docs/0.10.1/usage/interpreter/dynamic_loading.html |   10 +-
 docs/0.10.1/usage/interpreter/execution_hooks.html |   10 +-
 docs/0.10.1/usage/interpreter/installation.html    |   10 +-
 .../interpreter/interpreter_binding_mode.html      |   10 +-
 docs/0.10.1/usage/interpreter/overview.html        |   10 +-
 .../usage/interpreter/user_impersonation.html      |   10 +-
 .../usage/other_features/cron_scheduler.html       |   10 +-
 .../usage/other_features/customizing_homepage.html |   10 +-
 .../usage/other_features/notebook_actions.html     |   10 +-
 .../usage/other_features/personalized_mode.html    |   10 +-
 .../other_features/publishing_paragraphs.html      |   10 +-
 .../usage/other_features/zeppelin_context.html     |   10 +-
 docs/0.10.1/usage/rest_api/configuration.html      |   10 +-
 docs/0.10.1/usage/rest_api/credential.html         |   10 +-
 docs/0.10.1/usage/rest_api/helium.html             |   10 +-
 docs/0.10.1/usage/rest_api/interpreter.html        |   10 +-
 docs/0.10.1/usage/rest_api/notebook.html           |   10 +-
 .../0.10.1/usage/rest_api/notebook_repository.html |   10 +-
 docs/0.10.1/usage/rest_api/zeppelin_server.html    |   10 +-
 docs/0.10.1/usage/zeppelin_sdk/client_api.html     |   10 +-
 docs/0.10.1/usage/zeppelin_sdk/session_api.html    |   10 +-
 docs/0.11.0/assets/jquery-1.10.2.min.js            |    6 +
 .../assets/themes/fonts/fontawesome-webfont.eot    |  Bin 0 -> 56006 bytes
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 .../assets/themes/fonts/fontawesome-webfont.ttf    |  Bin 0 -> 112160 bytes
 .../assets/themes/fonts/fontawesome-webfont.woff   |  Bin 0 -> 65452 bytes
 docs/0.11.0/assets/themes/zeppelin/css/style.css   |    2 -
 .../assets/themes/zeppelin/font-awesome.min.css    |    4 +
 .../contribution/how_to_contribute_code.html       |   10 +-
 .../contribution/how_to_contribute_website.html    |   10 +-
 .../contribution/useful_developer_tools.html       |   10 +-
 docs/0.11.0/development/helium/overview.html       |   10 +-
 .../development/helium/writing_application.html    |   10 +-
 docs/0.11.0/development/helium/writing_spell.html  |   10 +-
 .../helium/writing_visualization_basic.html        |   10 +-
 .../writing_visualization_transformation.html      |   10 +-
 .../development/writing_zeppelin_interpreter.html  |   10 +-
 docs/0.11.0/index.html                             |   10 +-
 docs/0.11.0/interpreter/alluxio.html               |   10 +-
 docs/0.11.0/interpreter/bigquery.html              |   10 +-
 docs/0.11.0/interpreter/cassandra.html             |   10 +-
 docs/0.11.0/interpreter/elasticsearch.html         |   10 +-
 docs/0.11.0/interpreter/flink.html                 |   10 +-
 docs/0.11.0/interpreter/groovy.html                |   10 +-
 docs/0.11.0/interpreter/hbase.html                 |   10 +-
 docs/0.11.0/interpreter/hdfs.html                  |   10 +-
 docs/0.11.0/interpreter/hive.html                  |   10 +-
 docs/0.11.0/interpreter/influxdb.html              |   10 +-
 docs/0.11.0/interpreter/java.html                  |   10 +-
 docs/0.11.0/interpreter/jdbc.html                  |   10 +-
 docs/0.11.0/interpreter/jupyter.html               |   10 +-
 docs/0.11.0/interpreter/livy.html                  |   10 +-
 docs/0.11.0/interpreter/mahout.html                |   10 +-
 docs/0.11.0/interpreter/markdown.html              |   10 +-
 docs/0.11.0/interpreter/mongodb.html               |   10 +-
 docs/0.11.0/interpreter/neo4j.html                 |   10 +-
 docs/0.11.0/interpreter/postgresql.html            |   10 +-
 docs/0.11.0/interpreter/python.html                |   10 +-
 docs/0.11.0/interpreter/r.html                     |   10 +-
 docs/0.11.0/interpreter/shell.html                 |   10 +-
 docs/0.11.0/interpreter/spark.html                 |   10 +-
 docs/0.11.0/interpreter/sparql.html                |   10 +-
 docs/0.11.0/interpreter/submarine.html             |   10 +-
 docs/0.11.0/pleasecontribute.html                  |   10 +-
 docs/0.11.0/quickstart/docker.html                 |   10 +-
 docs/0.11.0/quickstart/explore_ui.html             |   10 +-
 docs/0.11.0/quickstart/flink_with_zeppelin.html    |   10 +-
 docs/0.11.0/quickstart/install.html                |   10 +-
 docs/0.11.0/quickstart/kubernetes.html             |   10 +-
 docs/0.11.0/quickstart/python_with_zeppelin.html   |   10 +-
 docs/0.11.0/quickstart/r_with_zeppelin.html        |   10 +-
 docs/0.11.0/quickstart/spark_with_zeppelin.html    |   10 +-
 docs/0.11.0/quickstart/sql_with_zeppelin.html      |   10 +-
 docs/0.11.0/quickstart/tutorial.html               |   10 +-
 docs/0.11.0/quickstart/yarn.html                   |   10 +-
 docs/0.11.0/screenshots.html                       |   10 +-
 docs/0.11.0/search.html                            |   10 +-
 docs/0.11.0/setup/basics/hadoop_integration.html   |   10 +-
 docs/0.11.0/setup/basics/how_to_build.html         |   11 +-
 docs/0.11.0/setup/basics/multi_user_support.html   |   10 +-
 docs/0.11.0/setup/basics/systemd.html              |   10 +-
 docs/0.11.0/setup/deployment/cdh.html              |   10 +-
 docs/0.11.0/setup/deployment/docker.html           |   10 +-
 .../setup/deployment/flink_and_spark_cluster.html  |   10 +-
 .../setup/deployment/spark_cluster_mode.html       |   10 +-
 docs/0.11.0/setup/deployment/virtual_machine.html  |   10 +-
 docs/0.11.0/setup/deployment/yarn_install.html     |   10 +-
 docs/0.11.0/setup/operation/configuration.html     |   10 +-
 docs/0.11.0/setup/operation/monitoring.html        |   10 +-
 docs/0.11.0/setup/operation/proxy_setting.html     |   10 +-
 docs/0.11.0/setup/operation/trouble_shooting.html  |   10 +-
 docs/0.11.0/setup/operation/upgrading.html         |   10 +-
 .../setup/security/authentication_nginx.html       |   10 +-
 .../setup/security/datasource_authorization.html   |   10 +-
 .../setup/security/http_security_headers.html      |   10 +-
 .../setup/security/notebook_authorization.html     |   10 +-
 .../setup/security/shiro_authentication.html       |   10 +-
 .../setup/storage/configuration_storage.html       |   10 +-
 docs/0.11.0/setup/storage/notebook_storage.html    |   10 +-
 .../usage/display_system/angular_backend.html      |   10 +-
 .../usage/display_system/angular_frontend.html     |   10 +-
 docs/0.11.0/usage/display_system/basic.html        |   14 +-
 docs/0.11.0/usage/dynamic_form/intro.html          |   10 +-
 .../usage/interpreter/dependency_management.html   |   10 +-
 docs/0.11.0/usage/interpreter/dynamic_loading.html |   10 +-
 docs/0.11.0/usage/interpreter/execution_hooks.html |   10 +-
 docs/0.11.0/usage/interpreter/installation.html    |   10 +-
 .../interpreter/interpreter_binding_mode.html      |   10 +-
 docs/0.11.0/usage/interpreter/overview.html        |   10 +-
 .../usage/interpreter/user_impersonation.html      |   10 +-
 .../usage/other_features/cron_scheduler.html       |   10 +-
 .../usage/other_features/customizing_homepage.html |   10 +-
 .../usage/other_features/notebook_actions.html     |   10 +-
 .../usage/other_features/personalized_mode.html    |   10 +-
 .../other_features/publishing_paragraphs.html      |   10 +-
 .../usage/other_features/zeppelin_context.html     |   10 +-
 docs/0.11.0/usage/rest_api/configuration.html      |   10 +-
 docs/0.11.0/usage/rest_api/credential.html         |   10 +-
 docs/0.11.0/usage/rest_api/helium.html             |   10 +-
 docs/0.11.0/usage/rest_api/interpreter.html        |   10 +-
 docs/0.11.0/usage/rest_api/notebook.html           |   10 +-
 .../0.11.0/usage/rest_api/notebook_repository.html |   10 +-
 docs/0.11.0/usage/rest_api/zeppelin_server.html    |   10 +-
 docs/0.11.0/usage/zeppelin_sdk/client_api.html     |   10 +-
 docs/0.11.0/usage/zeppelin_sdk/session_api.html    |   10 +-
 docs/0.11.1/assets/jquery-1.10.2.min.js            |    6 +
 .../assets/themes/fonts/fontawesome-webfont.eot    |  Bin 0 -> 56006 bytes
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 .../assets/themes/fonts/fontawesome-webfont.ttf    |  Bin 0 -> 112160 bytes
 .../assets/themes/fonts/fontawesome-webfont.woff   |  Bin 0 -> 65452 bytes
 docs/0.11.1/assets/themes/zeppelin/css/style.css   |    2 -
 .../assets/themes/zeppelin/font-awesome.min.css    |    4 +
 .../contribution/how_to_contribute_code.html       |   10 +-
 .../contribution/how_to_contribute_website.html    |   10 +-
 .../contribution/useful_developer_tools.html       |   10 +-
 docs/0.11.1/development/helium/overview.html       |   10 +-
 .../development/helium/writing_application.html    |   10 +-
 docs/0.11.1/development/helium/writing_spell.html  |   10 +-
 .../helium/writing_visualization_basic.html        |   10 +-
 .../writing_visualization_transformation.html      |   10 +-
 .../development/writing_zeppelin_interpreter.html  |   10 +-
 docs/0.11.1/index.html                             |   10 +-
 docs/0.11.1/interpreter/alluxio.html               |   10 +-
 docs/0.11.1/interpreter/bigquery.html              |   10 +-
 docs/0.11.1/interpreter/cassandra.html             |   10 +-
 docs/0.11.1/interpreter/elasticsearch.html         |   10 +-
 docs/0.11.1/interpreter/flink.html                 |   10 +-
 docs/0.11.1/interpreter/groovy.html                |   10 +-
 docs/0.11.1/interpreter/hbase.html                 |   10 +-
 docs/0.11.1/interpreter/hdfs.html                  |   10 +-
 docs/0.11.1/interpreter/hive.html                  |   10 +-
 docs/0.11.1/interpreter/influxdb.html              |   10 +-
 docs/0.11.1/interpreter/java.html                  |   10 +-
 docs/0.11.1/interpreter/jdbc.html                  |   10 +-
 docs/0.11.1/interpreter/jupyter.html               |   10 +-
 docs/0.11.1/interpreter/livy.html                  |   10 +-
 docs/0.11.1/interpreter/mahout.html                |   10 +-
 docs/0.11.1/interpreter/markdown.html              |   10 +-
 docs/0.11.1/interpreter/mongodb.html               |   10 +-
 docs/0.11.1/interpreter/neo4j.html                 |   10 +-
 docs/0.11.1/interpreter/postgresql.html            |   10 +-
 docs/0.11.1/interpreter/python.html                |   10 +-
 docs/0.11.1/interpreter/r.html                     |   10 +-
 docs/0.11.1/interpreter/shell.html                 |   10 +-
 docs/0.11.1/interpreter/spark.html                 |   10 +-
 docs/0.11.1/interpreter/sparql.html                |   10 +-
 docs/0.11.1/interpreter/submarine.html             |   10 +-
 docs/0.11.1/pleasecontribute.html                  |   10 +-
 docs/0.11.1/quickstart/docker.html                 |   10 +-
 docs/0.11.1/quickstart/explore_ui.html             |   10 +-
 docs/0.11.1/quickstart/flink_with_zeppelin.html    |   10 +-
 docs/0.11.1/quickstart/install.html                |   10 +-
 docs/0.11.1/quickstart/kubernetes.html             |   10 +-
 docs/0.11.1/quickstart/python_with_zeppelin.html   |   10 +-
 docs/0.11.1/quickstart/r_with_zeppelin.html        |   10 +-
 docs/0.11.1/quickstart/spark_with_zeppelin.html    |   10 +-
 docs/0.11.1/quickstart/sql_with_zeppelin.html      |   10 +-
 docs/0.11.1/quickstart/tutorial.html               |   10 +-
 docs/0.11.1/quickstart/yarn.html                   |   10 +-
 docs/0.11.1/screenshots.html                       |   10 +-
 docs/0.11.1/search.html                            |   10 +-
 docs/0.11.1/setup/basics/hadoop_integration.html   |   10 +-
 docs/0.11.1/setup/basics/how_to_build.html         |   11 +-
 docs/0.11.1/setup/basics/multi_user_support.html   |   10 +-
 docs/0.11.1/setup/basics/systemd.html              |   10 +-
 docs/0.11.1/setup/deployment/cdh.html              |   10 +-
 docs/0.11.1/setup/deployment/docker.html           |   10 +-
 .../setup/deployment/flink_and_spark_cluster.html  |   10 +-
 .../setup/deployment/spark_cluster_mode.html       |   10 +-
 docs/0.11.1/setup/deployment/virtual_machine.html  |   10 +-
 docs/0.11.1/setup/deployment/yarn_install.html     |   10 +-
 docs/0.11.1/setup/operation/configuration.html     |   10 +-
 docs/0.11.1/setup/operation/monitoring.html        |   10 +-
 docs/0.11.1/setup/operation/proxy_setting.html     |   10 +-
 docs/0.11.1/setup/operation/trouble_shooting.html  |   10 +-
 docs/0.11.1/setup/operation/upgrading.html         |   10 +-
 .../setup/security/authentication_nginx.html       |   10 +-
 .../setup/security/datasource_authorization.html   |   10 +-
 .../setup/security/http_security_headers.html      |   10 +-
 .../setup/security/notebook_authorization.html     |   10 +-
 .../setup/security/shiro_authentication.html       |   10 +-
 .../setup/storage/configuration_storage.html       |   10 +-
 docs/0.11.1/setup/storage/notebook_storage.html    |   10 +-
 .../usage/display_system/angular_backend.html      |   10 +-
 .../usage/display_system/angular_frontend.html     |   10 +-
 docs/0.11.1/usage/display_system/basic.html        |   14 +-
 docs/0.11.1/usage/dynamic_form/intro.html          |   10 +-
 .../usage/interpreter/dependency_management.html   |   10 +-
 docs/0.11.1/usage/interpreter/dynamic_loading.html |   10 +-
 docs/0.11.1/usage/interpreter/execution_hooks.html |   10 +-
 docs/0.11.1/usage/interpreter/installation.html    |   10 +-
 .../interpreter/interpreter_binding_mode.html      |   10 +-
 docs/0.11.1/usage/interpreter/overview.html        |   10 +-
 .../usage/interpreter/user_impersonation.html      |   10 +-
 .../usage/other_features/cron_scheduler.html       |   10 +-
 .../usage/other_features/customizing_homepage.html |   10 +-
 .../usage/other_features/notebook_actions.html     |   10 +-
 .../usage/other_features/personalized_mode.html    |   10 +-
 .../other_features/publishing_paragraphs.html      |   10 +-
 .../usage/other_features/zeppelin_context.html     |   10 +-
 docs/0.11.1/usage/rest_api/configuration.html      |   10 +-
 docs/0.11.1/usage/rest_api/credential.html         |   10 +-
 docs/0.11.1/usage/rest_api/helium.html             |   10 +-
 docs/0.11.1/usage/rest_api/interpreter.html        |   10 +-
 docs/0.11.1/usage/rest_api/notebook.html           |   10 +-
 .../0.11.1/usage/rest_api/notebook_repository.html |   10 +-
 docs/0.11.1/usage/rest_api/zeppelin_server.html    |   10 +-
 docs/0.11.1/usage/zeppelin_sdk/client_api.html     |   10 +-
 docs/0.11.1/usage/zeppelin_sdk/session_api.html    |   10 +-
 docs/0.11.2/assets/jquery-1.10.2.min.js            |    6 +
 .../assets/themes/fonts/fontawesome-webfont.eot    |  Bin 0 -> 56006 bytes
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 .../assets/themes/fonts/fontawesome-webfont.ttf    |  Bin 0 -> 112160 bytes
 .../assets/themes/fonts/fontawesome-webfont.woff   |  Bin 0 -> 65452 bytes
 docs/0.11.2/assets/themes/zeppelin/css/style.css   |    2 -
 .../assets/themes/zeppelin/font-awesome.min.css    |    4 +
 .../contribution/how_to_contribute_code.html       |   10 +-
 .../contribution/how_to_contribute_website.html    |   10 +-
 .../contribution/useful_developer_tools.html       |   10 +-
 docs/0.11.2/development/helium/overview.html       |   10 +-
 .../development/helium/writing_application.html    |   10 +-
 docs/0.11.2/development/helium/writing_spell.html  |   10 +-
 .../helium/writing_visualization_basic.html        |   10 +-
 .../writing_visualization_transformation.html      |   10 +-
 .../development/writing_zeppelin_interpreter.html  |   10 +-
 docs/0.11.2/index.html                             |   10 +-
 docs/0.11.2/interpreter/alluxio.html               |   10 +-
 docs/0.11.2/interpreter/bigquery.html              |   10 +-
 docs/0.11.2/interpreter/cassandra.html             |   10 +-
 docs/0.11.2/interpreter/elasticsearch.html         |   10 +-
 docs/0.11.2/interpreter/flink.html                 |   10 +-
 docs/0.11.2/interpreter/groovy.html                |   10 +-
 docs/0.11.2/interpreter/hbase.html                 |   10 +-
 docs/0.11.2/interpreter/hdfs.html                  |   10 +-
 docs/0.11.2/interpreter/hive.html                  |   10 +-
 docs/0.11.2/interpreter/influxdb.html              |   10 +-
 docs/0.11.2/interpreter/java.html                  |   10 +-
 docs/0.11.2/interpreter/jdbc.html                  |   10 +-
 docs/0.11.2/interpreter/jupyter.html               |   10 +-
 docs/0.11.2/interpreter/livy.html                  |   10 +-
 docs/0.11.2/interpreter/mahout.html                |   10 +-
 docs/0.11.2/interpreter/markdown.html              |   10 +-
 docs/0.11.2/interpreter/mongodb.html               |   10 +-
 docs/0.11.2/interpreter/neo4j.html                 |   10 +-
 docs/0.11.2/interpreter/postgresql.html            |   10 +-
 docs/0.11.2/interpreter/python.html                |   10 +-
 docs/0.11.2/interpreter/r.html                     |   10 +-
 docs/0.11.2/interpreter/shell.html                 |   10 +-
 docs/0.11.2/interpreter/spark.html                 |   10 +-
 docs/0.11.2/interpreter/sparql.html                |   10 +-
 docs/0.11.2/interpreter/submarine.html             |   10 +-
 docs/0.11.2/pleasecontribute.html                  |   10 +-
 docs/0.11.2/quickstart/docker.html                 |   10 +-
 docs/0.11.2/quickstart/explore_ui.html             |   10 +-
 docs/0.11.2/quickstart/flink_with_zeppelin.html    |   10 +-
 docs/0.11.2/quickstart/install.html                |   10 +-
 docs/0.11.2/quickstart/kubernetes.html             |   10 +-
 docs/0.11.2/quickstart/python_with_zeppelin.html   |   10 +-
 docs/0.11.2/quickstart/r_with_zeppelin.html        |   10 +-
 docs/0.11.2/quickstart/spark_with_zeppelin.html    |   10 +-
 docs/0.11.2/quickstart/sql_with_zeppelin.html      |   10 +-
 docs/0.11.2/quickstart/tutorial.html               |   10 +-
 docs/0.11.2/quickstart/yarn.html                   |   10 +-
 docs/0.11.2/screenshots.html                       |   10 +-
 docs/0.11.2/search.html                            |   10 +-
 docs/0.11.2/setup/basics/hadoop_integration.html   |   10 +-
 docs/0.11.2/setup/basics/how_to_build.html         |   11 +-
 docs/0.11.2/setup/basics/multi_user_support.html   |   10 +-
 docs/0.11.2/setup/basics/systemd.html              |   10 +-
 docs/0.11.2/setup/deployment/cdh.html              |   10 +-
 docs/0.11.2/setup/deployment/docker.html           |   10 +-
 .../setup/deployment/flink_and_spark_cluster.html  |   10 +-
 .../setup/deployment/spark_cluster_mode.html       |   10 +-
 docs/0.11.2/setup/deployment/virtual_machine.html  |   10 +-
 docs/0.11.2/setup/deployment/yarn_install.html     |   10 +-
 docs/0.11.2/setup/operation/configuration.html     |   10 +-
 docs/0.11.2/setup/operation/monitoring.html        |   10 +-
 docs/0.11.2/setup/operation/proxy_setting.html     |   10 +-
 docs/0.11.2/setup/operation/trouble_shooting.html  |   10 +-
 docs/0.11.2/setup/operation/upgrading.html         |   10 +-
 .../setup/security/authentication_nginx.html       |   10 +-
 .../setup/security/datasource_authorization.html   |   10 +-
 .../setup/security/http_security_headers.html      |   10 +-
 .../setup/security/notebook_authorization.html     |   10 +-
 .../setup/security/shiro_authentication.html       |   10 +-
 .../setup/storage/configuration_storage.html       |   10 +-
 docs/0.11.2/setup/storage/notebook_storage.html    |   10 +-
 .../usage/display_system/angular_backend.html      |   10 +-
 .../usage/display_system/angular_frontend.html     |   10 +-
 docs/0.11.2/usage/display_system/basic.html        |   14 +-
 docs/0.11.2/usage/dynamic_form/intro.html          |   10 +-
 .../usage/interpreter/dependency_management.html   |   10 +-
 docs/0.11.2/usage/interpreter/dynamic_loading.html |   10 +-
 docs/0.11.2/usage/interpreter/execution_hooks.html |   10 +-
 docs/0.11.2/usage/interpreter/installation.html    |   10 +-
 .../interpreter/interpreter_binding_mode.html      |   10 +-
 docs/0.11.2/usage/interpreter/overview.html        |   10 +-
 .../usage/interpreter/user_impersonation.html      |   10 +-
 .../usage/other_features/cron_scheduler.html       |   10 +-
 .../usage/other_features/customizing_homepage.html |   10 +-
 .../usage/other_features/notebook_actions.html     |   10 +-
 .../usage/other_features/personalized_mode.html    |   10 +-
 .../other_features/publishing_paragraphs.html      |   10 +-
 .../usage/other_features/zeppelin_context.html     |   10 +-
 docs/0.11.2/usage/rest_api/configuration.html      |   10 +-
 docs/0.11.2/usage/rest_api/credential.html         |   10 +-
 docs/0.11.2/usage/rest_api/helium.html             |   10 +-
 docs/0.11.2/usage/rest_api/interpreter.html        |   10 +-
 docs/0.11.2/usage/rest_api/notebook.html           |   10 +-
 .../0.11.2/usage/rest_api/notebook_repository.html |   10 +-
 docs/0.11.2/usage/rest_api/zeppelin_server.html    |   10 +-
 docs/0.11.2/usage/zeppelin_sdk/client_api.html     |   10 +-
 docs/0.11.2/usage/zeppelin_sdk/session_api.html    |   10 +-
 .../assets/themes/fonts/fontawesome-webfont.eot    |  Bin 0 -> 56006 bytes
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 .../assets/themes/fonts/fontawesome-webfont.ttf    |  Bin 0 -> 112160 bytes
 .../assets/themes/fonts/fontawesome-webfont.woff   |  Bin 0 -> 65452 bytes
 docs/0.12.0/assets/themes/zeppelin/css/style.css   |    2 -
 .../assets/themes/zeppelin/font-awesome.min.css    |    4 +
 .../contribution/how_to_contribute_code.html       |   10 +-
 .../contribution/how_to_contribute_website.html    |   10 +-
 .../contribution/useful_developer_tools.html       |   10 +-
 docs/0.12.0/development/helium/overview.html       |   10 +-
 .../development/helium/writing_application.html    |   10 +-
 docs/0.12.0/development/helium/writing_spell.html  |   10 +-
 .../helium/writing_visualization_basic.html        |   10 +-
 .../writing_visualization_transformation.html      |   10 +-
 .../development/writing_zeppelin_interpreter.html  |   10 +-
 docs/0.12.0/index.html                             |    6 -
 docs/0.12.0/interpreter/alluxio.html               |   10 +-
 docs/0.12.0/interpreter/bigquery.html              |   10 +-
 docs/0.12.0/interpreter/cassandra.html             |   10 +-
 docs/0.12.0/interpreter/elasticsearch.html         |   10 +-
 docs/0.12.0/interpreter/flink.html                 |   10 +-
 docs/0.12.0/interpreter/groovy.html                |   10 +-
 docs/0.12.0/interpreter/hbase.html                 |   10 +-
 docs/0.12.0/interpreter/hdfs.html                  |   10 +-
 docs/0.12.0/interpreter/hive.html                  |   10 +-
 docs/0.12.0/interpreter/influxdb.html              |   10 +-
 docs/0.12.0/interpreter/java.html                  |   10 +-
 docs/0.12.0/interpreter/jdbc.html                  |   10 +-
 docs/0.12.0/interpreter/jupyter.html               |   10 +-
 docs/0.12.0/interpreter/livy.html                  |   10 +-
 docs/0.12.0/interpreter/mahout.html                |   10 +-
 docs/0.12.0/interpreter/markdown.html              |   10 +-
 docs/0.12.0/interpreter/mongodb.html               |   10 +-
 docs/0.12.0/interpreter/neo4j.html                 |   10 +-
 docs/0.12.0/interpreter/postgresql.html            |   10 +-
 docs/0.12.0/interpreter/python.html                |   10 +-
 docs/0.12.0/interpreter/r.html                     |   10 +-
 docs/0.12.0/interpreter/shell.html                 |   10 +-
 docs/0.12.0/interpreter/spark.html                 |   10 +-
 docs/0.12.0/interpreter/sparql.html                |   10 +-
 docs/0.12.0/pleasecontribute.html                  |   10 +-
 docs/0.12.0/quickstart/docker.html                 |   10 +-
 docs/0.12.0/quickstart/explore_ui.html             |   10 +-
 docs/0.12.0/quickstart/flink_with_zeppelin.html    |   10 +-
 docs/0.12.0/quickstart/install.html                |   10 +-
 docs/0.12.0/quickstart/kubernetes.html             |   10 +-
 docs/0.12.0/quickstart/python_with_zeppelin.html   |   10 +-
 docs/0.12.0/quickstart/r_with_zeppelin.html        |   10 +-
 docs/0.12.0/quickstart/spark_with_zeppelin.html    |   10 +-
 docs/0.12.0/quickstart/sql_with_zeppelin.html      |   10 +-
 docs/0.12.0/quickstart/tutorial.html               |   10 +-
 docs/0.12.0/quickstart/yarn.html                   |   10 +-
 docs/0.12.0/screenshots.html                       |   10 +-
 docs/0.12.0/search.html                            |   10 +-
 docs/0.12.0/setup/basics/hadoop_integration.html   |   10 +-
 docs/0.12.0/setup/basics/how_to_build.html         |   10 +-
 docs/0.12.0/setup/basics/multi_user_support.html   |   10 +-
 docs/0.12.0/setup/basics/systemd.html              |   10 +-
 docs/0.12.0/setup/deployment/cdh.html              |   10 +-
 docs/0.12.0/setup/deployment/docker.html           |   10 +-
 .../setup/deployment/flink_and_spark_cluster.html  |   10 +-
 .../setup/deployment/spark_cluster_mode.html       |   10 +-
 docs/0.12.0/setup/deployment/virtual_machine.html  |   10 +-
 docs/0.12.0/setup/deployment/yarn_install.html     |   10 +-
 docs/0.12.0/setup/operation/configuration.html     |   10 +-
 docs/0.12.0/setup/operation/monitoring.html        |   10 +-
 docs/0.12.0/setup/operation/proxy_setting.html     |   10 +-
 docs/0.12.0/setup/operation/trouble_shooting.html  |   10 +-
 docs/0.12.0/setup/operation/upgrading.html         |   10 +-
 .../setup/security/authentication_nginx.html       |   10 +-
 .../setup/security/datasource_authorization.html   |   10 +-
 .../setup/security/http_security_headers.html      |   10 +-
 .../setup/security/notebook_authorization.html     |   10 +-
 .../setup/security/shiro_authentication.html       |   10 +-
 .../setup/storage/configuration_storage.html       |   10 +-
 docs/0.12.0/setup/storage/notebook_storage.html    |   10 +-
 .../usage/display_system/angular_backend.html      |   10 +-
 .../usage/display_system/angular_frontend.html     |   10 +-
 docs/0.12.0/usage/display_system/basic.html        |   14 +-
 docs/0.12.0/usage/dynamic_form/intro.html          |   10 +-
 .../usage/interpreter/dependency_management.html   |   10 +-
 docs/0.12.0/usage/interpreter/dynamic_loading.html |   10 +-
 docs/0.12.0/usage/interpreter/execution_hooks.html |   10 +-
 docs/0.12.0/usage/interpreter/installation.html    |   10 +-
 .../interpreter/interpreter_binding_mode.html      |   10 +-
 docs/0.12.0/usage/interpreter/overview.html        |   10 +-
 .../usage/interpreter/user_impersonation.html      |   10 +-
 .../usage/other_features/cron_scheduler.html       |   10 +-
 .../usage/other_features/customizing_homepage.html |   10 +-
 .../usage/other_features/notebook_actions.html     |   10 +-
 .../usage/other_features/personalized_mode.html    |   10 +-
 .../other_features/publishing_paragraphs.html      |   10 +-
 .../usage/other_features/zeppelin_context.html     |   10 +-
 docs/0.12.0/usage/rest_api/configuration.html      |   10 +-
 docs/0.12.0/usage/rest_api/credential.html         |   10 +-
 docs/0.12.0/usage/rest_api/helium.html             |   10 +-
 docs/0.12.0/usage/rest_api/interpreter.html        |   10 +-
 docs/0.12.0/usage/rest_api/notebook.html           |   10 +-
 .../0.12.0/usage/rest_api/notebook_repository.html |   10 +-
 docs/0.12.0/usage/rest_api/zeppelin_server.html    |   10 +-
 docs/0.12.0/usage/zeppelin_sdk/client_api.html     |   10 +-
 docs/0.12.0/usage/zeppelin_sdk/session_api.html    |   10 +-
 docs/0.5.0-incubating/assets/jquery-1.10.2.min.js  |    6 +
 .../assets/themes/fonts/fontawesome-webfont.eot    |  Bin 0 -> 56006 bytes
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 .../assets/themes/fonts/fontawesome-webfont.ttf    |  Bin 0 -> 112160 bytes
 .../assets/themes/fonts/fontawesome-webfont.woff   |  Bin 0 -> 65452 bytes
 .../assets/themes/zeppelin/css/style.css           |    1 -
 .../assets/themes/zeppelin/font-awesome.min.css    |    4 +
 .../development/howtocontribute.html               |    8 +-
 .../development/howtocontributewebsite.html        |    8 +-
 .../development/writingzeppelininterpreter.html    |    8 +-
 docs/0.5.0-incubating/displaysystem/angular.html   |    8 +-
 docs/0.5.0-incubating/displaysystem/display.html   |    8 +-
 docs/0.5.0-incubating/displaysystem/table.html     |    8 +-
 docs/0.5.0-incubating/docs.html                    |    8 +-
 docs/0.5.0-incubating/index.html                   |    8 +-
 docs/0.5.0-incubating/install/install.html         |    8 +-
 docs/0.5.0-incubating/install/yarn_install.html    |    8 +-
 docs/0.5.0-incubating/interpreter/cassandra.html   |    8 +-
 docs/0.5.0-incubating/interpreter/flink.html       |    8 +-
 docs/0.5.0-incubating/interpreter/geode.html       |   10 +-
 docs/0.5.0-incubating/interpreter/ignite.html      |    8 +-
 docs/0.5.0-incubating/interpreter/lens.html        |    8 +-
 docs/0.5.0-incubating/interpreter/postgresql.html  |   10 +-
 docs/0.5.0-incubating/interpreter/spark.html       |    8 +-
 docs/0.5.0-incubating/manual/dynamicform.html      |    8 +-
 docs/0.5.0-incubating/manual/interpreters.html     |    8 +-
 .../manual/notebookashomepage.html                 |    8 +-
 docs/0.5.0-incubating/pleasecontribute.html        |    8 +-
 .../rest-api/rest-interpreter.html                 |    8 +-
 docs/0.5.0-incubating/rest-api/rest-notebook.html  |    8 +-
 docs/0.5.0-incubating/screenshots.html             |    8 +-
 docs/0.5.0-incubating/storage/storage.html         |    8 +-
 docs/0.5.0-incubating/tutorial/tutorial.html       |    8 +-
 docs/0.5.5-incubating/assets/jquery-1.10.2.min.js  |    6 +
 .../assets/themes/fonts/fontawesome-webfont.eot    |  Bin 0 -> 56006 bytes
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 .../assets/themes/fonts/fontawesome-webfont.ttf    |  Bin 0 -> 112160 bytes
 .../assets/themes/fonts/fontawesome-webfont.woff   |  Bin 0 -> 65452 bytes
 .../assets/themes/zeppelin/css/style.css           |    1 -
 .../assets/themes/zeppelin/font-awesome.min.css    |    4 +
 .../development/howtocontribute.html               |    8 +-
 .../development/howtocontributewebsite.html        |    8 +-
 .../development/writingzeppelininterpreter.html    |    8 +-
 docs/0.5.5-incubating/displaysystem/angular.html   |    8 +-
 docs/0.5.5-incubating/displaysystem/display.html   |    8 +-
 docs/0.5.5-incubating/displaysystem/table.html     |    8 +-
 docs/0.5.5-incubating/docs.html                    |    8 +-
 docs/0.5.5-incubating/index.html                   |    8 +-
 docs/0.5.5-incubating/install/install.html         |    8 +-
 docs/0.5.5-incubating/install/yarn_install.html    |    8 +-
 docs/0.5.5-incubating/interpreter/cassandra.html   |    8 +-
 docs/0.5.5-incubating/interpreter/flink.html       |    8 +-
 docs/0.5.5-incubating/interpreter/geode.html       |   10 +-
 docs/0.5.5-incubating/interpreter/ignite.html      |    8 +-
 docs/0.5.5-incubating/interpreter/lens.html        |    8 +-
 docs/0.5.5-incubating/interpreter/postgresql.html  |   10 +-
 docs/0.5.5-incubating/interpreter/spark.html       |    8 +-
 docs/0.5.5-incubating/manual/dynamicform.html      |    8 +-
 docs/0.5.5-incubating/manual/interpreters.html     |    8 +-
 .../manual/notebookashomepage.html                 |    8 +-
 docs/0.5.5-incubating/pleasecontribute.html        |    8 +-
 .../rest-api/rest-interpreter.html                 |    8 +-
 docs/0.5.5-incubating/rest-api/rest-notebook.html  |    8 +-
 docs/0.5.5-incubating/screenshots.html             |    8 +-
 docs/0.5.5-incubating/storage/storage.html         |    8 +-
 docs/0.5.5-incubating/tutorial/tutorial.html       |    8 +-
 docs/0.5.6-incubating/assets/jquery-1.10.2.min.js  |    6 +
 .../assets/themes/fonts/fontawesome-webfont.eot    |  Bin 0 -> 56006 bytes
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 .../assets/themes/fonts/fontawesome-webfont.ttf    |  Bin 0 -> 112160 bytes
 .../assets/themes/fonts/fontawesome-webfont.woff   |  Bin 0 -> 65452 bytes
 .../assets/themes/zeppelin/css/style.css           |    1 -
 .../assets/themes/zeppelin/font-awesome.min.css    |    4 +
 .../development/howtocontribute.html               |    8 +-
 .../development/howtocontributewebsite.html        |    8 +-
 .../development/writingzeppelininterpreter.html    |    8 +-
 docs/0.5.6-incubating/displaysystem/angular.html   |    8 +-
 docs/0.5.6-incubating/displaysystem/display.html   |    8 +-
 docs/0.5.6-incubating/displaysystem/table.html     |    8 +-
 docs/0.5.6-incubating/index.html                   |    8 +-
 docs/0.5.6-incubating/install/install.html         |    8 +-
 docs/0.5.6-incubating/install/virtual_machine.html |    8 +-
 docs/0.5.6-incubating/install/yarn_install.html    |    8 +-
 docs/0.5.6-incubating/interpreter/cassandra.html   |    8 +-
 .../interpreter/elasticsearch.html                 |    8 +-
 docs/0.5.6-incubating/interpreter/flink.html       |    8 +-
 docs/0.5.6-incubating/interpreter/geode.html       |   10 +-
 docs/0.5.6-incubating/interpreter/hive.html        |    8 +-
 docs/0.5.6-incubating/interpreter/ignite.html      |    8 +-
 docs/0.5.6-incubating/interpreter/lens.html        |    8 +-
 docs/0.5.6-incubating/interpreter/markdown.html    |    8 +-
 docs/0.5.6-incubating/interpreter/postgresql.html  |   10 +-
 docs/0.5.6-incubating/interpreter/scalding.html    |    8 +-
 docs/0.5.6-incubating/interpreter/spark.html       |    8 +-
 docs/0.5.6-incubating/manual/dynamicform.html      |    8 +-
 docs/0.5.6-incubating/manual/interpreters.html     |    8 +-
 .../manual/notebookashomepage.html                 |    8 +-
 docs/0.5.6-incubating/pleasecontribute.html        |    8 +-
 .../rest-api/rest-interpreter.html                 |    8 +-
 docs/0.5.6-incubating/rest-api/rest-notebook.html  |    8 +-
 docs/0.5.6-incubating/screenshots.html             |    8 +-
 docs/0.5.6-incubating/storage/storage.html         |    8 +-
 docs/0.5.6-incubating/tutorial/tutorial.html       |    8 +-
 docs/0.6.0/assets/jquery-1.10.2.min.js             |    6 +
 .../assets/themes/fonts/fontawesome-webfont.eot    |  Bin 0 -> 56006 bytes
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 .../assets/themes/fonts/fontawesome-webfont.ttf    |  Bin 0 -> 112160 bytes
 .../assets/themes/fonts/fontawesome-webfont.woff   |  Bin 0 -> 65452 bytes
 docs/0.6.0/assets/themes/zeppelin/css/style.css    |    2 -
 .../assets/themes/zeppelin/font-awesome.min.css    |    4 +
 docs/0.6.0/development/howtocontribute.html        |   10 +-
 docs/0.6.0/development/howtocontributewebsite.html |   10 +-
 .../development/writingzeppelininterpreter.html    |   10 +-
 docs/0.6.0/displaysystem/back-end-angular.html     |   10 +-
 docs/0.6.0/displaysystem/basicdisplaysystem.html   |   10 +-
 docs/0.6.0/displaysystem/front-end-angular.html    |   10 +-
 docs/0.6.0/index.html                              |   10 +-
 docs/0.6.0/install/install.html                    |   10 +-
 docs/0.6.0/install/upgrade.html                    |   10 +-
 docs/0.6.0/install/virtual_machine.html            |   10 +-
 docs/0.6.0/install/yarn_install.html               |   10 +-
 docs/0.6.0/interpreter/alluxio.html                |   10 +-
 docs/0.6.0/interpreter/cassandra.html              |   10 +-
 docs/0.6.0/interpreter/elasticsearch.html          |   10 +-
 docs/0.6.0/interpreter/flink.html                  |   10 +-
 docs/0.6.0/interpreter/geode.html                  |   12 +-
 docs/0.6.0/interpreter/hbase.html                  |   10 +-
 docs/0.6.0/interpreter/hdfs.html                   |   10 +-
 docs/0.6.0/interpreter/hive.html                   |   10 +-
 docs/0.6.0/interpreter/ignite.html                 |   10 +-
 docs/0.6.0/interpreter/jdbc.html                   |   10 +-
 docs/0.6.0/interpreter/lens.html                   |   10 +-
 docs/0.6.0/interpreter/livy.html                   |   10 +-
 docs/0.6.0/interpreter/markdown.html               |   10 +-
 docs/0.6.0/interpreter/postgresql.html             |   12 +-
 docs/0.6.0/interpreter/python.html                 |   10 +-
 docs/0.6.0/interpreter/r.html                      |   10 +-
 docs/0.6.0/interpreter/scalding.html               |   10 +-
 docs/0.6.0/interpreter/spark.html                  |   10 +-
 docs/0.6.0/manual/dependencymanagement.html        |   10 +-
 docs/0.6.0/manual/dynamicform.html                 |   10 +-
 docs/0.6.0/manual/dynamicinterpreterload.html      |   10 +-
 docs/0.6.0/manual/interpreterinstallation.html     |   10 +-
 docs/0.6.0/manual/interpreters.html                |   10 +-
 docs/0.6.0/manual/notebookashomepage.html          |   10 +-
 docs/0.6.0/manual/publish.html                     |   10 +-
 docs/0.6.0/pleasecontribute.html                   |   10 +-
 docs/0.6.0/quickstart/explorezeppelinui.html       |   10 +-
 docs/0.6.0/quickstart/tutorial.html                |   10 +-
 docs/0.6.0/rest-api/rest-configuration.html        |   10 +-
 docs/0.6.0/rest-api/rest-interpreter.html          |   10 +-
 docs/0.6.0/rest-api/rest-notebook.html             |   10 +-
 docs/0.6.0/screenshots.html                        |   10 +-
 docs/0.6.0/security/authentication.html            |   10 +-
 docs/0.6.0/security/interpreter_authorization.html |   10 +-
 docs/0.6.0/security/notebook_authorization.html    |   10 +-
 docs/0.6.0/security/shiroauthentication.html       |   10 +-
 docs/0.6.0/storage/storage.html                    |   10 +-
 docs/0.6.1/assets/jquery-1.10.2.min.js             |    6 +
 .../assets/themes/fonts/fontawesome-webfont.eot    |  Bin 0 -> 56006 bytes
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 .../assets/themes/fonts/fontawesome-webfont.ttf    |  Bin 0 -> 112160 bytes
 .../assets/themes/fonts/fontawesome-webfont.woff   |  Bin 0 -> 65452 bytes
 docs/0.6.1/assets/themes/zeppelin/css/style.css    |    2 -
 .../assets/themes/zeppelin/font-awesome.min.css    |    4 +
 docs/0.6.1/development/howtocontribute.html        |   10 +-
 docs/0.6.1/development/howtocontributewebsite.html |   10 +-
 .../development/writingzeppelininterpreter.html    |   10 +-
 docs/0.6.1/displaysystem/back-end-angular.html     |   10 +-
 docs/0.6.1/displaysystem/basicdisplaysystem.html   |   10 +-
 docs/0.6.1/displaysystem/front-end-angular.html    |   10 +-
 docs/0.6.1/index.html                              |   10 +-
 docs/0.6.1/install/install.html                    |   10 +-
 docs/0.6.1/install/upgrade.html                    |   10 +-
 docs/0.6.1/install/virtual_machine.html            |   10 +-
 docs/0.6.1/install/yarn_install.html               |   10 +-
 docs/0.6.1/interpreter/alluxio.html                |   10 +-
 docs/0.6.1/interpreter/bigquery.html               |   10 +-
 docs/0.6.1/interpreter/cassandra.html              |   10 +-
 docs/0.6.1/interpreter/elasticsearch.html          |   10 +-
 docs/0.6.1/interpreter/flink.html                  |   10 +-
 docs/0.6.1/interpreter/geode.html                  |   12 +-
 docs/0.6.1/interpreter/hbase.html                  |   10 +-
 docs/0.6.1/interpreter/hdfs.html                   |   10 +-
 docs/0.6.1/interpreter/hive.html                   |   10 +-
 docs/0.6.1/interpreter/ignite.html                 |   10 +-
 docs/0.6.1/interpreter/jdbc.html                   |   10 +-
 docs/0.6.1/interpreter/lens.html                   |   10 +-
 docs/0.6.1/interpreter/livy.html                   |   10 +-
 docs/0.6.1/interpreter/markdown.html               |   10 +-
 docs/0.6.1/interpreter/postgresql.html             |   12 +-
 docs/0.6.1/interpreter/python.html                 |   10 +-
 docs/0.6.1/interpreter/r.html                      |   10 +-
 docs/0.6.1/interpreter/scalding.html               |   10 +-
 docs/0.6.1/interpreter/spark.html                  |   10 +-
 docs/0.6.1/manual/dependencymanagement.html        |   10 +-
 docs/0.6.1/manual/dynamicform.html                 |   10 +-
 docs/0.6.1/manual/dynamicinterpreterload.html      |   10 +-
 docs/0.6.1/manual/interpreterinstallation.html     |   10 +-
 docs/0.6.1/manual/interpreters.html                |   10 +-
 docs/0.6.1/manual/notebookashomepage.html          |   10 +-
 docs/0.6.1/manual/publish.html                     |   10 +-
 docs/0.6.1/pleasecontribute.html                   |   10 +-
 docs/0.6.1/quickstart/explorezeppelinui.html       |   10 +-
 docs/0.6.1/quickstart/tutorial.html                |   10 +-
 docs/0.6.1/rest-api/rest-configuration.html        |   10 +-
 docs/0.6.1/rest-api/rest-interpreter.html          |   10 +-
 docs/0.6.1/rest-api/rest-notebook.html             |   10 +-
 docs/0.6.1/screenshots.html                        |   10 +-
 docs/0.6.1/security/authentication.html            |   10 +-
 docs/0.6.1/security/interpreter_authorization.html |   10 +-
 docs/0.6.1/security/notebook_authorization.html    |   10 +-
 docs/0.6.1/security/shiroauthentication.html       |   10 +-
 docs/0.6.1/storage/storage.html                    |   10 +-
 docs/0.6.2/assets/jquery-1.10.2.min.js             |    6 +
 .../assets/themes/fonts/fontawesome-webfont.eot    |  Bin 0 -> 56006 bytes
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 .../assets/themes/fonts/fontawesome-webfont.ttf    |  Bin 0 -> 112160 bytes
 .../assets/themes/fonts/fontawesome-webfont.woff   |  Bin 0 -> 65452 bytes
 docs/0.6.2/assets/themes/zeppelin/css/style.css    |    2 -
 .../assets/themes/zeppelin/font-awesome.min.css    |    4 +
 docs/0.6.2/development/howtocontribute.html        |   10 +-
 docs/0.6.2/development/howtocontributewebsite.html |   10 +-
 .../development/writingzeppelininterpreter.html    |   10 +-
 docs/0.6.2/displaysystem/back-end-angular.html     |   10 +-
 docs/0.6.2/displaysystem/basicdisplaysystem.html   |   10 +-
 docs/0.6.2/displaysystem/front-end-angular.html    |   10 +-
 docs/0.6.2/index.html                              |   10 +-
 docs/0.6.2/install/install.html                    |   10 +-
 docs/0.6.2/install/upgrade.html                    |   10 +-
 docs/0.6.2/install/virtual_machine.html            |   10 +-
 docs/0.6.2/install/yarn_install.html               |   10 +-
 docs/0.6.2/interpreter/alluxio.html                |   10 +-
 docs/0.6.2/interpreter/bigquery.html               |   10 +-
 docs/0.6.2/interpreter/cassandra.html              |   10 +-
 docs/0.6.2/interpreter/elasticsearch.html          |   10 +-
 docs/0.6.2/interpreter/flink.html                  |   10 +-
 docs/0.6.2/interpreter/geode.html                  |   12 +-
 docs/0.6.2/interpreter/hbase.html                  |   10 +-
 docs/0.6.2/interpreter/hdfs.html                   |   10 +-
 docs/0.6.2/interpreter/hive.html                   |   10 +-
 docs/0.6.2/interpreter/ignite.html                 |   10 +-
 docs/0.6.2/interpreter/jdbc.html                   |   10 +-
 docs/0.6.2/interpreter/lens.html                   |   10 +-
 docs/0.6.2/interpreter/livy.html                   |   10 +-
 docs/0.6.2/interpreter/markdown.html               |   10 +-
 docs/0.6.2/interpreter/postgresql.html             |   12 +-
 docs/0.6.2/interpreter/python.html                 |   10 +-
 docs/0.6.2/interpreter/r.html                      |   10 +-
 docs/0.6.2/interpreter/scalding.html               |   10 +-
 docs/0.6.2/interpreter/spark.html                  |   10 +-
 docs/0.6.2/manual/dependencymanagement.html        |   10 +-
 docs/0.6.2/manual/dynamicform.html                 |   10 +-
 docs/0.6.2/manual/dynamicinterpreterload.html      |   10 +-
 docs/0.6.2/manual/interpreterinstallation.html     |   10 +-
 docs/0.6.2/manual/interpreters.html                |   10 +-
 docs/0.6.2/manual/notebookashomepage.html          |   10 +-
 docs/0.6.2/manual/publish.html                     |   10 +-
 docs/0.6.2/pleasecontribute.html                   |   10 +-
 docs/0.6.2/quickstart/explorezeppelinui.html       |   10 +-
 docs/0.6.2/quickstart/tutorial.html                |   10 +-
 docs/0.6.2/rest-api/rest-configuration.html        |   10 +-
 docs/0.6.2/rest-api/rest-interpreter.html          |   10 +-
 docs/0.6.2/rest-api/rest-notebook.html             |   10 +-
 docs/0.6.2/screenshots.html                        |   10 +-
 docs/0.6.2/security/authentication.html            |   10 +-
 docs/0.6.2/security/interpreter_authorization.html |   10 +-
 docs/0.6.2/security/notebook_authorization.html    |   10 +-
 docs/0.6.2/security/shiroauthentication.html       |   10 +-
 docs/0.6.2/storage/storage.html                    |   10 +-
 docs/0.7.0/assets/jquery-1.10.2.min.js             |    6 +
 .../assets/themes/fonts/fontawesome-webfont.eot    |  Bin 0 -> 56006 bytes
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 .../assets/themes/fonts/fontawesome-webfont.ttf    |  Bin 0 -> 112160 bytes
 .../assets/themes/fonts/fontawesome-webfont.woff   |  Bin 0 -> 65452 bytes
 docs/0.7.0/assets/themes/zeppelin/css/style.css    |    2 -
 .../assets/themes/zeppelin/font-awesome.min.css    |    4 +
 docs/0.7.0/development/howtocontribute.html        |   10 +-
 docs/0.7.0/development/howtocontributewebsite.html |   10 +-
 .../development/writingzeppelinapplication.html    |   10 +-
 .../development/writingzeppelininterpreter.html    |   10 +-
 .../development/writingzeppelinvisualization.html  |   10 +-
 docs/0.7.0/displaysystem/back-end-angular.html     |   10 +-
 docs/0.7.0/displaysystem/basicdisplaysystem.html   |   10 +-
 docs/0.7.0/displaysystem/front-end-angular.html    |   10 +-
 docs/0.7.0/index.html                              |   10 +-
 docs/0.7.0/install/build.html                      |   11 +-
 docs/0.7.0/install/cdh.html                        |   10 +-
 docs/0.7.0/install/configuration.html              |   10 +-
 docs/0.7.0/install/docker.html                     |   10 +-
 docs/0.7.0/install/install.html                    |   10 +-
 docs/0.7.0/install/spark_cluster_mode.html         |   10 +-
 docs/0.7.0/install/upgrade.html                    |   10 +-
 docs/0.7.0/install/virtual_machine.html            |   10 +-
 docs/0.7.0/install/yarn_install.html               |   10 +-
 docs/0.7.0/interpreter/alluxio.html                |   10 +-
 docs/0.7.0/interpreter/beam.html                   |   10 +-
 docs/0.7.0/interpreter/bigquery.html               |   10 +-
 docs/0.7.0/interpreter/cassandra.html              |   10 +-
 docs/0.7.0/interpreter/elasticsearch.html          |   10 +-
 docs/0.7.0/interpreter/flink.html                  |   10 +-
 docs/0.7.0/interpreter/geode.html                  |   12 +-
 docs/0.7.0/interpreter/hbase.html                  |   10 +-
 docs/0.7.0/interpreter/hdfs.html                   |   10 +-
 docs/0.7.0/interpreter/hive.html                   |   10 +-
 docs/0.7.0/interpreter/ignite.html                 |   10 +-
 docs/0.7.0/interpreter/jdbc.html                   |   10 +-
 docs/0.7.0/interpreter/kylin.html                  |   10 +-
 docs/0.7.0/interpreter/lens.html                   |   10 +-
 docs/0.7.0/interpreter/livy.html                   |   10 +-
 docs/0.7.0/interpreter/mahout.html                 |   10 +-
 docs/0.7.0/interpreter/markdown.html               |   10 +-
 docs/0.7.0/interpreter/pig.html                    |   10 +-
 docs/0.7.0/interpreter/postgresql.html             |   12 +-
 docs/0.7.0/interpreter/python.html                 |   10 +-
 docs/0.7.0/interpreter/r.html                      |   10 +-
 docs/0.7.0/interpreter/scalding.html               |   10 +-
 docs/0.7.0/interpreter/scio.html                   |   10 +-
 docs/0.7.0/interpreter/shell.html                  |   10 +-
 docs/0.7.0/interpreter/spark.html                  |   10 +-
 docs/0.7.0/manual/dependencymanagement.html        |   10 +-
 docs/0.7.0/manual/dynamicform.html                 |   10 +-
 docs/0.7.0/manual/dynamicinterpreterload.html      |   10 +-
 docs/0.7.0/manual/interpreterexechooks.html        |   10 +-
 docs/0.7.0/manual/interpreterinstallation.html     |   10 +-
 docs/0.7.0/manual/interpreters.html                |   10 +-
 docs/0.7.0/manual/notebookashomepage.html          |   10 +-
 docs/0.7.0/manual/publish.html                     |   10 +-
 docs/0.7.0/manual/userimpersonation.html           |   10 +-
 docs/0.7.0/pleasecontribute.html                   |   10 +-
 docs/0.7.0/quickstart/explorezeppelinui.html       |   10 +-
 .../install_with_flink_and_spark_cluster.html      |   10 +-
 docs/0.7.0/quickstart/tutorial.html                |   10 +-
 docs/0.7.0/rest-api/rest-configuration.html        |   10 +-
 docs/0.7.0/rest-api/rest-credential.html           |   10 +-
 docs/0.7.0/rest-api/rest-helium.html               |   10 +-
 docs/0.7.0/rest-api/rest-interpreter.html          |   10 +-
 docs/0.7.0/rest-api/rest-notebook.html             |   10 +-
 docs/0.7.0/screenshots.html                        |   10 +-
 docs/0.7.0/search.html                             |   10 +-
 docs/0.7.0/security/authentication.html            |   10 +-
 docs/0.7.0/security/datasource_authorization.html  |   10 +-
 docs/0.7.0/security/notebook_authorization.html    |   10 +-
 docs/0.7.0/security/shiroauthentication.html       |   10 +-
 docs/0.7.0/storage/storage.html                    |   10 +-
 docs/0.7.1/assets/jquery-1.10.2.min.js             |    6 +
 .../assets/themes/fonts/fontawesome-webfont.eot    |  Bin 0 -> 56006 bytes
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 .../assets/themes/fonts/fontawesome-webfont.ttf    |  Bin 0 -> 112160 bytes
 .../assets/themes/fonts/fontawesome-webfont.woff   |  Bin 0 -> 65452 bytes
 docs/0.7.1/assets/themes/zeppelin/css/style.css    |    2 -
 .../assets/themes/zeppelin/font-awesome.min.css    |    4 +
 docs/0.7.1/development/howtocontribute.html        |   10 +-
 docs/0.7.1/development/howtocontributewebsite.html |   10 +-
 .../development/writingzeppelinapplication.html    |   10 +-
 .../development/writingzeppelininterpreter.html    |   10 +-
 .../development/writingzeppelinvisualization.html  |   10 +-
 docs/0.7.1/displaysystem/back-end-angular.html     |   10 +-
 docs/0.7.1/displaysystem/basicdisplaysystem.html   |   10 +-
 docs/0.7.1/displaysystem/front-end-angular.html    |   10 +-
 docs/0.7.1/index.html                              |   10 +-
 docs/0.7.1/install/build.html                      |   11 +-
 docs/0.7.1/install/cdh.html                        |   10 +-
 docs/0.7.1/install/configuration.html              |   10 +-
 docs/0.7.1/install/docker.html                     |   10 +-
 docs/0.7.1/install/install.html                    |   10 +-
 docs/0.7.1/install/spark_cluster_mode.html         |   10 +-
 docs/0.7.1/install/upgrade.html                    |   10 +-
 docs/0.7.1/install/virtual_machine.html            |   10 +-
 docs/0.7.1/install/yarn_install.html               |   10 +-
 docs/0.7.1/interpreter/alluxio.html                |   10 +-
 docs/0.7.1/interpreter/beam.html                   |   10 +-
 docs/0.7.1/interpreter/bigquery.html               |   10 +-
 docs/0.7.1/interpreter/cassandra.html              |   10 +-
 docs/0.7.1/interpreter/elasticsearch.html          |   10 +-
 docs/0.7.1/interpreter/flink.html                  |   10 +-
 docs/0.7.1/interpreter/geode.html                  |   12 +-
 docs/0.7.1/interpreter/hbase.html                  |   10 +-
 docs/0.7.1/interpreter/hdfs.html                   |   10 +-
 docs/0.7.1/interpreter/hive.html                   |   10 +-
 docs/0.7.1/interpreter/ignite.html                 |   10 +-
 docs/0.7.1/interpreter/jdbc.html                   |   10 +-
 docs/0.7.1/interpreter/kylin.html                  |   10 +-
 docs/0.7.1/interpreter/lens.html                   |   10 +-
 docs/0.7.1/interpreter/livy.html                   |   10 +-
 docs/0.7.1/interpreter/mahout.html                 |   10 +-
 docs/0.7.1/interpreter/markdown.html               |   10 +-
 docs/0.7.1/interpreter/pig.html                    |   10 +-
 docs/0.7.1/interpreter/postgresql.html             |   12 +-
 docs/0.7.1/interpreter/python.html                 |   10 +-
 docs/0.7.1/interpreter/r.html                      |   10 +-
 docs/0.7.1/interpreter/scalding.html               |   10 +-
 docs/0.7.1/interpreter/scio.html                   |   10 +-
 docs/0.7.1/interpreter/shell.html                  |   10 +-
 docs/0.7.1/interpreter/spark.html                  |   10 +-
 docs/0.7.1/manual/dependencymanagement.html        |   10 +-
 docs/0.7.1/manual/dynamicform.html                 |   10 +-
 docs/0.7.1/manual/dynamicinterpreterload.html      |   10 +-
 docs/0.7.1/manual/interpreterexechooks.html        |   10 +-
 docs/0.7.1/manual/interpreterinstallation.html     |   10 +-
 docs/0.7.1/manual/interpreters.html                |   10 +-
 docs/0.7.1/manual/notebookashomepage.html          |   10 +-
 docs/0.7.1/manual/publish.html                     |   10 +-
 docs/0.7.1/manual/userimpersonation.html           |   10 +-
 docs/0.7.1/pleasecontribute.html                   |   10 +-
 docs/0.7.1/quickstart/explorezeppelinui.html       |   10 +-
 .../install_with_flink_and_spark_cluster.html      |   10 +-
 docs/0.7.1/quickstart/tutorial.html                |   10 +-
 docs/0.7.1/rest-api/rest-configuration.html        |   10 +-
 docs/0.7.1/rest-api/rest-credential.html           |   10 +-
 docs/0.7.1/rest-api/rest-helium.html               |   10 +-
 docs/0.7.1/rest-api/rest-interpreter.html          |   10 +-
 docs/0.7.1/rest-api/rest-notebook.html             |   10 +-
 docs/0.7.1/rest-api/rest-notebookRepo.html         |   10 +-
 docs/0.7.1/screenshots.html                        |   10 +-
 docs/0.7.1/search.html                             |   10 +-
 docs/0.7.1/security/authentication.html            |   10 +-
 docs/0.7.1/security/datasource_authorization.html  |   10 +-
 docs/0.7.1/security/notebook_authorization.html    |   10 +-
 docs/0.7.1/security/shiroauthentication.html       |   10 +-
 docs/0.7.1/storage/storage.html                    |   10 +-
 docs/0.7.2/assets/jquery-1.10.2.min.js             |    6 +
 .../assets/themes/fonts/fontawesome-webfont.eot    |  Bin 0 -> 56006 bytes
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 .../assets/themes/fonts/fontawesome-webfont.ttf    |  Bin 0 -> 112160 bytes
 .../assets/themes/fonts/fontawesome-webfont.woff   |  Bin 0 -> 65452 bytes
 docs/0.7.2/assets/themes/zeppelin/css/style.css    |    2 -
 .../assets/themes/zeppelin/font-awesome.min.css    |    4 +
 docs/0.7.2/development/howtocontribute.html        |   10 +-
 docs/0.7.2/development/howtocontributewebsite.html |   10 +-
 .../development/writingzeppelinapplication.html    |   10 +-
 .../development/writingzeppelininterpreter.html    |   10 +-
 .../development/writingzeppelinvisualization.html  |   10 +-
 docs/0.7.2/displaysystem/back-end-angular.html     |   10 +-
 docs/0.7.2/displaysystem/basicdisplaysystem.html   |   10 +-
 docs/0.7.2/displaysystem/front-end-angular.html    |   10 +-
 docs/0.7.2/index.html                              |   10 +-
 docs/0.7.2/install/build.html                      |   11 +-
 docs/0.7.2/install/cdh.html                        |   10 +-
 docs/0.7.2/install/configuration.html              |   10 +-
 docs/0.7.2/install/docker.html                     |   10 +-
 docs/0.7.2/install/install.html                    |   10 +-
 docs/0.7.2/install/spark_cluster_mode.html         |   10 +-
 docs/0.7.2/install/upgrade.html                    |   10 +-
 docs/0.7.2/install/virtual_machine.html            |   10 +-
 docs/0.7.2/install/yarn_install.html               |   10 +-
 docs/0.7.2/interpreter/alluxio.html                |   10 +-
 docs/0.7.2/interpreter/beam.html                   |   10 +-
 docs/0.7.2/interpreter/bigquery.html               |   10 +-
 docs/0.7.2/interpreter/cassandra.html              |   10 +-
 docs/0.7.2/interpreter/elasticsearch.html          |   10 +-
 docs/0.7.2/interpreter/flink.html                  |   10 +-
 docs/0.7.2/interpreter/geode.html                  |   12 +-
 docs/0.7.2/interpreter/hbase.html                  |   10 +-
 docs/0.7.2/interpreter/hdfs.html                   |   10 +-
 docs/0.7.2/interpreter/hive.html                   |   10 +-
 docs/0.7.2/interpreter/ignite.html                 |   10 +-
 docs/0.7.2/interpreter/jdbc.html                   |   10 +-
 docs/0.7.2/interpreter/kylin.html                  |   10 +-
 docs/0.7.2/interpreter/lens.html                   |   10 +-
 docs/0.7.2/interpreter/livy.html                   |   10 +-
 docs/0.7.2/interpreter/mahout.html                 |   10 +-
 docs/0.7.2/interpreter/markdown.html               |   10 +-
 docs/0.7.2/interpreter/pig.html                    |   10 +-
 docs/0.7.2/interpreter/postgresql.html             |   12 +-
 docs/0.7.2/interpreter/python.html                 |   10 +-
 docs/0.7.2/interpreter/r.html                      |   10 +-
 docs/0.7.2/interpreter/scalding.html               |   10 +-
 docs/0.7.2/interpreter/scio.html                   |   10 +-
 docs/0.7.2/interpreter/shell.html                  |   10 +-
 docs/0.7.2/interpreter/spark.html                  |   10 +-
 docs/0.7.2/manual/dependencymanagement.html        |   10 +-
 docs/0.7.2/manual/dynamicform.html                 |   10 +-
 docs/0.7.2/manual/dynamicinterpreterload.html      |   10 +-
 docs/0.7.2/manual/interpreterexechooks.html        |   10 +-
 docs/0.7.2/manual/interpreterinstallation.html     |   10 +-
 docs/0.7.2/manual/interpreters.html                |   10 +-
 docs/0.7.2/manual/notebookashomepage.html          |   10 +-
 docs/0.7.2/manual/publish.html                     |   10 +-
 docs/0.7.2/manual/userimpersonation.html           |   10 +-
 docs/0.7.2/pleasecontribute.html                   |   10 +-
 docs/0.7.2/quickstart/explorezeppelinui.html       |   10 +-
 .../install_with_flink_and_spark_cluster.html      |   10 +-
 docs/0.7.2/quickstart/tutorial.html                |   10 +-
 docs/0.7.2/rest-api/rest-configuration.html        |   10 +-
 docs/0.7.2/rest-api/rest-credential.html           |   10 +-
 docs/0.7.2/rest-api/rest-helium.html               |   10 +-
 docs/0.7.2/rest-api/rest-interpreter.html          |   10 +-
 docs/0.7.2/rest-api/rest-notebook.html             |   10 +-
 docs/0.7.2/rest-api/rest-notebookRepo.html         |   10 +-
 docs/0.7.2/screenshots.html                        |   10 +-
 docs/0.7.2/search.html                             |   10 +-
 docs/0.7.2/security/authentication.html            |   10 +-
 docs/0.7.2/security/datasource_authorization.html  |   10 +-
 docs/0.7.2/security/helium_authorization.html      |   10 +-
 docs/0.7.2/security/notebook_authorization.html    |   10 +-
 docs/0.7.2/security/shiroauthentication.html       |   10 +-
 docs/0.7.2/storage/storage.html                    |   10 +-
 docs/0.7.3/assets/jquery-1.10.2.min.js             |    6 +
 .../assets/themes/fonts/fontawesome-webfont.eot    |  Bin 0 -> 56006 bytes
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 .../assets/themes/fonts/fontawesome-webfont.ttf    |  Bin 0 -> 112160 bytes
 .../assets/themes/fonts/fontawesome-webfont.woff   |  Bin 0 -> 65452 bytes
 docs/0.7.3/assets/themes/zeppelin/css/style.css    |    2 -
 .../assets/themes/zeppelin/font-awesome.min.css    |    4 +
 docs/0.7.3/development/howtocontribute.html        |   10 +-
 docs/0.7.3/development/howtocontributewebsite.html |   10 +-
 .../development/writingzeppelinapplication.html    |   10 +-
 .../development/writingzeppelininterpreter.html    |   10 +-
 .../development/writingzeppelinvisualization.html  |   10 +-
 docs/0.7.3/displaysystem/back-end-angular.html     |   10 +-
 docs/0.7.3/displaysystem/basicdisplaysystem.html   |   10 +-
 docs/0.7.3/displaysystem/front-end-angular.html    |   10 +-
 docs/0.7.3/index.html                              |   10 +-
 docs/0.7.3/install/build.html                      |   11 +-
 docs/0.7.3/install/cdh.html                        |   10 +-
 docs/0.7.3/install/configuration.html              |   10 +-
 docs/0.7.3/install/docker.html                     |   10 +-
 docs/0.7.3/install/install.html                    |   10 +-
 docs/0.7.3/install/spark_cluster_mode.html         |   10 +-
 docs/0.7.3/install/upgrade.html                    |   10 +-
 docs/0.7.3/install/virtual_machine.html            |   10 +-
 docs/0.7.3/install/yarn_install.html               |   10 +-
 docs/0.7.3/interpreter/alluxio.html                |   10 +-
 docs/0.7.3/interpreter/beam.html                   |   10 +-
 docs/0.7.3/interpreter/bigquery.html               |   10 +-
 docs/0.7.3/interpreter/cassandra.html              |   10 +-
 docs/0.7.3/interpreter/elasticsearch.html          |   10 +-
 docs/0.7.3/interpreter/flink.html                  |   10 +-
 docs/0.7.3/interpreter/geode.html                  |   12 +-
 docs/0.7.3/interpreter/hbase.html                  |   10 +-
 docs/0.7.3/interpreter/hdfs.html                   |   10 +-
 docs/0.7.3/interpreter/hive.html                   |   10 +-
 docs/0.7.3/interpreter/ignite.html                 |   10 +-
 docs/0.7.3/interpreter/jdbc.html                   |   10 +-
 docs/0.7.3/interpreter/kylin.html                  |   10 +-
 docs/0.7.3/interpreter/lens.html                   |   10 +-
 docs/0.7.3/interpreter/livy.html                   |   10 +-
 docs/0.7.3/interpreter/mahout.html                 |   10 +-
 docs/0.7.3/interpreter/markdown.html               |   10 +-
 docs/0.7.3/interpreter/pig.html                    |   10 +-
 docs/0.7.3/interpreter/postgresql.html             |   12 +-
 docs/0.7.3/interpreter/python.html                 |   10 +-
 docs/0.7.3/interpreter/r.html                      |   10 +-
 docs/0.7.3/interpreter/scalding.html               |   10 +-
 docs/0.7.3/interpreter/scio.html                   |   10 +-
 docs/0.7.3/interpreter/shell.html                  |   10 +-
 docs/0.7.3/interpreter/spark.html                  |   10 +-
 docs/0.7.3/manual/dependencymanagement.html        |   10 +-
 docs/0.7.3/manual/dynamicform.html                 |   10 +-
 docs/0.7.3/manual/dynamicinterpreterload.html      |   10 +-
 docs/0.7.3/manual/interpreterexechooks.html        |   10 +-
 docs/0.7.3/manual/interpreterinstallation.html     |   10 +-
 docs/0.7.3/manual/interpreters.html                |   10 +-
 docs/0.7.3/manual/notebookashomepage.html          |   10 +-
 docs/0.7.3/manual/publish.html                     |   10 +-
 docs/0.7.3/manual/userimpersonation.html           |   10 +-
 docs/0.7.3/pleasecontribute.html                   |   10 +-
 docs/0.7.3/quickstart/explorezeppelinui.html       |   10 +-
 .../install_with_flink_and_spark_cluster.html      |   10 +-
 docs/0.7.3/quickstart/tutorial.html                |   10 +-
 docs/0.7.3/rest-api/rest-configuration.html        |   10 +-
 docs/0.7.3/rest-api/rest-credential.html           |   10 +-
 docs/0.7.3/rest-api/rest-helium.html               |   10 +-
 docs/0.7.3/rest-api/rest-interpreter.html          |   10 +-
 docs/0.7.3/rest-api/rest-notebook.html             |   10 +-
 docs/0.7.3/rest-api/rest-notebookRepo.html         |   10 +-
 docs/0.7.3/screenshots.html                        |   10 +-
 docs/0.7.3/search.html                             |   10 +-
 docs/0.7.3/security/authentication.html            |   10 +-
 docs/0.7.3/security/datasource_authorization.html  |   10 +-
 docs/0.7.3/security/helium_authorization.html      |   10 +-
 docs/0.7.3/security/http_security_headers.html     |   10 +-
 docs/0.7.3/security/notebook_authorization.html    |   10 +-
 docs/0.7.3/security/shiroauthentication.html       |   10 +-
 docs/0.7.3/storage/storage.html                    |   10 +-
 docs/0.8.0/assets/jquery-1.10.2.min.js             |    6 +
 .../assets/themes/fonts/fontawesome-webfont.eot    |  Bin 0 -> 56006 bytes
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 .../assets/themes/fonts/fontawesome-webfont.ttf    |  Bin 0 -> 112160 bytes
 .../assets/themes/fonts/fontawesome-webfont.woff   |  Bin 0 -> 65452 bytes
 docs/0.8.0/assets/themes/zeppelin/css/style.css    |    2 -
 .../assets/themes/zeppelin/font-awesome.min.css    |    4 +
 .../contribution/how_to_contribute_code.html       |   10 +-
 .../contribution/how_to_contribute_website.html    |   10 +-
 .../contribution/useful_developer_tools.html       |   10 +-
 docs/0.8.0/development/helium/overview.html        |   10 +-
 .../development/helium/writing_application.html    |   10 +-
 docs/0.8.0/development/helium/writing_spell.html   |   10 +-
 .../helium/writing_visualization_basic.html        |   10 +-
 .../writing_visualization_transformation.html      |   10 +-
 .../development/writing_zeppelin_interpreter.html  |   10 +-
 docs/0.8.0/index.html                              |   10 +-
 docs/0.8.0/interpreter/alluxio.html                |   10 +-
 docs/0.8.0/interpreter/beam.html                   |   10 +-
 docs/0.8.0/interpreter/bigquery.html               |   10 +-
 docs/0.8.0/interpreter/cassandra.html              |   10 +-
 docs/0.8.0/interpreter/elasticsearch.html          |   10 +-
 docs/0.8.0/interpreter/flink.html                  |   10 +-
 docs/0.8.0/interpreter/geode.html                  |   12 +-
 docs/0.8.0/interpreter/groovy.html                 |   10 +-
 docs/0.8.0/interpreter/hbase.html                  |   10 +-
 docs/0.8.0/interpreter/hdfs.html                   |   10 +-
 docs/0.8.0/interpreter/hive.html                   |   10 +-
 docs/0.8.0/interpreter/ignite.html                 |   10 +-
 docs/0.8.0/interpreter/jdbc.html                   |   10 +-
 docs/0.8.0/interpreter/kylin.html                  |   10 +-
 docs/0.8.0/interpreter/lens.html                   |   10 +-
 docs/0.8.0/interpreter/livy.html                   |   10 +-
 docs/0.8.0/interpreter/mahout.html                 |   10 +-
 docs/0.8.0/interpreter/markdown.html               |   10 +-
 docs/0.8.0/interpreter/neo4j.html                  |   10 +-
 docs/0.8.0/interpreter/pig.html                    |   10 +-
 docs/0.8.0/interpreter/postgresql.html             |   10 +-
 docs/0.8.0/interpreter/python.html                 |   10 +-
 docs/0.8.0/interpreter/r.html                      |   10 +-
 docs/0.8.0/interpreter/sap.html                    |   10 +-
 docs/0.8.0/interpreter/scalding.html               |   10 +-
 docs/0.8.0/interpreter/scio.html                   |   10 +-
 docs/0.8.0/interpreter/shell.html                  |   10 +-
 docs/0.8.0/interpreter/spark.html                  |   10 +-
 docs/0.8.0/pleasecontribute.html                   |   10 +-
 docs/0.8.0/quickstart/explore_ui.html              |   10 +-
 docs/0.8.0/quickstart/install.html                 |   10 +-
 docs/0.8.0/quickstart/python_with_zeppelin.html    |   10 +-
 docs/0.8.0/quickstart/spark_with_zeppelin.html     |   10 +-
 docs/0.8.0/quickstart/sql_with_zeppelin.html       |   10 +-
 docs/0.8.0/quickstart/tutorial.html                |   10 +-
 docs/0.8.0/screenshots.html                        |   10 +-
 docs/0.8.0/search.html                             |   10 +-
 docs/0.8.0/setup/basics/how_to_build.html          |   11 +-
 docs/0.8.0/setup/basics/multi_user_support.html    |   10 +-
 docs/0.8.0/setup/deployment/cdh.html               |   10 +-
 docs/0.8.0/setup/deployment/docker.html            |   10 +-
 .../setup/deployment/flink_and_spark_cluster.html  |   10 +-
 .../0.8.0/setup/deployment/spark_cluster_mode.html |   10 +-
 docs/0.8.0/setup/deployment/virtual_machine.html   |   10 +-
 docs/0.8.0/setup/deployment/yarn_install.html      |   10 +-
 docs/0.8.0/setup/operation/configuration.html      |   10 +-
 docs/0.8.0/setup/operation/proxy_setting.html      |   10 +-
 docs/0.8.0/setup/operation/trouble_shooting.html   |   10 +-
 docs/0.8.0/setup/operation/upgrading.html          |   10 +-
 .../0.8.0/setup/security/authentication_nginx.html |   10 +-
 .../setup/security/datasource_authorization.html   |   10 +-
 .../setup/security/http_security_headers.html      |   10 +-
 .../setup/security/notebook_authorization.html     |   10 +-
 .../0.8.0/setup/security/shiro_authentication.html |   10 +-
 docs/0.8.0/setup/storage/storage.html              |   10 +-
 .../usage/display_system/angular_backend.html      |   10 +-
 .../usage/display_system/angular_frontend.html     |   10 +-
 docs/0.8.0/usage/display_system/basic.html         |   14 +-
 docs/0.8.0/usage/dynamic_form/intro.html           |   10 +-
 .../usage/interpreter/dependency_management.html   |   10 +-
 docs/0.8.0/usage/interpreter/dynamic_loading.html  |   10 +-
 docs/0.8.0/usage/interpreter/execution_hooks.html  |   10 +-
 docs/0.8.0/usage/interpreter/installation.html     |   10 +-
 .../interpreter/interpreter_binding_mode.html      |   10 +-
 docs/0.8.0/usage/interpreter/overview.html         |   10 +-
 .../usage/interpreter/user_impersonation.html      |   10 +-
 .../0.8.0/usage/other_features/cron_scheduler.html |   10 +-
 .../usage/other_features/customizing_homepage.html |   10 +-
 .../usage/other_features/notebook_actions.html     |   10 +-
 .../usage/other_features/personalized_mode.html    |   10 +-
 .../other_features/publishing_paragraphs.html      |   10 +-
 .../usage/other_features/zeppelin_context.html     |   10 +-
 docs/0.8.0/usage/rest_api/configuration.html       |   10 +-
 docs/0.8.0/usage/rest_api/credential.html          |   10 +-
 docs/0.8.0/usage/rest_api/helium.html              |   10 +-
 docs/0.8.0/usage/rest_api/interpreter.html         |   10 +-
 docs/0.8.0/usage/rest_api/notebook.html            |   10 +-
 docs/0.8.0/usage/rest_api/notebook_repository.html |   10 +-
 docs/0.8.0/usage/rest_api/zeppelin_server.html     |   10 +-
 docs/0.8.1/assets/jquery-1.10.2.min.js             |    6 +
 .../assets/themes/fonts/fontawesome-webfont.eot    |  Bin 0 -> 56006 bytes
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 .../assets/themes/fonts/fontawesome-webfont.ttf    |  Bin 0 -> 112160 bytes
 .../assets/themes/fonts/fontawesome-webfont.woff   |  Bin 0 -> 65452 bytes
 docs/0.8.1/assets/themes/zeppelin/css/style.css    |    2 -
 .../assets/themes/zeppelin/font-awesome.min.css    |    4 +
 .../contribution/how_to_contribute_code.html       |   10 +-
 .../contribution/how_to_contribute_website.html    |   10 +-
 .../contribution/useful_developer_tools.html       |   10 +-
 docs/0.8.1/development/helium/overview.html        |   10 +-
 .../development/helium/writing_application.html    |   10 +-
 docs/0.8.1/development/helium/writing_spell.html   |   10 +-
 .../helium/writing_visualization_basic.html        |   10 +-
 .../writing_visualization_transformation.html      |   10 +-
 .../development/writing_zeppelin_interpreter.html  |   10 +-
 docs/0.8.1/index.html                              |   10 +-
 docs/0.8.1/interpreter/alluxio.html                |   10 +-
 docs/0.8.1/interpreter/beam.html                   |   10 +-
 docs/0.8.1/interpreter/bigquery.html               |   10 +-
 docs/0.8.1/interpreter/cassandra.html              |   10 +-
 docs/0.8.1/interpreter/elasticsearch.html          |   10 +-
 docs/0.8.1/interpreter/flink.html                  |   10 +-
 docs/0.8.1/interpreter/geode.html                  |   12 +-
 docs/0.8.1/interpreter/groovy.html                 |   10 +-
 docs/0.8.1/interpreter/hbase.html                  |   10 +-
 docs/0.8.1/interpreter/hdfs.html                   |   10 +-
 docs/0.8.1/interpreter/hive.html                   |   10 +-
 docs/0.8.1/interpreter/ignite.html                 |   10 +-
 docs/0.8.1/interpreter/jdbc.html                   |   10 +-
 docs/0.8.1/interpreter/kylin.html                  |   10 +-
 docs/0.8.1/interpreter/lens.html                   |   10 +-
 docs/0.8.1/interpreter/livy.html                   |   10 +-
 docs/0.8.1/interpreter/mahout.html                 |   10 +-
 docs/0.8.1/interpreter/markdown.html               |   10 +-
 docs/0.8.1/interpreter/neo4j.html                  |   10 +-
 docs/0.8.1/interpreter/pig.html                    |   10 +-
 docs/0.8.1/interpreter/postgresql.html             |   10 +-
 docs/0.8.1/interpreter/python.html                 |   10 +-
 docs/0.8.1/interpreter/r.html                      |   10 +-
 docs/0.8.1/interpreter/sap.html                    |   10 +-
 docs/0.8.1/interpreter/scalding.html               |   10 +-
 docs/0.8.1/interpreter/scio.html                   |   10 +-
 docs/0.8.1/interpreter/shell.html                  |   10 +-
 docs/0.8.1/interpreter/spark.html                  |   10 +-
 docs/0.8.1/pleasecontribute.html                   |   10 +-
 docs/0.8.1/quickstart/explore_ui.html              |   10 +-
 docs/0.8.1/quickstart/install.html                 |   10 +-
 docs/0.8.1/quickstart/python_with_zeppelin.html    |   10 +-
 docs/0.8.1/quickstart/spark_with_zeppelin.html     |   10 +-
 docs/0.8.1/quickstart/sql_with_zeppelin.html       |   10 +-
 docs/0.8.1/quickstart/tutorial.html                |   10 +-
 docs/0.8.1/screenshots.html                        |   10 +-
 docs/0.8.1/search.html                             |   10 +-
 docs/0.8.1/setup/basics/how_to_build.html          |   11 +-
 docs/0.8.1/setup/basics/multi_user_support.html    |   10 +-
 docs/0.8.1/setup/deployment/cdh.html               |   10 +-
 docs/0.8.1/setup/deployment/docker.html            |   10 +-
 .../setup/deployment/flink_and_spark_cluster.html  |   10 +-
 .../0.8.1/setup/deployment/spark_cluster_mode.html |   10 +-
 docs/0.8.1/setup/deployment/virtual_machine.html   |   10 +-
 docs/0.8.1/setup/deployment/yarn_install.html      |   10 +-
 docs/0.8.1/setup/operation/configuration.html      |   10 +-
 docs/0.8.1/setup/operation/proxy_setting.html      |   10 +-
 docs/0.8.1/setup/operation/trouble_shooting.html   |   10 +-
 docs/0.8.1/setup/operation/upgrading.html          |   10 +-
 .../0.8.1/setup/security/authentication_nginx.html |   10 +-
 .../setup/security/datasource_authorization.html   |   10 +-
 .../setup/security/http_security_headers.html      |   10 +-
 .../setup/security/notebook_authorization.html     |   10 +-
 .../0.8.1/setup/security/shiro_authentication.html |   10 +-
 docs/0.8.1/setup/storage/storage.html              |   10 +-
 .../usage/display_system/angular_backend.html      |   10 +-
 .../usage/display_system/angular_frontend.html     |   10 +-
 docs/0.8.1/usage/display_system/basic.html         |   14 +-
 docs/0.8.1/usage/dynamic_form/intro.html           |   10 +-
 .../usage/interpreter/dependency_management.html   |   10 +-
 docs/0.8.1/usage/interpreter/dynamic_loading.html  |   10 +-
 docs/0.8.1/usage/interpreter/execution_hooks.html  |   10 +-
 docs/0.8.1/usage/interpreter/installation.html     |   10 +-
 .../interpreter/interpreter_binding_mode.html      |   10 +-
 docs/0.8.1/usage/interpreter/overview.html         |   10 +-
 .../usage/interpreter/user_impersonation.html      |   10 +-
 .../0.8.1/usage/other_features/cron_scheduler.html |   10 +-
 .../usage/other_features/customizing_homepage.html |   10 +-
 .../usage/other_features/notebook_actions.html     |   10 +-
 .../usage/other_features/personalized_mode.html    |   10 +-
 .../other_features/publishing_paragraphs.html      |   10 +-
 .../usage/other_features/zeppelin_context.html     |   10 +-
 docs/0.8.1/usage/rest_api/configuration.html       |   10 +-
 docs/0.8.1/usage/rest_api/credential.html          |   10 +-
 docs/0.8.1/usage/rest_api/helium.html              |   10 +-
 docs/0.8.1/usage/rest_api/interpreter.html         |   10 +-
 docs/0.8.1/usage/rest_api/notebook.html            |   10 +-
 docs/0.8.1/usage/rest_api/notebook_repository.html |   10 +-
 docs/0.8.1/usage/rest_api/zeppelin_server.html     |   10 +-
 docs/0.8.2/assets/jquery-1.10.2.min.js             |    6 +
 .../assets/themes/fonts/fontawesome-webfont.eot    |  Bin 0 -> 56006 bytes
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 .../assets/themes/fonts/fontawesome-webfont.ttf    |  Bin 0 -> 112160 bytes
 .../assets/themes/fonts/fontawesome-webfont.woff   |  Bin 0 -> 65452 bytes
 docs/0.8.2/assets/themes/zeppelin/css/style.css    |    2 -
 .../assets/themes/zeppelin/font-awesome.min.css    |    4 +
 .../contribution/how_to_contribute_code.html       |   10 +-
 .../contribution/how_to_contribute_website.html    |   10 +-
 .../contribution/useful_developer_tools.html       |   10 +-
 docs/0.8.2/development/helium/overview.html        |   10 +-
 .../development/helium/writing_application.html    |   10 +-
 docs/0.8.2/development/helium/writing_spell.html   |   10 +-
 .../helium/writing_visualization_basic.html        |   10 +-
 .../writing_visualization_transformation.html      |   10 +-
 .../development/writing_zeppelin_interpreter.html  |   10 +-
 docs/0.8.2/index.html                              |   10 +-
 docs/0.8.2/interpreter/alluxio.html                |   10 +-
 docs/0.8.2/interpreter/beam.html                   |   10 +-
 docs/0.8.2/interpreter/bigquery.html               |   10 +-
 docs/0.8.2/interpreter/cassandra.html              |   10 +-
 docs/0.8.2/interpreter/elasticsearch.html          |   10 +-
 docs/0.8.2/interpreter/flink.html                  |   10 +-
 docs/0.8.2/interpreter/geode.html                  |   12 +-
 docs/0.8.2/interpreter/groovy.html                 |   10 +-
 docs/0.8.2/interpreter/hbase.html                  |   10 +-
 docs/0.8.2/interpreter/hdfs.html                   |   10 +-
 docs/0.8.2/interpreter/hive.html                   |   10 +-
 docs/0.8.2/interpreter/ignite.html                 |   10 +-
 docs/0.8.2/interpreter/jdbc.html                   |   10 +-
 docs/0.8.2/interpreter/kylin.html                  |   10 +-
 docs/0.8.2/interpreter/lens.html                   |   10 +-
 docs/0.8.2/interpreter/livy.html                   |   10 +-
 docs/0.8.2/interpreter/mahout.html                 |   10 +-
 docs/0.8.2/interpreter/markdown.html               |   10 +-
 docs/0.8.2/interpreter/neo4j.html                  |   10 +-
 docs/0.8.2/interpreter/pig.html                    |   10 +-
 docs/0.8.2/interpreter/postgresql.html             |   10 +-
 docs/0.8.2/interpreter/python.html                 |   10 +-
 docs/0.8.2/interpreter/r.html                      |   10 +-
 docs/0.8.2/interpreter/sap.html                    |   10 +-
 docs/0.8.2/interpreter/scalding.html               |   10 +-
 docs/0.8.2/interpreter/scio.html                   |   10 +-
 docs/0.8.2/interpreter/shell.html                  |   10 +-
 docs/0.8.2/interpreter/spark.html                  |   10 +-
 docs/0.8.2/pleasecontribute.html                   |   10 +-
 docs/0.8.2/quickstart/explore_ui.html              |   10 +-
 docs/0.8.2/quickstart/install.html                 |   10 +-
 docs/0.8.2/quickstart/python_with_zeppelin.html    |   10 +-
 docs/0.8.2/quickstart/spark_with_zeppelin.html     |   10 +-
 docs/0.8.2/quickstart/sql_with_zeppelin.html       |   10 +-
 docs/0.8.2/quickstart/tutorial.html                |   10 +-
 docs/0.8.2/screenshots.html                        |   10 +-
 docs/0.8.2/search.html                             |   10 +-
 docs/0.8.2/setup/basics/how_to_build.html          |   11 +-
 docs/0.8.2/setup/basics/multi_user_support.html    |   10 +-
 docs/0.8.2/setup/deployment/cdh.html               |   10 +-
 docs/0.8.2/setup/deployment/docker.html            |   10 +-
 .../setup/deployment/flink_and_spark_cluster.html  |   10 +-
 .../0.8.2/setup/deployment/spark_cluster_mode.html |   10 +-
 docs/0.8.2/setup/deployment/virtual_machine.html   |   10 +-
 docs/0.8.2/setup/deployment/yarn_install.html      |   10 +-
 docs/0.8.2/setup/operation/configuration.html      |   10 +-
 docs/0.8.2/setup/operation/proxy_setting.html      |   10 +-
 docs/0.8.2/setup/operation/trouble_shooting.html   |   10 +-
 docs/0.8.2/setup/operation/upgrading.html          |   10 +-
 .../0.8.2/setup/security/authentication_nginx.html |   10 +-
 .../setup/security/datasource_authorization.html   |   10 +-
 .../setup/security/http_security_headers.html      |   10 +-
 .../setup/security/notebook_authorization.html     |   10 +-
 .../0.8.2/setup/security/shiro_authentication.html |   10 +-
 docs/0.8.2/setup/storage/storage.html              |   10 +-
 .../usage/display_system/angular_backend.html      |   10 +-
 .../usage/display_system/angular_frontend.html     |   10 +-
 docs/0.8.2/usage/display_system/basic.html         |   14 +-
 docs/0.8.2/usage/dynamic_form/intro.html           |   10 +-
 .../usage/interpreter/dependency_management.html   |   10 +-
 docs/0.8.2/usage/interpreter/dynamic_loading.html  |   10 +-
 docs/0.8.2/usage/interpreter/execution_hooks.html  |   10 +-
 docs/0.8.2/usage/interpreter/installation.html     |   10 +-
 .../interpreter/interpreter_binding_mode.html      |   10 +-
 docs/0.8.2/usage/interpreter/overview.html         |   10 +-
 .../usage/interpreter/user_impersonation.html      |   10 +-
 .../0.8.2/usage/other_features/cron_scheduler.html |   10 +-
 .../usage/other_features/customizing_homepage.html |   10 +-
 .../usage/other_features/notebook_actions.html     |   10 +-
 .../usage/other_features/personalized_mode.html    |   10 +-
 .../other_features/publishing_paragraphs.html      |   10 +-
 .../usage/other_features/zeppelin_context.html     |   10 +-
 docs/0.8.2/usage/rest_api/configuration.html       |   10 +-
 docs/0.8.2/usage/rest_api/credential.html          |   10 +-
 docs/0.8.2/usage/rest_api/helium.html              |   10 +-
 docs/0.8.2/usage/rest_api/interpreter.html         |   10 +-
 docs/0.8.2/usage/rest_api/notebook.html            |   10 +-
 docs/0.8.2/usage/rest_api/notebook_repository.html |   10 +-
 docs/0.8.2/usage/rest_api/zeppelin_server.html     |   10 +-
 docs/0.9.0/assets/jquery-1.10.2.min.js             |    6 +
 .../assets/themes/fonts/fontawesome-webfont.eot    |  Bin 0 -> 56006 bytes
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 .../assets/themes/fonts/fontawesome-webfont.ttf    |  Bin 0 -> 112160 bytes
 .../assets/themes/fonts/fontawesome-webfont.woff   |  Bin 0 -> 65452 bytes
 docs/0.9.0/assets/themes/zeppelin/css/style.css    |    2 -
 .../assets/themes/zeppelin/font-awesome.min.css    |    4 +
 .../contribution/how_to_contribute_code.html       |   10 +-
 .../contribution/how_to_contribute_website.html    |   10 +-
 .../contribution/useful_developer_tools.html       |   10 +-
 docs/0.9.0/development/helium/overview.html        |   10 +-
 .../development/helium/writing_application.html    |   10 +-
 docs/0.9.0/development/helium/writing_spell.html   |   10 +-
 .../helium/writing_visualization_basic.html        |   10 +-
 .../writing_visualization_transformation.html      |   10 +-
 .../development/writing_zeppelin_interpreter.html  |   10 +-
 docs/0.9.0/index.html                              |   10 +-
 docs/0.9.0/interpreter/alluxio.html                |   10 +-
 docs/0.9.0/interpreter/beam.html                   |   10 +-
 docs/0.9.0/interpreter/bigquery.html               |   10 +-
 docs/0.9.0/interpreter/cassandra.html              |   10 +-
 docs/0.9.0/interpreter/elasticsearch.html          |   10 +-
 docs/0.9.0/interpreter/flink.html                  |   10 +-
 docs/0.9.0/interpreter/geode.html                  |   12 +-
 docs/0.9.0/interpreter/groovy.html                 |   10 +-
 docs/0.9.0/interpreter/hazelcastjet.html           |   10 +-
 docs/0.9.0/interpreter/hbase.html                  |   10 +-
 docs/0.9.0/interpreter/hdfs.html                   |   10 +-
 docs/0.9.0/interpreter/hive.html                   |   10 +-
 docs/0.9.0/interpreter/ignite.html                 |   10 +-
 docs/0.9.0/interpreter/influxdb.html               |   10 +-
 docs/0.9.0/interpreter/java.html                   |   10 +-
 docs/0.9.0/interpreter/jdbc.html                   |   10 +-
 docs/0.9.0/interpreter/jupyter.html                |   10 +-
 docs/0.9.0/interpreter/kotlin.html                 |   10 +-
 docs/0.9.0/interpreter/ksql.html                   |   10 +-
 docs/0.9.0/interpreter/kylin.html                  |   10 +-
 docs/0.9.0/interpreter/lens.html                   |   10 +-
 docs/0.9.0/interpreter/livy.html                   |   10 +-
 docs/0.9.0/interpreter/mahout.html                 |   10 +-
 docs/0.9.0/interpreter/markdown.html               |   10 +-
 docs/0.9.0/interpreter/mongodb.html                |   10 +-
 docs/0.9.0/interpreter/neo4j.html                  |   10 +-
 docs/0.9.0/interpreter/pig.html                    |   10 +-
 docs/0.9.0/interpreter/postgresql.html             |   10 +-
 docs/0.9.0/interpreter/python.html                 |   10 +-
 docs/0.9.0/interpreter/r.html                      |   10 +-
 docs/0.9.0/interpreter/sap.html                    |   10 +-
 docs/0.9.0/interpreter/scalding.html               |   10 +-
 docs/0.9.0/interpreter/scio.html                   |   10 +-
 docs/0.9.0/interpreter/shell.html                  |   10 +-
 docs/0.9.0/interpreter/spark.html                  |   10 +-
 docs/0.9.0/interpreter/sparql.html                 |   10 +-
 docs/0.9.0/interpreter/submarine.html              |   10 +-
 docs/0.9.0/pleasecontribute.html                   |   10 +-
 docs/0.9.0/quickstart/docker.html                  |   10 +-
 docs/0.9.0/quickstart/explore_ui.html              |   10 +-
 docs/0.9.0/quickstart/install.html                 |   10 +-
 docs/0.9.0/quickstart/kubernetes.html              |   10 +-
 docs/0.9.0/quickstart/python_with_zeppelin.html    |   10 +-
 docs/0.9.0/quickstart/spark_with_zeppelin.html     |   10 +-
 docs/0.9.0/quickstart/sql_with_zeppelin.html       |   10 +-
 docs/0.9.0/quickstart/tutorial.html                |   10 +-
 docs/0.9.0/quickstart/yarn.html                    |   10 +-
 docs/0.9.0/screenshots.html                        |   10 +-
 docs/0.9.0/search.html                             |   10 +-
 docs/0.9.0/setup/basics/hadoop_integration.html    |   10 +-
 docs/0.9.0/setup/basics/how_to_build.html          |   11 +-
 docs/0.9.0/setup/basics/multi_user_support.html    |   10 +-
 docs/0.9.0/setup/basics/systemd.html               |   10 +-
 docs/0.9.0/setup/deployment/cdh.html               |   10 +-
 docs/0.9.0/setup/deployment/docker.html            |   10 +-
 .../setup/deployment/flink_and_spark_cluster.html  |   10 +-
 .../0.9.0/setup/deployment/spark_cluster_mode.html |   10 +-
 docs/0.9.0/setup/deployment/virtual_machine.html   |   10 +-
 docs/0.9.0/setup/deployment/yarn_install.html      |   10 +-
 docs/0.9.0/setup/operation/configuration.html      |   10 +-
 docs/0.9.0/setup/operation/monitoring.html         |   10 +-
 docs/0.9.0/setup/operation/proxy_setting.html      |   10 +-
 docs/0.9.0/setup/operation/trouble_shooting.html   |   10 +-
 docs/0.9.0/setup/operation/upgrading.html          |   10 +-
 .../0.9.0/setup/security/authentication_nginx.html |   10 +-
 .../setup/security/datasource_authorization.html   |   10 +-
 .../setup/security/http_security_headers.html      |   10 +-
 .../setup/security/notebook_authorization.html     |   10 +-
 .../0.9.0/setup/security/shiro_authentication.html |   10 +-
 docs/0.9.0/setup/storage/storage.html              |   10 +-
 .../usage/display_system/angular_backend.html      |   10 +-
 .../usage/display_system/angular_frontend.html     |   10 +-
 docs/0.9.0/usage/display_system/basic.html         |   14 +-
 docs/0.9.0/usage/dynamic_form/intro.html           |   10 +-
 .../usage/interpreter/dependency_management.html   |   10 +-
 docs/0.9.0/usage/interpreter/dynamic_loading.html  |   10 +-
 docs/0.9.0/usage/interpreter/execution_hooks.html  |   10 +-
 docs/0.9.0/usage/interpreter/installation.html     |   10 +-
 .../interpreter/interpreter_binding_mode.html      |   10 +-
 docs/0.9.0/usage/interpreter/overview.html         |   10 +-
 .../usage/interpreter/user_impersonation.html      |   10 +-
 .../0.9.0/usage/other_features/cron_scheduler.html |   10 +-
 .../usage/other_features/customizing_homepage.html |   10 +-
 .../usage/other_features/notebook_actions.html     |   10 +-
 .../usage/other_features/personalized_mode.html    |   10 +-
 .../other_features/publishing_paragraphs.html      |   10 +-
 .../usage/other_features/zeppelin_context.html     |   10 +-
 docs/0.9.0/usage/rest_api/configuration.html       |   10 +-
 docs/0.9.0/usage/rest_api/credential.html          |   10 +-
 docs/0.9.0/usage/rest_api/helium.html              |   10 +-
 docs/0.9.0/usage/rest_api/interpreter.html         |   10 +-
 docs/0.9.0/usage/rest_api/notebook.html            |   10 +-
 docs/0.9.0/usage/rest_api/notebook_repository.html |   10 +-
 docs/0.9.0/usage/rest_api/zeppelin_server.html     |   10 +-
 docs/0.9.0/usage/zeppelin_sdk/client_api.html      |   10 +-
 docs/0.9.0/usage/zeppelin_sdk/session_api.html     |   10 +-
 output/assets.html                                 |    9 +-
 output/assets/themes/zeppelin/css/style.css        |    3 -
 .../assets/themes/zeppelin/js/medium.controller.js |    8 +-
 output/community.html                              |    9 +-
 output/contribution/contributions.html             |    9 +-
 output/contribution/documentation.html             |    9 +-
 output/contribution/webapplication.html            |    9 +-
 .../zeppelinweb/goodPracticeGuide01.html           |    9 +-
 .../zeppelinweb/goodPracticeGuide02.html           |    9 +-
 .../zeppelinweb/goodPracticeGuide03.html           |    9 +-
 .../zeppelinweb/goodPracticeGuide04.html           |    9 +-
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 .../contribution/how_to_contribute_code.html       |    6 -
 .../contribution/how_to_contribute_website.html    |    6 -
 .../contribution/useful_developer_tools.html       |    6 -
 .../docs/0.10.0/development/helium/overview.html   |    6 -
 .../development/helium/writing_application.html    |    6 -
 .../0.10.0/development/helium/writing_spell.html   |    6 -
 .../helium/writing_visualization_basic.html        |    6 -
 .../writing_visualization_transformation.html      |    6 -
 .../development/writing_zeppelin_interpreter.html  |    6 -
 output/docs/0.10.0/index.html                      |    6 -
 output/docs/0.10.0/interpreter/alluxio.html        |    6 -
 output/docs/0.10.0/interpreter/beam.html           |    6 -
 output/docs/0.10.0/interpreter/bigquery.html       |    6 -
 output/docs/0.10.0/interpreter/cassandra.html      |    6 -
 output/docs/0.10.0/interpreter/elasticsearch.html  |    6 -
 output/docs/0.10.0/interpreter/flink.html          |    6 -
 output/docs/0.10.0/interpreter/geode.html          |    8 +-
 output/docs/0.10.0/interpreter/groovy.html         |    6 -
 output/docs/0.10.0/interpreter/hazelcastjet.html   |    6 -
 output/docs/0.10.0/interpreter/hbase.html          |    6 -
 output/docs/0.10.0/interpreter/hdfs.html           |    6 -
 output/docs/0.10.0/interpreter/hive.html           |    6 -
 output/docs/0.10.0/interpreter/ignite.html         |    6 -
 output/docs/0.10.0/interpreter/influxdb.html       |    6 -
 output/docs/0.10.0/interpreter/java.html           |    6 -
 output/docs/0.10.0/interpreter/jdbc.html           |    6 -
 output/docs/0.10.0/interpreter/jupyter.html        |    6 -
 output/docs/0.10.0/interpreter/kotlin.html         |    6 -
 output/docs/0.10.0/interpreter/ksql.html           |    6 -
 output/docs/0.10.0/interpreter/kylin.html          |    6 -
 output/docs/0.10.0/interpreter/lens.html           |    6 -
 output/docs/0.10.0/interpreter/livy.html           |    6 -
 output/docs/0.10.0/interpreter/mahout.html         |    6 -
 output/docs/0.10.0/interpreter/markdown.html       |    6 -
 output/docs/0.10.0/interpreter/mongodb.html        |    6 -
 output/docs/0.10.0/interpreter/neo4j.html          |    6 -
 output/docs/0.10.0/interpreter/pig.html            |    6 -
 output/docs/0.10.0/interpreter/postgresql.html     |    6 -
 output/docs/0.10.0/interpreter/python.html         |    6 -
 output/docs/0.10.0/interpreter/r.html              |    6 -
 output/docs/0.10.0/interpreter/sap.html            |    6 -
 output/docs/0.10.0/interpreter/scalding.html       |    6 -
 output/docs/0.10.0/interpreter/scio.html           |    6 -
 output/docs/0.10.0/interpreter/shell.html          |    6 -
 output/docs/0.10.0/interpreter/spark.html          |    6 -
 output/docs/0.10.0/interpreter/sparql.html         |    6 -
 output/docs/0.10.0/interpreter/submarine.html      |    6 -
 output/docs/0.10.0/pleasecontribute.html           |    6 -
 output/docs/0.10.0/quickstart/docker.html          |    6 -
 output/docs/0.10.0/quickstart/explore_ui.html      |    6 -
 .../0.10.0/quickstart/flink_with_zeppelin.html     |    6 -
 output/docs/0.10.0/quickstart/install.html         |    6 -
 output/docs/0.10.0/quickstart/kubernetes.html      |    6 -
 .../0.10.0/quickstart/python_with_zeppelin.html    |    6 -
 output/docs/0.10.0/quickstart/r_with_zeppelin.html |    6 -
 .../0.10.0/quickstart/spark_with_zeppelin.html     |    6 -
 .../docs/0.10.0/quickstart/sql_with_zeppelin.html  |    6 -
 output/docs/0.10.0/quickstart/tutorial.html        |    6 -
 output/docs/0.10.0/quickstart/yarn.html            |    6 -
 output/docs/0.10.0/screenshots.html                |    6 -
 output/docs/0.10.0/search.html                     |    6 -
 .../0.10.0/setup/basics/hadoop_integration.html    |    6 -
 output/docs/0.10.0/setup/basics/how_to_build.html  |    7 -
 .../0.10.0/setup/basics/multi_user_support.html    |    6 -
 output/docs/0.10.0/setup/basics/systemd.html       |    6 -
 output/docs/0.10.0/setup/deployment/cdh.html       |    6 -
 output/docs/0.10.0/setup/deployment/docker.html    |    6 -
 .../setup/deployment/flink_and_spark_cluster.html  |    6 -
 .../setup/deployment/spark_cluster_mode.html       |    6 -
 .../0.10.0/setup/deployment/virtual_machine.html   |    6 -
 .../docs/0.10.0/setup/deployment/yarn_install.html |    6 -
 .../docs/0.10.0/setup/operation/configuration.html |    6 -
 output/docs/0.10.0/setup/operation/monitoring.html |    6 -
 .../docs/0.10.0/setup/operation/proxy_setting.html |    6 -
 .../0.10.0/setup/operation/trouble_shooting.html   |    6 -
 output/docs/0.10.0/setup/operation/upgrading.html  |    6 -
 .../setup/security/authentication_nginx.html       |    6 -
 .../setup/security/datasource_authorization.html   |    6 -
 .../setup/security/http_security_headers.html      |    6 -
 .../setup/security/notebook_authorization.html     |    6 -
 .../setup/security/shiro_authentication.html       |    6 -
 output/docs/0.10.0/setup/storage/storage.html      |    6 -
 .../usage/display_system/angular_backend.html      |    6 -
 .../usage/display_system/angular_frontend.html     |    6 -
 output/docs/0.10.0/usage/display_system/basic.html |   10 +-
 output/docs/0.10.0/usage/dynamic_form/intro.html   |    6 -
 .../usage/interpreter/dependency_management.html   |    6 -
 .../0.10.0/usage/interpreter/dynamic_loading.html  |    6 -
 .../0.10.0/usage/interpreter/execution_hooks.html  |    6 -
 .../0.10.0/usage/interpreter/installation.html     |    6 -
 .../interpreter/interpreter_binding_mode.html      |    6 -
 output/docs/0.10.0/usage/interpreter/overview.html |    6 -
 .../usage/interpreter/user_impersonation.html      |    6 -
 .../usage/other_features/cron_scheduler.html       |    6 -
 .../usage/other_features/customizing_homepage.html |    6 -
 .../usage/other_features/notebook_actions.html     |    6 -
 .../usage/other_features/personalized_mode.html    |    6 -
 .../other_features/publishing_paragraphs.html      |    6 -
 .../usage/other_features/zeppelin_context.html     |    6 -
 .../docs/0.10.0/usage/rest_api/configuration.html  |    6 -
 output/docs/0.10.0/usage/rest_api/credential.html  |    6 -
 output/docs/0.10.0/usage/rest_api/helium.html      |    6 -
 output/docs/0.10.0/usage/rest_api/interpreter.html |    6 -
 output/docs/0.10.0/usage/rest_api/notebook.html    |    6 -
 .../0.10.0/usage/rest_api/notebook_repository.html |    6 -
 .../0.10.0/usage/rest_api/zeppelin_server.html     |    6 -
 .../docs/0.10.0/usage/zeppelin_sdk/client_api.html |    6 -
 .../0.10.0/usage/zeppelin_sdk/session_api.html     |    6 -
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 .../contribution/how_to_contribute_code.html       |    6 -
 .../contribution/how_to_contribute_website.html    |    6 -
 .../contribution/useful_developer_tools.html       |    6 -
 .../docs/0.10.1/development/helium/overview.html   |    6 -
 .../development/helium/writing_application.html    |    6 -
 .../0.10.1/development/helium/writing_spell.html   |    6 -
 .../helium/writing_visualization_basic.html        |    6 -
 .../writing_visualization_transformation.html      |    6 -
 .../development/writing_zeppelin_interpreter.html  |    6 -
 output/docs/0.10.1/index.html                      |    6 -
 output/docs/0.10.1/interpreter/alluxio.html        |    6 -
 output/docs/0.10.1/interpreter/beam.html           |    6 -
 output/docs/0.10.1/interpreter/bigquery.html       |    6 -
 output/docs/0.10.1/interpreter/cassandra.html      |    6 -
 output/docs/0.10.1/interpreter/elasticsearch.html  |    6 -
 output/docs/0.10.1/interpreter/flink.html          |    6 -
 output/docs/0.10.1/interpreter/geode.html          |    8 +-
 output/docs/0.10.1/interpreter/groovy.html         |    6 -
 output/docs/0.10.1/interpreter/hazelcastjet.html   |    6 -
 output/docs/0.10.1/interpreter/hbase.html          |    6 -
 output/docs/0.10.1/interpreter/hdfs.html           |    6 -
 output/docs/0.10.1/interpreter/hive.html           |    6 -
 output/docs/0.10.1/interpreter/ignite.html         |    6 -
 output/docs/0.10.1/interpreter/influxdb.html       |    6 -
 output/docs/0.10.1/interpreter/java.html           |    6 -
 output/docs/0.10.1/interpreter/jdbc.html           |    6 -
 output/docs/0.10.1/interpreter/jupyter.html        |    6 -
 output/docs/0.10.1/interpreter/kotlin.html         |    6 -
 output/docs/0.10.1/interpreter/ksql.html           |    6 -
 output/docs/0.10.1/interpreter/kylin.html          |    6 -
 output/docs/0.10.1/interpreter/lens.html           |    6 -
 output/docs/0.10.1/interpreter/livy.html           |    6 -
 output/docs/0.10.1/interpreter/mahout.html         |    6 -
 output/docs/0.10.1/interpreter/markdown.html       |    6 -
 output/docs/0.10.1/interpreter/mongodb.html        |    6 -
 output/docs/0.10.1/interpreter/neo4j.html          |    6 -
 output/docs/0.10.1/interpreter/pig.html            |    6 -
 output/docs/0.10.1/interpreter/postgresql.html     |    6 -
 output/docs/0.10.1/interpreter/python.html         |    6 -
 output/docs/0.10.1/interpreter/r.html              |    6 -
 output/docs/0.10.1/interpreter/sap.html            |    6 -
 output/docs/0.10.1/interpreter/scalding.html       |    6 -
 output/docs/0.10.1/interpreter/scio.html           |    6 -
 output/docs/0.10.1/interpreter/shell.html          |    6 -
 output/docs/0.10.1/interpreter/spark.html          |    6 -
 output/docs/0.10.1/interpreter/sparql.html         |    6 -
 output/docs/0.10.1/interpreter/submarine.html      |    6 -
 output/docs/0.10.1/pleasecontribute.html           |    6 -
 output/docs/0.10.1/quickstart/docker.html          |    6 -
 output/docs/0.10.1/quickstart/explore_ui.html      |    6 -
 .../0.10.1/quickstart/flink_with_zeppelin.html     |    6 -
 output/docs/0.10.1/quickstart/install.html         |    6 -
 output/docs/0.10.1/quickstart/kubernetes.html      |    6 -
 .../0.10.1/quickstart/python_with_zeppelin.html    |    6 -
 output/docs/0.10.1/quickstart/r_with_zeppelin.html |    6 -
 .../0.10.1/quickstart/spark_with_zeppelin.html     |    6 -
 .../docs/0.10.1/quickstart/sql_with_zeppelin.html  |    6 -
 output/docs/0.10.1/quickstart/tutorial.html        |    6 -
 output/docs/0.10.1/quickstart/yarn.html            |    6 -
 output/docs/0.10.1/screenshots.html                |    6 -
 output/docs/0.10.1/search.html                     |    6 -
 .../0.10.1/setup/basics/hadoop_integration.html    |    6 -
 output/docs/0.10.1/setup/basics/how_to_build.html  |    7 -
 .../0.10.1/setup/basics/multi_user_support.html    |    6 -
 output/docs/0.10.1/setup/basics/systemd.html       |    6 -
 output/docs/0.10.1/setup/deployment/cdh.html       |    6 -
 output/docs/0.10.1/setup/deployment/docker.html    |    6 -
 .../setup/deployment/flink_and_spark_cluster.html  |    6 -
 .../setup/deployment/spark_cluster_mode.html       |    6 -
 .../0.10.1/setup/deployment/virtual_machine.html   |    6 -
 .../docs/0.10.1/setup/deployment/yarn_install.html |    6 -
 .../docs/0.10.1/setup/operation/configuration.html |    6 -
 output/docs/0.10.1/setup/operation/monitoring.html |    6 -
 .../docs/0.10.1/setup/operation/proxy_setting.html |    6 -
 .../0.10.1/setup/operation/trouble_shooting.html   |    6 -
 output/docs/0.10.1/setup/operation/upgrading.html  |    6 -
 .../setup/security/authentication_nginx.html       |    6 -
 .../setup/security/datasource_authorization.html   |    6 -
 .../setup/security/http_security_headers.html      |    6 -
 .../setup/security/notebook_authorization.html     |    6 -
 .../setup/security/shiro_authentication.html       |    6 -
 output/docs/0.10.1/setup/storage/storage.html      |    6 -
 .../usage/display_system/angular_backend.html      |    6 -
 .../usage/display_system/angular_frontend.html     |    6 -
 output/docs/0.10.1/usage/display_system/basic.html |   10 +-
 output/docs/0.10.1/usage/dynamic_form/intro.html   |    6 -
 .../usage/interpreter/dependency_management.html   |    6 -
 .../0.10.1/usage/interpreter/dynamic_loading.html  |    6 -
 .../0.10.1/usage/interpreter/execution_hooks.html  |    6 -
 .../0.10.1/usage/interpreter/installation.html     |    6 -
 .../interpreter/interpreter_binding_mode.html      |    6 -
 output/docs/0.10.1/usage/interpreter/overview.html |    6 -
 .../usage/interpreter/user_impersonation.html      |    6 -
 .../usage/other_features/cron_scheduler.html       |    6 -
 .../usage/other_features/customizing_homepage.html |    6 -
 .../usage/other_features/notebook_actions.html     |    6 -
 .../usage/other_features/personalized_mode.html    |    6 -
 .../other_features/publishing_paragraphs.html      |    6 -
 .../usage/other_features/zeppelin_context.html     |    6 -
 .../docs/0.10.1/usage/rest_api/configuration.html  |    6 -
 output/docs/0.10.1/usage/rest_api/credential.html  |    6 -
 output/docs/0.10.1/usage/rest_api/helium.html      |    6 -
 output/docs/0.10.1/usage/rest_api/interpreter.html |    6 -
 output/docs/0.10.1/usage/rest_api/notebook.html    |    6 -
 .../0.10.1/usage/rest_api/notebook_repository.html |    6 -
 .../0.10.1/usage/rest_api/zeppelin_server.html     |    6 -
 .../docs/0.10.1/usage/zeppelin_sdk/client_api.html |    6 -
 .../0.10.1/usage/zeppelin_sdk/session_api.html     |    6 -
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 .../contribution/how_to_contribute_code.html       |    6 -
 .../contribution/how_to_contribute_website.html    |    6 -
 .../contribution/useful_developer_tools.html       |    6 -
 .../docs/0.11.0/development/helium/overview.html   |    6 -
 .../development/helium/writing_application.html    |    6 -
 .../0.11.0/development/helium/writing_spell.html   |    6 -
 .../helium/writing_visualization_basic.html        |    6 -
 .../writing_visualization_transformation.html      |    6 -
 .../development/writing_zeppelin_interpreter.html  |    6 -
 output/docs/0.11.0/index.html                      |    6 -
 output/docs/0.11.0/interpreter/alluxio.html        |    6 -
 output/docs/0.11.0/interpreter/bigquery.html       |    6 -
 output/docs/0.11.0/interpreter/cassandra.html      |    6 -
 output/docs/0.11.0/interpreter/elasticsearch.html  |    6 -
 output/docs/0.11.0/interpreter/flink.html          |    6 -
 output/docs/0.11.0/interpreter/groovy.html         |    6 -
 output/docs/0.11.0/interpreter/hbase.html          |    6 -
 output/docs/0.11.0/interpreter/hdfs.html           |    6 -
 output/docs/0.11.0/interpreter/hive.html           |    6 -
 output/docs/0.11.0/interpreter/influxdb.html       |    6 -
 output/docs/0.11.0/interpreter/java.html           |    6 -
 output/docs/0.11.0/interpreter/jdbc.html           |    6 -
 output/docs/0.11.0/interpreter/jupyter.html        |    6 -
 output/docs/0.11.0/interpreter/livy.html           |    6 -
 output/docs/0.11.0/interpreter/mahout.html         |    6 -
 output/docs/0.11.0/interpreter/markdown.html       |    6 -
 output/docs/0.11.0/interpreter/mongodb.html        |    6 -
 output/docs/0.11.0/interpreter/neo4j.html          |    6 -
 output/docs/0.11.0/interpreter/postgresql.html     |    6 -
 output/docs/0.11.0/interpreter/python.html         |    6 -
 output/docs/0.11.0/interpreter/r.html              |    6 -
 output/docs/0.11.0/interpreter/shell.html          |    6 -
 output/docs/0.11.0/interpreter/spark.html          |    6 -
 output/docs/0.11.0/interpreter/sparql.html         |    6 -
 output/docs/0.11.0/interpreter/submarine.html      |    6 -
 output/docs/0.11.0/pleasecontribute.html           |    6 -
 output/docs/0.11.0/quickstart/docker.html          |    6 -
 output/docs/0.11.0/quickstart/explore_ui.html      |    6 -
 .../0.11.0/quickstart/flink_with_zeppelin.html     |    6 -
 output/docs/0.11.0/quickstart/install.html         |    6 -
 output/docs/0.11.0/quickstart/kubernetes.html      |    6 -
 .../0.11.0/quickstart/python_with_zeppelin.html    |    6 -
 output/docs/0.11.0/quickstart/r_with_zeppelin.html |    6 -
 .../0.11.0/quickstart/spark_with_zeppelin.html     |    6 -
 .../docs/0.11.0/quickstart/sql_with_zeppelin.html  |    6 -
 output/docs/0.11.0/quickstart/tutorial.html        |    6 -
 output/docs/0.11.0/quickstart/yarn.html            |    6 -
 output/docs/0.11.0/screenshots.html                |    6 -
 output/docs/0.11.0/search.html                     |    6 -
 .../0.11.0/setup/basics/hadoop_integration.html    |    6 -
 output/docs/0.11.0/setup/basics/how_to_build.html  |    7 -
 .../0.11.0/setup/basics/multi_user_support.html    |    6 -
 output/docs/0.11.0/setup/basics/systemd.html       |    6 -
 output/docs/0.11.0/setup/deployment/cdh.html       |    6 -
 output/docs/0.11.0/setup/deployment/docker.html    |    6 -
 .../setup/deployment/flink_and_spark_cluster.html  |    6 -
 .../setup/deployment/spark_cluster_mode.html       |    6 -
 .../0.11.0/setup/deployment/virtual_machine.html   |    6 -
 .../docs/0.11.0/setup/deployment/yarn_install.html |    6 -
 .../docs/0.11.0/setup/operation/configuration.html |    6 -
 output/docs/0.11.0/setup/operation/monitoring.html |    6 -
 .../docs/0.11.0/setup/operation/proxy_setting.html |    6 -
 .../0.11.0/setup/operation/trouble_shooting.html   |    6 -
 output/docs/0.11.0/setup/operation/upgrading.html  |    6 -
 .../setup/security/authentication_nginx.html       |    6 -
 .../setup/security/datasource_authorization.html   |    6 -
 .../setup/security/http_security_headers.html      |    6 -
 .../setup/security/notebook_authorization.html     |    6 -
 .../setup/security/shiro_authentication.html       |    6 -
 .../setup/storage/configuration_storage.html       |    6 -
 .../0.11.0/setup/storage/notebook_storage.html     |    6 -
 .../usage/display_system/angular_backend.html      |    6 -
 .../usage/display_system/angular_frontend.html     |    6 -
 output/docs/0.11.0/usage/display_system/basic.html |   10 +-
 output/docs/0.11.0/usage/dynamic_form/intro.html   |    6 -
 .../usage/interpreter/dependency_management.html   |    6 -
 .../0.11.0/usage/interpreter/dynamic_loading.html  |    6 -
 .../0.11.0/usage/interpreter/execution_hooks.html  |    6 -
 .../0.11.0/usage/interpreter/installation.html     |    6 -
 .../interpreter/interpreter_binding_mode.html      |    6 -
 output/docs/0.11.0/usage/interpreter/overview.html |    6 -
 .../usage/interpreter/user_impersonation.html      |    6 -
 .../usage/other_features/cron_scheduler.html       |    6 -
 .../usage/other_features/customizing_homepage.html |    6 -
 .../usage/other_features/notebook_actions.html     |    6 -
 .../usage/other_features/personalized_mode.html    |    6 -
 .../other_features/publishing_paragraphs.html      |    6 -
 .../usage/other_features/zeppelin_context.html     |    6 -
 .../docs/0.11.0/usage/rest_api/configuration.html  |    6 -
 output/docs/0.11.0/usage/rest_api/credential.html  |    6 -
 output/docs/0.11.0/usage/rest_api/helium.html      |    6 -
 output/docs/0.11.0/usage/rest_api/interpreter.html |    6 -
 output/docs/0.11.0/usage/rest_api/notebook.html    |    6 -
 .../0.11.0/usage/rest_api/notebook_repository.html |    6 -
 .../0.11.0/usage/rest_api/zeppelin_server.html     |    6 -
 .../docs/0.11.0/usage/zeppelin_sdk/client_api.html |    6 -
 .../0.11.0/usage/zeppelin_sdk/session_api.html     |    6 -
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 .../contribution/how_to_contribute_code.html       |    6 -
 .../contribution/how_to_contribute_website.html    |    6 -
 .../contribution/useful_developer_tools.html       |    6 -
 .../docs/0.11.1/development/helium/overview.html   |    6 -
 .../development/helium/writing_application.html    |    6 -
 .../0.11.1/development/helium/writing_spell.html   |    6 -
 .../helium/writing_visualization_basic.html        |    6 -
 .../writing_visualization_transformation.html      |    6 -
 .../development/writing_zeppelin_interpreter.html  |    6 -
 output/docs/0.11.1/index.html                      |    6 -
 output/docs/0.11.1/interpreter/alluxio.html        |    6 -
 output/docs/0.11.1/interpreter/bigquery.html       |    6 -
 output/docs/0.11.1/interpreter/cassandra.html      |    6 -
 output/docs/0.11.1/interpreter/elasticsearch.html  |    6 -
 output/docs/0.11.1/interpreter/flink.html          |    6 -
 output/docs/0.11.1/interpreter/groovy.html         |    6 -
 output/docs/0.11.1/interpreter/hbase.html          |    6 -
 output/docs/0.11.1/interpreter/hdfs.html           |    6 -
 output/docs/0.11.1/interpreter/hive.html           |    6 -
 output/docs/0.11.1/interpreter/influxdb.html       |    6 -
 output/docs/0.11.1/interpreter/java.html           |    6 -
 output/docs/0.11.1/interpreter/jdbc.html           |    6 -
 output/docs/0.11.1/interpreter/jupyter.html        |    6 -
 output/docs/0.11.1/interpreter/livy.html           |    6 -
 output/docs/0.11.1/interpreter/mahout.html         |    6 -
 output/docs/0.11.1/interpreter/markdown.html       |    6 -
 output/docs/0.11.1/interpreter/mongodb.html        |    6 -
 output/docs/0.11.1/interpreter/neo4j.html          |    6 -
 output/docs/0.11.1/interpreter/postgresql.html     |    6 -
 output/docs/0.11.1/interpreter/python.html         |    6 -
 output/docs/0.11.1/interpreter/r.html              |    6 -
 output/docs/0.11.1/interpreter/shell.html          |    6 -
 output/docs/0.11.1/interpreter/spark.html          |    6 -
 output/docs/0.11.1/interpreter/sparql.html         |    6 -
 output/docs/0.11.1/interpreter/submarine.html      |    6 -
 output/docs/0.11.1/pleasecontribute.html           |    6 -
 output/docs/0.11.1/quickstart/docker.html          |    6 -
 output/docs/0.11.1/quickstart/explore_ui.html      |    6 -
 .../0.11.1/quickstart/flink_with_zeppelin.html     |    6 -
 output/docs/0.11.1/quickstart/install.html         |    6 -
 output/docs/0.11.1/quickstart/kubernetes.html      |    6 -
 .../0.11.1/quickstart/python_with_zeppelin.html    |    6 -
 output/docs/0.11.1/quickstart/r_with_zeppelin.html |    6 -
 .../0.11.1/quickstart/spark_with_zeppelin.html     |    6 -
 .../docs/0.11.1/quickstart/sql_with_zeppelin.html  |    6 -
 output/docs/0.11.1/quickstart/tutorial.html        |    6 -
 output/docs/0.11.1/quickstart/yarn.html            |    6 -
 output/docs/0.11.1/screenshots.html                |    6 -
 output/docs/0.11.1/search.html                     |    6 -
 .../0.11.1/setup/basics/hadoop_integration.html    |    6 -
 output/docs/0.11.1/setup/basics/how_to_build.html  |    7 -
 .../0.11.1/setup/basics/multi_user_support.html    |    6 -
 output/docs/0.11.1/setup/basics/systemd.html       |    6 -
 output/docs/0.11.1/setup/deployment/cdh.html       |    6 -
 output/docs/0.11.1/setup/deployment/docker.html    |    6 -
 .../setup/deployment/flink_and_spark_cluster.html  |    6 -
 .../setup/deployment/spark_cluster_mode.html       |    6 -
 .../0.11.1/setup/deployment/virtual_machine.html   |    6 -
 .../docs/0.11.1/setup/deployment/yarn_install.html |    6 -
 .../docs/0.11.1/setup/operation/configuration.html |    6 -
 output/docs/0.11.1/setup/operation/monitoring.html |    6 -
 .../docs/0.11.1/setup/operation/proxy_setting.html |    6 -
 .../0.11.1/setup/operation/trouble_shooting.html   |    6 -
 output/docs/0.11.1/setup/operation/upgrading.html  |    6 -
 .../setup/security/authentication_nginx.html       |    6 -
 .../setup/security/datasource_authorization.html   |    6 -
 .../setup/security/http_security_headers.html      |    6 -
 .../setup/security/notebook_authorization.html     |    6 -
 .../setup/security/shiro_authentication.html       |    6 -
 .../setup/storage/configuration_storage.html       |    6 -
 .../0.11.1/setup/storage/notebook_storage.html     |    6 -
 .../usage/display_system/angular_backend.html      |    6 -
 .../usage/display_system/angular_frontend.html     |    6 -
 output/docs/0.11.1/usage/display_system/basic.html |   10 +-
 output/docs/0.11.1/usage/dynamic_form/intro.html   |    6 -
 .../usage/interpreter/dependency_management.html   |    6 -
 .../0.11.1/usage/interpreter/dynamic_loading.html  |    6 -
 .../0.11.1/usage/interpreter/execution_hooks.html  |    6 -
 .../0.11.1/usage/interpreter/installation.html     |    6 -
 .../interpreter/interpreter_binding_mode.html      |    6 -
 output/docs/0.11.1/usage/interpreter/overview.html |    6 -
 .../usage/interpreter/user_impersonation.html      |    6 -
 .../usage/other_features/cron_scheduler.html       |    6 -
 .../usage/other_features/customizing_homepage.html |    6 -
 .../usage/other_features/notebook_actions.html     |    6 -
 .../usage/other_features/personalized_mode.html    |    6 -
 .../other_features/publishing_paragraphs.html      |    6 -
 .../usage/other_features/zeppelin_context.html     |    6 -
 .../docs/0.11.1/usage/rest_api/configuration.html  |    6 -
 output/docs/0.11.1/usage/rest_api/credential.html  |    6 -
 output/docs/0.11.1/usage/rest_api/helium.html      |    6 -
 output/docs/0.11.1/usage/rest_api/interpreter.html |    6 -
 output/docs/0.11.1/usage/rest_api/notebook.html    |    6 -
 .../0.11.1/usage/rest_api/notebook_repository.html |    6 -
 .../0.11.1/usage/rest_api/zeppelin_server.html     |    6 -
 .../docs/0.11.1/usage/zeppelin_sdk/client_api.html |    6 -
 .../0.11.1/usage/zeppelin_sdk/session_api.html     |    6 -
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 .../contribution/how_to_contribute_code.html       |    6 -
 .../contribution/how_to_contribute_website.html    |    6 -
 .../contribution/useful_developer_tools.html       |    6 -
 .../docs/0.11.2/development/helium/overview.html   |    6 -
 .../development/helium/writing_application.html    |    6 -
 .../0.11.2/development/helium/writing_spell.html   |    6 -
 .../helium/writing_visualization_basic.html        |    6 -
 .../writing_visualization_transformation.html      |    6 -
 .../development/writing_zeppelin_interpreter.html  |    6 -
 output/docs/0.11.2/index.html                      |    6 -
 output/docs/0.11.2/interpreter/alluxio.html        |    6 -
 output/docs/0.11.2/interpreter/bigquery.html       |    6 -
 output/docs/0.11.2/interpreter/cassandra.html      |    6 -
 output/docs/0.11.2/interpreter/elasticsearch.html  |    6 -
 output/docs/0.11.2/interpreter/flink.html          |    6 -
 output/docs/0.11.2/interpreter/groovy.html         |    6 -
 output/docs/0.11.2/interpreter/hbase.html          |    6 -
 output/docs/0.11.2/interpreter/hdfs.html           |    6 -
 output/docs/0.11.2/interpreter/hive.html           |    6 -
 output/docs/0.11.2/interpreter/influxdb.html       |    6 -
 output/docs/0.11.2/interpreter/java.html           |    6 -
 output/docs/0.11.2/interpreter/jdbc.html           |    6 -
 output/docs/0.11.2/interpreter/jupyter.html        |    6 -
 output/docs/0.11.2/interpreter/livy.html           |    6 -
 output/docs/0.11.2/interpreter/mahout.html         |    6 -
 output/docs/0.11.2/interpreter/markdown.html       |    6 -
 output/docs/0.11.2/interpreter/mongodb.html        |    6 -
 output/docs/0.11.2/interpreter/neo4j.html          |    6 -
 output/docs/0.11.2/interpreter/postgresql.html     |    6 -
 output/docs/0.11.2/interpreter/python.html         |    6 -
 output/docs/0.11.2/interpreter/r.html              |    6 -
 output/docs/0.11.2/interpreter/shell.html          |    6 -
 output/docs/0.11.2/interpreter/spark.html          |    6 -
 output/docs/0.11.2/interpreter/sparql.html         |    6 -
 output/docs/0.11.2/interpreter/submarine.html      |    6 -
 output/docs/0.11.2/pleasecontribute.html           |    6 -
 output/docs/0.11.2/quickstart/docker.html          |    6 -
 output/docs/0.11.2/quickstart/explore_ui.html      |    6 -
 .../0.11.2/quickstart/flink_with_zeppelin.html     |    6 -
 output/docs/0.11.2/quickstart/install.html         |    6 -
 output/docs/0.11.2/quickstart/kubernetes.html      |    6 -
 .../0.11.2/quickstart/python_with_zeppelin.html    |    6 -
 output/docs/0.11.2/quickstart/r_with_zeppelin.html |    6 -
 .../0.11.2/quickstart/spark_with_zeppelin.html     |    6 -
 .../docs/0.11.2/quickstart/sql_with_zeppelin.html  |    6 -
 output/docs/0.11.2/quickstart/tutorial.html        |    6 -
 output/docs/0.11.2/quickstart/yarn.html            |    6 -
 output/docs/0.11.2/screenshots.html                |    6 -
 output/docs/0.11.2/search.html                     |    6 -
 .../0.11.2/setup/basics/hadoop_integration.html    |    6 -
 output/docs/0.11.2/setup/basics/how_to_build.html  |    7 -
 .../0.11.2/setup/basics/multi_user_support.html    |    6 -
 output/docs/0.11.2/setup/basics/systemd.html       |    6 -
 output/docs/0.11.2/setup/deployment/cdh.html       |    6 -
 output/docs/0.11.2/setup/deployment/docker.html    |    6 -
 .../setup/deployment/flink_and_spark_cluster.html  |    6 -
 .../setup/deployment/spark_cluster_mode.html       |    6 -
 .../0.11.2/setup/deployment/virtual_machine.html   |    6 -
 .../docs/0.11.2/setup/deployment/yarn_install.html |    6 -
 .../docs/0.11.2/setup/operation/configuration.html |    6 -
 output/docs/0.11.2/setup/operation/monitoring.html |    6 -
 .../docs/0.11.2/setup/operation/proxy_setting.html |    6 -
 .../0.11.2/setup/operation/trouble_shooting.html   |    6 -
 output/docs/0.11.2/setup/operation/upgrading.html  |    6 -
 .../setup/security/authentication_nginx.html       |    6 -
 .../setup/security/datasource_authorization.html   |    6 -
 .../setup/security/http_security_headers.html      |    6 -
 .../setup/security/notebook_authorization.html     |    6 -
 .../setup/security/shiro_authentication.html       |    6 -
 .../setup/storage/configuration_storage.html       |    6 -
 .../0.11.2/setup/storage/notebook_storage.html     |    6 -
 .../usage/display_system/angular_backend.html      |    6 -
 .../usage/display_system/angular_frontend.html     |    6 -
 output/docs/0.11.2/usage/display_system/basic.html |   10 +-
 output/docs/0.11.2/usage/dynamic_form/intro.html   |    6 -
 .../usage/interpreter/dependency_management.html   |    6 -
 .../0.11.2/usage/interpreter/dynamic_loading.html  |    6 -
 .../0.11.2/usage/interpreter/execution_hooks.html  |    6 -
 .../0.11.2/usage/interpreter/installation.html     |    6 -
 .../interpreter/interpreter_binding_mode.html      |    6 -
 output/docs/0.11.2/usage/interpreter/overview.html |    6 -
 .../usage/interpreter/user_impersonation.html      |    6 -
 .../usage/other_features/cron_scheduler.html       |    6 -
 .../usage/other_features/customizing_homepage.html |    6 -
 .../usage/other_features/notebook_actions.html     |    6 -
 .../usage/other_features/personalized_mode.html    |    6 -
 .../other_features/publishing_paragraphs.html      |    6 -
 .../usage/other_features/zeppelin_context.html     |    6 -
 .../docs/0.11.2/usage/rest_api/configuration.html  |    6 -
 output/docs/0.11.2/usage/rest_api/credential.html  |    6 -
 output/docs/0.11.2/usage/rest_api/helium.html      |    6 -
 output/docs/0.11.2/usage/rest_api/interpreter.html |    6 -
 output/docs/0.11.2/usage/rest_api/notebook.html    |    6 -
 .../0.11.2/usage/rest_api/notebook_repository.html |    6 -
 .../0.11.2/usage/rest_api/zeppelin_server.html     |    6 -
 .../docs/0.11.2/usage/zeppelin_sdk/client_api.html |    6 -
 .../0.11.2/usage/zeppelin_sdk/session_api.html     |    6 -
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 .../contribution/how_to_contribute_code.html       |    6 -
 .../contribution/how_to_contribute_website.html    |    6 -
 .../contribution/useful_developer_tools.html       |    6 -
 .../docs/0.12.0/development/helium/overview.html   |    6 -
 .../development/helium/writing_application.html    |    6 -
 .../0.12.0/development/helium/writing_spell.html   |    6 -
 .../helium/writing_visualization_basic.html        |    6 -
 .../writing_visualization_transformation.html      |    6 -
 .../development/writing_zeppelin_interpreter.html  |    6 -
 output/docs/0.12.0/index.html                      |    6 -
 output/docs/0.12.0/interpreter/alluxio.html        |    6 -
 output/docs/0.12.0/interpreter/bigquery.html       |    6 -
 output/docs/0.12.0/interpreter/cassandra.html      |    6 -
 output/docs/0.12.0/interpreter/elasticsearch.html  |    6 -
 output/docs/0.12.0/interpreter/flink.html          |    6 -
 output/docs/0.12.0/interpreter/groovy.html         |    6 -
 output/docs/0.12.0/interpreter/hbase.html          |    6 -
 output/docs/0.12.0/interpreter/hdfs.html           |    6 -
 output/docs/0.12.0/interpreter/hive.html           |    6 -
 output/docs/0.12.0/interpreter/influxdb.html       |    6 -
 output/docs/0.12.0/interpreter/java.html           |    6 -
 output/docs/0.12.0/interpreter/jdbc.html           |    6 -
 output/docs/0.12.0/interpreter/jupyter.html        |    6 -
 output/docs/0.12.0/interpreter/livy.html           |    6 -
 output/docs/0.12.0/interpreter/mahout.html         |    6 -
 output/docs/0.12.0/interpreter/markdown.html       |    6 -
 output/docs/0.12.0/interpreter/mongodb.html        |    6 -
 output/docs/0.12.0/interpreter/neo4j.html          |    6 -
 output/docs/0.12.0/interpreter/postgresql.html     |    6 -
 output/docs/0.12.0/interpreter/python.html         |    6 -
 output/docs/0.12.0/interpreter/r.html              |    6 -
 output/docs/0.12.0/interpreter/shell.html          |    6 -
 output/docs/0.12.0/interpreter/spark.html          |    6 -
 output/docs/0.12.0/interpreter/sparql.html         |    6 -
 output/docs/0.12.0/pleasecontribute.html           |    6 -
 output/docs/0.12.0/quickstart/docker.html          |    6 -
 output/docs/0.12.0/quickstart/explore_ui.html      |    6 -
 .../0.12.0/quickstart/flink_with_zeppelin.html     |    6 -
 output/docs/0.12.0/quickstart/install.html         |    6 -
 output/docs/0.12.0/quickstart/kubernetes.html      |    6 -
 .../0.12.0/quickstart/python_with_zeppelin.html    |    6 -
 output/docs/0.12.0/quickstart/r_with_zeppelin.html |    6 -
 .../0.12.0/quickstart/spark_with_zeppelin.html     |    6 -
 .../docs/0.12.0/quickstart/sql_with_zeppelin.html  |    6 -
 output/docs/0.12.0/quickstart/tutorial.html        |    6 -
 output/docs/0.12.0/quickstart/yarn.html            |    6 -
 output/docs/0.12.0/screenshots.html                |    6 -
 output/docs/0.12.0/search.html                     |    6 -
 .../0.12.0/setup/basics/hadoop_integration.html    |    6 -
 output/docs/0.12.0/setup/basics/how_to_build.html  |    6 -
 .../0.12.0/setup/basics/multi_user_support.html    |    6 -
 output/docs/0.12.0/setup/basics/systemd.html       |    6 -
 output/docs/0.12.0/setup/deployment/cdh.html       |    6 -
 output/docs/0.12.0/setup/deployment/docker.html    |    6 -
 .../setup/deployment/flink_and_spark_cluster.html  |    6 -
 .../setup/deployment/spark_cluster_mode.html       |    6 -
 .../0.12.0/setup/deployment/virtual_machine.html   |    6 -
 .../docs/0.12.0/setup/deployment/yarn_install.html |    6 -
 .../docs/0.12.0/setup/operation/configuration.html |    6 -
 output/docs/0.12.0/setup/operation/monitoring.html |    6 -
 .../docs/0.12.0/setup/operation/proxy_setting.html |    6 -
 .../0.12.0/setup/operation/trouble_shooting.html   |    6 -
 output/docs/0.12.0/setup/operation/upgrading.html  |    6 -
 .../setup/security/authentication_nginx.html       |    6 -
 .../setup/security/datasource_authorization.html   |    6 -
 .../setup/security/http_security_headers.html      |    6 -
 .../setup/security/notebook_authorization.html     |    6 -
 .../setup/security/shiro_authentication.html       |    6 -
 .../setup/storage/configuration_storage.html       |    6 -
 .../0.12.0/setup/storage/notebook_storage.html     |    6 -
 .../usage/display_system/angular_backend.html      |    6 -
 .../usage/display_system/angular_frontend.html     |    6 -
 output/docs/0.12.0/usage/display_system/basic.html |   10 +-
 output/docs/0.12.0/usage/dynamic_form/intro.html   |    6 -
 .../usage/interpreter/dependency_management.html   |    6 -
 .../0.12.0/usage/interpreter/dynamic_loading.html  |    6 -
 .../0.12.0/usage/interpreter/execution_hooks.html  |    6 -
 .../0.12.0/usage/interpreter/installation.html     |    6 -
 .../interpreter/interpreter_binding_mode.html      |    6 -
 output/docs/0.12.0/usage/interpreter/overview.html |    6 -
 .../usage/interpreter/user_impersonation.html      |    6 -
 .../usage/other_features/cron_scheduler.html       |    6 -
 .../usage/other_features/customizing_homepage.html |    6 -
 .../usage/other_features/notebook_actions.html     |    6 -
 .../usage/other_features/personalized_mode.html    |    6 -
 .../other_features/publishing_paragraphs.html      |    6 -
 .../usage/other_features/zeppelin_context.html     |    6 -
 .../docs/0.12.0/usage/rest_api/configuration.html  |    6 -
 output/docs/0.12.0/usage/rest_api/credential.html  |    6 -
 output/docs/0.12.0/usage/rest_api/helium.html      |    6 -
 output/docs/0.12.0/usage/rest_api/interpreter.html |    6 -
 output/docs/0.12.0/usage/rest_api/notebook.html    |    6 -
 .../0.12.0/usage/rest_api/notebook_repository.html |    6 -
 .../0.12.0/usage/rest_api/zeppelin_server.html     |    6 -
 .../docs/0.12.0/usage/zeppelin_sdk/client_api.html |    6 -
 .../0.12.0/usage/zeppelin_sdk/session_api.html     |    6 -
 .../assets/themes/fonts/fontawesome-webfont.eot    |  Bin 0 -> 56006 bytes
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 .../assets/themes/fonts/fontawesome-webfont.ttf    |  Bin 0 -> 112160 bytes
 .../assets/themes/fonts/fontawesome-webfont.woff   |  Bin 0 -> 65452 bytes
 .../assets/themes/zeppelin/font-awesome.min.css    |    4 +
 .../contribution/how_to_contribute_code.html       |   26 +-
 .../contribution/how_to_contribute_website.html    |   26 +-
 .../contribution/useful_developer_tools.html       |   26 +-
 .../docs/0.12.1/development/helium/overview.html   |   26 +-
 .../development/helium/writing_application.html    |   26 +-
 .../0.12.1/development/helium/writing_spell.html   |   26 +-
 .../helium/writing_visualization_basic.html        |   26 +-
 .../writing_visualization_transformation.html      |   26 +-
 .../development/writing_zeppelin_interpreter.html  |   26 +-
 output/docs/0.12.1/index.html                      |   26 +-
 output/docs/0.12.1/interpreter/alluxio.html        |   26 +-
 output/docs/0.12.1/interpreter/bigquery.html       |   26 +-
 output/docs/0.12.1/interpreter/cassandra.html      |   26 +-
 output/docs/0.12.1/interpreter/elasticsearch.html  |   26 +-
 output/docs/0.12.1/interpreter/flink.html          |   26 +-
 output/docs/0.12.1/interpreter/groovy.html         |   26 +-
 output/docs/0.12.1/interpreter/hbase.html          |   26 +-
 output/docs/0.12.1/interpreter/hdfs.html           |   26 +-
 output/docs/0.12.1/interpreter/hive.html           |   26 +-
 output/docs/0.12.1/interpreter/influxdb.html       |   26 +-
 output/docs/0.12.1/interpreter/java.html           |   26 +-
 output/docs/0.12.1/interpreter/jdbc.html           |   26 +-
 output/docs/0.12.1/interpreter/jupyter.html        |   26 +-
 output/docs/0.12.1/interpreter/livy.html           |   26 +-
 output/docs/0.12.1/interpreter/mahout.html         |   26 +-
 output/docs/0.12.1/interpreter/markdown.html       |   26 +-
 output/docs/0.12.1/interpreter/mongodb.html        |   26 +-
 output/docs/0.12.1/interpreter/neo4j.html          |   26 +-
 output/docs/0.12.1/interpreter/postgresql.html     |   26 +-
 output/docs/0.12.1/interpreter/python.html         |   26 +-
 output/docs/0.12.1/interpreter/r.html              |   26 +-
 output/docs/0.12.1/interpreter/shell.html          |   26 +-
 output/docs/0.12.1/interpreter/spark.html          |   26 +-
 output/docs/0.12.1/interpreter/sparql.html         |   26 +-
 output/docs/0.12.1/pleasecontribute.html           |   26 +-
 output/docs/0.12.1/quickstart/docker.html          |   26 +-
 output/docs/0.12.1/quickstart/explore_ui.html      |   26 +-
 .../0.12.1/quickstart/flink_with_zeppelin.html     |   26 +-
 output/docs/0.12.1/quickstart/install.html         |   26 +-
 output/docs/0.12.1/quickstart/kubernetes.html      |   26 +-
 .../0.12.1/quickstart/python_with_zeppelin.html    |   26 +-
 output/docs/0.12.1/quickstart/r_with_zeppelin.html |   26 +-
 .../0.12.1/quickstart/spark_with_zeppelin.html     |   26 +-
 .../docs/0.12.1/quickstart/sql_with_zeppelin.html  |   26 +-
 output/docs/0.12.1/quickstart/tutorial.html        |   26 +-
 output/docs/0.12.1/quickstart/yarn.html            |   26 +-
 output/docs/0.12.1/screenshots.html                |   26 +-
 output/docs/0.12.1/search.html                     |   26 +-
 .../0.12.1/setup/basics/hadoop_integration.html    |   26 +-
 output/docs/0.12.1/setup/basics/how_to_build.html  |   26 +-
 .../0.12.1/setup/basics/multi_user_support.html    |   26 +-
 output/docs/0.12.1/setup/basics/systemd.html       |   26 +-
 output/docs/0.12.1/setup/deployment/cdh.html       |   26 +-
 output/docs/0.12.1/setup/deployment/docker.html    |   26 +-
 .../setup/deployment/flink_and_spark_cluster.html  |   26 +-
 .../setup/deployment/spark_cluster_mode.html       |   26 +-
 .../0.12.1/setup/deployment/virtual_machine.html   |   26 +-
 .../docs/0.12.1/setup/deployment/yarn_install.html |   26 +-
 .../docs/0.12.1/setup/operation/configuration.html |   26 +-
 output/docs/0.12.1/setup/operation/monitoring.html |   26 +-
 .../docs/0.12.1/setup/operation/proxy_setting.html |   26 +-
 .../0.12.1/setup/operation/trouble_shooting.html   |   26 +-
 output/docs/0.12.1/setup/operation/upgrading.html  |   26 +-
 .../setup/security/authentication_nginx.html       |   26 +-
 .../setup/security/datasource_authorization.html   |   26 +-
 .../setup/security/http_security_headers.html      |   26 +-
 .../setup/security/notebook_authorization.html     |   26 +-
 .../setup/security/shiro_authentication.html       |   26 +-
 .../setup/storage/configuration_storage.html       |   26 +-
 .../0.12.1/setup/storage/notebook_storage.html     |   26 +-
 .../usage/display_system/angular_backend.html      |   26 +-
 .../usage/display_system/angular_frontend.html     |   26 +-
 output/docs/0.12.1/usage/display_system/basic.html |   30 +-
 output/docs/0.12.1/usage/dynamic_form/intro.html   |   26 +-
 .../usage/interpreter/dependency_management.html   |   26 +-
 .../0.12.1/usage/interpreter/dynamic_loading.html  |   26 +-
 .../0.12.1/usage/interpreter/execution_hooks.html  |   26 +-
 .../0.12.1/usage/interpreter/installation.html     |   26 +-
 .../interpreter/interpreter_binding_mode.html      |   26 +-
 output/docs/0.12.1/usage/interpreter/overview.html |   26 +-
 .../usage/interpreter/user_impersonation.html      |   26 +-
 .../usage/other_features/cron_scheduler.html       |   26 +-
 .../usage/other_features/customizing_homepage.html |   26 +-
 .../usage/other_features/notebook_actions.html     |   26 +-
 .../usage/other_features/personalized_mode.html    |   26 +-
 .../other_features/publishing_paragraphs.html      |   26 +-
 .../usage/other_features/zeppelin_context.html     |   26 +-
 .../docs/0.12.1/usage/rest_api/configuration.html  |   26 +-
 output/docs/0.12.1/usage/rest_api/credential.html  |   26 +-
 output/docs/0.12.1/usage/rest_api/helium.html      |   26 +-
 output/docs/0.12.1/usage/rest_api/interpreter.html |   26 +-
 output/docs/0.12.1/usage/rest_api/notebook.html    |   26 +-
 .../0.12.1/usage/rest_api/notebook_repository.html |   26 +-
 .../0.12.1/usage/rest_api/zeppelin_server.html     |   26 +-
 .../docs/0.12.1/usage/zeppelin_sdk/client_api.html |   26 +-
 .../0.12.1/usage/zeppelin_sdk/session_api.html     |   26 +-
 .../assets/themes/fonts/fontawesome-webfont.eot    |  Bin 0 -> 56006 bytes
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 .../assets/themes/fonts/fontawesome-webfont.ttf    |  Bin 0 -> 112160 bytes
 .../assets/themes/fonts/fontawesome-webfont.woff   |  Bin 0 -> 65452 bytes
 .../assets/themes/zeppelin/font-awesome.min.css    |    4 +
 .../development/howtocontribute.html               |    6 -
 .../development/howtocontributewebsite.html        |    6 -
 .../development/writingzeppelininterpreter.html    |    6 -
 .../0.5.0-incubating/displaysystem/angular.html    |    6 -
 .../0.5.0-incubating/displaysystem/display.html    |    6 -
 .../docs/0.5.0-incubating/displaysystem/table.html |    6 -
 output/docs/0.5.0-incubating/docs.html             |    6 -
 output/docs/0.5.0-incubating/index.html            |    6 -
 output/docs/0.5.0-incubating/install/install.html  |    6 -
 .../0.5.0-incubating/install/yarn_install.html     |    6 -
 .../0.5.0-incubating/interpreter/cassandra.html    |    6 -
 .../docs/0.5.0-incubating/interpreter/flink.html   |    6 -
 .../docs/0.5.0-incubating/interpreter/geode.html   |    8 +-
 .../docs/0.5.0-incubating/interpreter/ignite.html  |    6 -
 output/docs/0.5.0-incubating/interpreter/lens.html |    6 -
 .../0.5.0-incubating/interpreter/postgresql.html   |    8 +-
 .../docs/0.5.0-incubating/interpreter/spark.html   |    6 -
 .../docs/0.5.0-incubating/manual/dynamicform.html  |    6 -
 .../docs/0.5.0-incubating/manual/interpreters.html |    6 -
 .../manual/notebookashomepage.html                 |    6 -
 output/docs/0.5.0-incubating/pleasecontribute.html |    6 -
 .../rest-api/rest-interpreter.html                 |    6 -
 .../0.5.0-incubating/rest-api/rest-notebook.html   |    6 -
 output/docs/0.5.0-incubating/screenshots.html      |    6 -
 output/docs/0.5.0-incubating/storage/storage.html  |    6 -
 .../docs/0.5.0-incubating/tutorial/tutorial.html   |    6 -
 .../assets/themes/fonts/fontawesome-webfont.eot    |  Bin 0 -> 56006 bytes
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 .../assets/themes/fonts/fontawesome-webfont.ttf    |  Bin 0 -> 112160 bytes
 .../assets/themes/fonts/fontawesome-webfont.woff   |  Bin 0 -> 65452 bytes
 .../assets/themes/zeppelin/font-awesome.min.css    |    4 +
 .../development/howtocontribute.html               |    6 -
 .../development/howtocontributewebsite.html        |    6 -
 .../development/writingzeppelininterpreter.html    |    6 -
 .../0.5.5-incubating/displaysystem/angular.html    |    6 -
 .../0.5.5-incubating/displaysystem/display.html    |    6 -
 .../docs/0.5.5-incubating/displaysystem/table.html |    6 -
 output/docs/0.5.5-incubating/docs.html             |    6 -
 output/docs/0.5.5-incubating/index.html            |    6 -
 output/docs/0.5.5-incubating/install/install.html  |    6 -
 .../0.5.5-incubating/install/yarn_install.html     |    6 -
 .../0.5.5-incubating/interpreter/cassandra.html    |    6 -
 .../docs/0.5.5-incubating/interpreter/flink.html   |    6 -
 .../docs/0.5.5-incubating/interpreter/geode.html   |    8 +-
 .../docs/0.5.5-incubating/interpreter/ignite.html  |    6 -
 output/docs/0.5.5-incubating/interpreter/lens.html |    6 -
 .../0.5.5-incubating/interpreter/postgresql.html   |    8 +-
 .../docs/0.5.5-incubating/interpreter/spark.html   |    6 -
 .../docs/0.5.5-incubating/manual/dynamicform.html  |    6 -
 .../docs/0.5.5-incubating/manual/interpreters.html |    6 -
 .../manual/notebookashomepage.html                 |    6 -
 output/docs/0.5.5-incubating/pleasecontribute.html |    6 -
 .../rest-api/rest-interpreter.html                 |    6 -
 .../0.5.5-incubating/rest-api/rest-notebook.html   |    6 -
 output/docs/0.5.5-incubating/screenshots.html      |    6 -
 output/docs/0.5.5-incubating/storage/storage.html  |    6 -
 .../docs/0.5.5-incubating/tutorial/tutorial.html   |    6 -
 .../assets/themes/fonts/fontawesome-webfont.eot    |  Bin 0 -> 56006 bytes
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 .../assets/themes/fonts/fontawesome-webfont.ttf    |  Bin 0 -> 112160 bytes
 .../assets/themes/fonts/fontawesome-webfont.woff   |  Bin 0 -> 65452 bytes
 .../assets/themes/zeppelin/font-awesome.min.css    |    4 +
 .../development/howtocontribute.html               |    6 -
 .../development/howtocontributewebsite.html        |    6 -
 .../development/writingzeppelininterpreter.html    |    6 -
 .../0.5.6-incubating/displaysystem/angular.html    |    6 -
 .../0.5.6-incubating/displaysystem/display.html    |    6 -
 .../docs/0.5.6-incubating/displaysystem/table.html |    6 -
 output/docs/0.5.6-incubating/index.html            |    6 -
 output/docs/0.5.6-incubating/install/install.html  |    6 -
 .../0.5.6-incubating/install/virtual_machine.html  |    6 -
 .../0.5.6-incubating/install/yarn_install.html     |    6 -
 .../0.5.6-incubating/interpreter/cassandra.html    |    6 -
 .../interpreter/elasticsearch.html                 |    6 -
 .../docs/0.5.6-incubating/interpreter/flink.html   |    6 -
 .../docs/0.5.6-incubating/interpreter/geode.html   |    8 +-
 output/docs/0.5.6-incubating/interpreter/hive.html |    6 -
 .../docs/0.5.6-incubating/interpreter/ignite.html  |    6 -
 output/docs/0.5.6-incubating/interpreter/lens.html |    6 -
 .../0.5.6-incubating/interpreter/markdown.html     |    6 -
 .../0.5.6-incubating/interpreter/postgresql.html   |    8 +-
 .../0.5.6-incubating/interpreter/scalding.html     |    6 -
 .../docs/0.5.6-incubating/interpreter/spark.html   |    6 -
 .../docs/0.5.6-incubating/manual/dynamicform.html  |    6 -
 .../docs/0.5.6-incubating/manual/interpreters.html |    6 -
 .../manual/notebookashomepage.html                 |    6 -
 output/docs/0.5.6-incubating/pleasecontribute.html |    6 -
 .../rest-api/rest-interpreter.html                 |    6 -
 .../0.5.6-incubating/rest-api/rest-notebook.html   |    6 -
 output/docs/0.5.6-incubating/screenshots.html      |    6 -
 output/docs/0.5.6-incubating/storage/storage.html  |    6 -
 .../docs/0.5.6-incubating/tutorial/tutorial.html   |    6 -
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 output/docs/0.6.0/development/howtocontribute.html |    6 -
 .../0.6.0/development/howtocontributewebsite.html  |    6 -
 .../development/writingzeppelininterpreter.html    |    6 -
 .../docs/0.6.0/displaysystem/back-end-angular.html |    6 -
 .../0.6.0/displaysystem/basicdisplaysystem.html    |    6 -
 .../0.6.0/displaysystem/front-end-angular.html     |    6 -
 output/docs/0.6.0/index.html                       |    6 -
 output/docs/0.6.0/install/install.html             |    6 -
 output/docs/0.6.0/install/upgrade.html             |    6 -
 output/docs/0.6.0/install/virtual_machine.html     |    6 -
 output/docs/0.6.0/install/yarn_install.html        |    6 -
 output/docs/0.6.0/interpreter/alluxio.html         |    6 -
 output/docs/0.6.0/interpreter/cassandra.html       |    6 -
 output/docs/0.6.0/interpreter/elasticsearch.html   |    6 -
 output/docs/0.6.0/interpreter/flink.html           |    6 -
 output/docs/0.6.0/interpreter/geode.html           |    8 +-
 output/docs/0.6.0/interpreter/hbase.html           |    6 -
 output/docs/0.6.0/interpreter/hdfs.html            |    6 -
 output/docs/0.6.0/interpreter/hive.html            |    6 -
 output/docs/0.6.0/interpreter/ignite.html          |    6 -
 output/docs/0.6.0/interpreter/jdbc.html            |    6 -
 output/docs/0.6.0/interpreter/lens.html            |    6 -
 output/docs/0.6.0/interpreter/livy.html            |    6 -
 output/docs/0.6.0/interpreter/markdown.html        |    6 -
 output/docs/0.6.0/interpreter/postgresql.html      |    8 +-
 output/docs/0.6.0/interpreter/python.html          |    6 -
 output/docs/0.6.0/interpreter/r.html               |    6 -
 output/docs/0.6.0/interpreter/scalding.html        |    6 -
 output/docs/0.6.0/interpreter/spark.html           |    6 -
 output/docs/0.6.0/manual/dependencymanagement.html |    6 -
 output/docs/0.6.0/manual/dynamicform.html          |    6 -
 .../docs/0.6.0/manual/dynamicinterpreterload.html  |    6 -
 .../docs/0.6.0/manual/interpreterinstallation.html |    6 -
 output/docs/0.6.0/manual/interpreters.html         |    6 -
 output/docs/0.6.0/manual/notebookashomepage.html   |    6 -
 output/docs/0.6.0/manual/publish.html              |    6 -
 output/docs/0.6.0/pleasecontribute.html            |    6 -
 .../docs/0.6.0/quickstart/explorezeppelinui.html   |    6 -
 output/docs/0.6.0/quickstart/tutorial.html         |    6 -
 output/docs/0.6.0/rest-api/rest-configuration.html |    6 -
 output/docs/0.6.0/rest-api/rest-interpreter.html   |    6 -
 output/docs/0.6.0/rest-api/rest-notebook.html      |    6 -
 output/docs/0.6.0/screenshots.html                 |    6 -
 output/docs/0.6.0/security/authentication.html     |    6 -
 .../0.6.0/security/interpreter_authorization.html  |    6 -
 .../0.6.0/security/notebook_authorization.html     |    6 -
 .../docs/0.6.0/security/shiroauthentication.html   |    6 -
 output/docs/0.6.0/storage/storage.html             |    6 -
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 output/docs/0.6.1/development/howtocontribute.html |    6 -
 .../0.6.1/development/howtocontributewebsite.html  |    6 -
 .../development/writingzeppelininterpreter.html    |    6 -
 .../docs/0.6.1/displaysystem/back-end-angular.html |    6 -
 .../0.6.1/displaysystem/basicdisplaysystem.html    |    6 -
 .../0.6.1/displaysystem/front-end-angular.html     |    6 -
 output/docs/0.6.1/index.html                       |    6 -
 output/docs/0.6.1/install/install.html             |    6 -
 output/docs/0.6.1/install/upgrade.html             |    6 -
 output/docs/0.6.1/install/virtual_machine.html     |    6 -
 output/docs/0.6.1/install/yarn_install.html        |    6 -
 output/docs/0.6.1/interpreter/alluxio.html         |    6 -
 output/docs/0.6.1/interpreter/bigquery.html        |    6 -
 output/docs/0.6.1/interpreter/cassandra.html       |    6 -
 output/docs/0.6.1/interpreter/elasticsearch.html   |    6 -
 output/docs/0.6.1/interpreter/flink.html           |    6 -
 output/docs/0.6.1/interpreter/geode.html           |    8 +-
 output/docs/0.6.1/interpreter/hbase.html           |    6 -
 output/docs/0.6.1/interpreter/hdfs.html            |    6 -
 output/docs/0.6.1/interpreter/hive.html            |    6 -
 output/docs/0.6.1/interpreter/ignite.html          |    6 -
 output/docs/0.6.1/interpreter/jdbc.html            |    6 -
 output/docs/0.6.1/interpreter/lens.html            |    6 -
 output/docs/0.6.1/interpreter/livy.html            |    6 -
 output/docs/0.6.1/interpreter/markdown.html        |    6 -
 output/docs/0.6.1/interpreter/postgresql.html      |    8 +-
 output/docs/0.6.1/interpreter/python.html          |    6 -
 output/docs/0.6.1/interpreter/r.html               |    6 -
 output/docs/0.6.1/interpreter/scalding.html        |    6 -
 output/docs/0.6.1/interpreter/spark.html           |    6 -
 output/docs/0.6.1/manual/dependencymanagement.html |    6 -
 output/docs/0.6.1/manual/dynamicform.html          |    6 -
 .../docs/0.6.1/manual/dynamicinterpreterload.html  |    6 -
 .../docs/0.6.1/manual/interpreterinstallation.html |    6 -
 output/docs/0.6.1/manual/interpreters.html         |    6 -
 output/docs/0.6.1/manual/notebookashomepage.html   |    6 -
 output/docs/0.6.1/manual/publish.html              |    6 -
 output/docs/0.6.1/pleasecontribute.html            |    6 -
 .../docs/0.6.1/quickstart/explorezeppelinui.html   |    6 -
 output/docs/0.6.1/quickstart/tutorial.html         |    6 -
 output/docs/0.6.1/rest-api/rest-configuration.html |    6 -
 output/docs/0.6.1/rest-api/rest-interpreter.html   |    6 -
 output/docs/0.6.1/rest-api/rest-notebook.html      |    6 -
 output/docs/0.6.1/screenshots.html                 |    6 -
 output/docs/0.6.1/security/authentication.html     |    6 -
 .../0.6.1/security/interpreter_authorization.html  |    6 -
 .../0.6.1/security/notebook_authorization.html     |    6 -
 .../docs/0.6.1/security/shiroauthentication.html   |    6 -
 output/docs/0.6.1/storage/storage.html             |    6 -
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 output/docs/0.6.2/development/howtocontribute.html |    6 -
 .../0.6.2/development/howtocontributewebsite.html  |    6 -
 .../development/writingzeppelininterpreter.html    |    6 -
 .../docs/0.6.2/displaysystem/back-end-angular.html |    6 -
 .../0.6.2/displaysystem/basicdisplaysystem.html    |    6 -
 .../0.6.2/displaysystem/front-end-angular.html     |    6 -
 output/docs/0.6.2/index.html                       |    6 -
 output/docs/0.6.2/install/install.html             |    6 -
 output/docs/0.6.2/install/upgrade.html             |    6 -
 output/docs/0.6.2/install/virtual_machine.html     |    6 -
 output/docs/0.6.2/install/yarn_install.html        |    6 -
 output/docs/0.6.2/interpreter/alluxio.html         |    6 -
 output/docs/0.6.2/interpreter/bigquery.html        |    6 -
 output/docs/0.6.2/interpreter/cassandra.html       |    6 -
 output/docs/0.6.2/interpreter/elasticsearch.html   |    6 -
 output/docs/0.6.2/interpreter/flink.html           |    6 -
 output/docs/0.6.2/interpreter/geode.html           |    8 +-
 output/docs/0.6.2/interpreter/hbase.html           |    6 -
 output/docs/0.6.2/interpreter/hdfs.html            |    6 -
 output/docs/0.6.2/interpreter/hive.html            |    6 -
 output/docs/0.6.2/interpreter/ignite.html          |    6 -
 output/docs/0.6.2/interpreter/jdbc.html            |    6 -
 output/docs/0.6.2/interpreter/lens.html            |    6 -
 output/docs/0.6.2/interpreter/livy.html            |    6 -
 output/docs/0.6.2/interpreter/markdown.html        |    6 -
 output/docs/0.6.2/interpreter/postgresql.html      |    8 +-
 output/docs/0.6.2/interpreter/python.html          |    6 -
 output/docs/0.6.2/interpreter/r.html               |    6 -
 output/docs/0.6.2/interpreter/scalding.html        |    6 -
 output/docs/0.6.2/interpreter/spark.html           |    6 -
 output/docs/0.6.2/manual/dependencymanagement.html |    6 -
 output/docs/0.6.2/manual/dynamicform.html          |    6 -
 .../docs/0.6.2/manual/dynamicinterpreterload.html  |    6 -
 .../docs/0.6.2/manual/interpreterinstallation.html |    6 -
 output/docs/0.6.2/manual/interpreters.html         |    6 -
 output/docs/0.6.2/manual/notebookashomepage.html   |    6 -
 output/docs/0.6.2/manual/publish.html              |    6 -
 output/docs/0.6.2/pleasecontribute.html            |    6 -
 .../docs/0.6.2/quickstart/explorezeppelinui.html   |    6 -
 output/docs/0.6.2/quickstart/tutorial.html         |    6 -
 output/docs/0.6.2/rest-api/rest-configuration.html |    6 -
 output/docs/0.6.2/rest-api/rest-interpreter.html   |    6 -
 output/docs/0.6.2/rest-api/rest-notebook.html      |    6 -
 output/docs/0.6.2/screenshots.html                 |    6 -
 output/docs/0.6.2/security/authentication.html     |    6 -
 .../0.6.2/security/interpreter_authorization.html  |    6 -
 .../0.6.2/security/notebook_authorization.html     |    6 -
 .../docs/0.6.2/security/shiroauthentication.html   |    6 -
 output/docs/0.6.2/storage/storage.html             |    6 -
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 output/docs/0.7.0/development/howtocontribute.html |    6 -
 .../0.7.0/development/howtocontributewebsite.html  |    6 -
 .../development/writingzeppelinapplication.html    |    6 -
 .../development/writingzeppelininterpreter.html    |    6 -
 .../development/writingzeppelinvisualization.html  |    6 -
 .../docs/0.7.0/displaysystem/back-end-angular.html |    6 -
 .../0.7.0/displaysystem/basicdisplaysystem.html    |    6 -
 .../0.7.0/displaysystem/front-end-angular.html     |    6 -
 output/docs/0.7.0/index.html                       |    6 -
 output/docs/0.7.0/install/build.html               |    7 -
 output/docs/0.7.0/install/cdh.html                 |    6 -
 output/docs/0.7.0/install/configuration.html       |    6 -
 output/docs/0.7.0/install/docker.html              |    6 -
 output/docs/0.7.0/install/install.html             |    6 -
 output/docs/0.7.0/install/spark_cluster_mode.html  |    6 -
 output/docs/0.7.0/install/upgrade.html             |    6 -
 output/docs/0.7.0/install/virtual_machine.html     |    6 -
 output/docs/0.7.0/install/yarn_install.html        |    6 -
 output/docs/0.7.0/interpreter/alluxio.html         |    6 -
 output/docs/0.7.0/interpreter/beam.html            |    6 -
 output/docs/0.7.0/interpreter/bigquery.html        |    6 -
 output/docs/0.7.0/interpreter/cassandra.html       |    6 -
 output/docs/0.7.0/interpreter/elasticsearch.html   |    6 -
 output/docs/0.7.0/interpreter/flink.html           |    6 -
 output/docs/0.7.0/interpreter/geode.html           |    8 +-
 output/docs/0.7.0/interpreter/hbase.html           |    6 -
 output/docs/0.7.0/interpreter/hdfs.html            |    6 -
 output/docs/0.7.0/interpreter/hive.html            |    6 -
 output/docs/0.7.0/interpreter/ignite.html          |    6 -
 output/docs/0.7.0/interpreter/jdbc.html            |    6 -
 output/docs/0.7.0/interpreter/kylin.html           |    6 -
 output/docs/0.7.0/interpreter/lens.html            |    6 -
 output/docs/0.7.0/interpreter/livy.html            |    6 -
 output/docs/0.7.0/interpreter/mahout.html          |    6 -
 output/docs/0.7.0/interpreter/markdown.html        |    6 -
 output/docs/0.7.0/interpreter/pig.html             |    6 -
 output/docs/0.7.0/interpreter/postgresql.html      |    8 +-
 output/docs/0.7.0/interpreter/python.html          |    6 -
 output/docs/0.7.0/interpreter/r.html               |    6 -
 output/docs/0.7.0/interpreter/scalding.html        |    6 -
 output/docs/0.7.0/interpreter/scio.html            |    6 -
 output/docs/0.7.0/interpreter/shell.html           |    6 -
 output/docs/0.7.0/interpreter/spark.html           |    6 -
 output/docs/0.7.0/manual/dependencymanagement.html |    6 -
 output/docs/0.7.0/manual/dynamicform.html          |    6 -
 .../docs/0.7.0/manual/dynamicinterpreterload.html  |    6 -
 output/docs/0.7.0/manual/interpreterexechooks.html |    6 -
 .../docs/0.7.0/manual/interpreterinstallation.html |    6 -
 output/docs/0.7.0/manual/interpreters.html         |    6 -
 output/docs/0.7.0/manual/notebookashomepage.html   |    6 -
 output/docs/0.7.0/manual/publish.html              |    6 -
 output/docs/0.7.0/manual/userimpersonation.html    |    6 -
 output/docs/0.7.0/pleasecontribute.html            |    6 -
 .../docs/0.7.0/quickstart/explorezeppelinui.html   |    6 -
 .../install_with_flink_and_spark_cluster.html      |    6 -
 output/docs/0.7.0/quickstart/tutorial.html         |    6 -
 output/docs/0.7.0/rest-api/rest-configuration.html |    6 -
 output/docs/0.7.0/rest-api/rest-credential.html    |    6 -
 output/docs/0.7.0/rest-api/rest-helium.html        |    6 -
 output/docs/0.7.0/rest-api/rest-interpreter.html   |    6 -
 output/docs/0.7.0/rest-api/rest-notebook.html      |    6 -
 output/docs/0.7.0/screenshots.html                 |    6 -
 output/docs/0.7.0/search.html                      |    6 -
 output/docs/0.7.0/security/authentication.html     |    6 -
 .../0.7.0/security/datasource_authorization.html   |    6 -
 .../0.7.0/security/notebook_authorization.html     |    6 -
 .../docs/0.7.0/security/shiroauthentication.html   |    6 -
 output/docs/0.7.0/storage/storage.html             |    6 -
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 output/docs/0.7.1/development/howtocontribute.html |    6 -
 .../0.7.1/development/howtocontributewebsite.html  |    6 -
 .../development/writingzeppelinapplication.html    |    6 -
 .../development/writingzeppelininterpreter.html    |    6 -
 .../development/writingzeppelinvisualization.html  |    6 -
 .../docs/0.7.1/displaysystem/back-end-angular.html |    6 -
 .../0.7.1/displaysystem/basicdisplaysystem.html    |    6 -
 .../0.7.1/displaysystem/front-end-angular.html     |    6 -
 output/docs/0.7.1/index.html                       |    6 -
 output/docs/0.7.1/install/build.html               |    7 -
 output/docs/0.7.1/install/cdh.html                 |    6 -
 output/docs/0.7.1/install/configuration.html       |    6 -
 output/docs/0.7.1/install/docker.html              |    6 -
 output/docs/0.7.1/install/install.html             |    6 -
 output/docs/0.7.1/install/spark_cluster_mode.html  |    6 -
 output/docs/0.7.1/install/upgrade.html             |    6 -
 output/docs/0.7.1/install/virtual_machine.html     |    6 -
 output/docs/0.7.1/install/yarn_install.html        |    6 -
 output/docs/0.7.1/interpreter/alluxio.html         |    6 -
 output/docs/0.7.1/interpreter/beam.html            |    6 -
 output/docs/0.7.1/interpreter/bigquery.html        |    6 -
 output/docs/0.7.1/interpreter/cassandra.html       |    6 -
 output/docs/0.7.1/interpreter/elasticsearch.html   |    6 -
 output/docs/0.7.1/interpreter/flink.html           |    6 -
 output/docs/0.7.1/interpreter/geode.html           |    8 +-
 output/docs/0.7.1/interpreter/hbase.html           |    6 -
 output/docs/0.7.1/interpreter/hdfs.html            |    6 -
 output/docs/0.7.1/interpreter/hive.html            |    6 -
 output/docs/0.7.1/interpreter/ignite.html          |    6 -
 output/docs/0.7.1/interpreter/jdbc.html            |    6 -
 output/docs/0.7.1/interpreter/kylin.html           |    6 -
 output/docs/0.7.1/interpreter/lens.html            |    6 -
 output/docs/0.7.1/interpreter/livy.html            |    6 -
 output/docs/0.7.1/interpreter/mahout.html          |    6 -
 output/docs/0.7.1/interpreter/markdown.html        |    6 -
 output/docs/0.7.1/interpreter/pig.html             |    6 -
 output/docs/0.7.1/interpreter/postgresql.html      |    8 +-
 output/docs/0.7.1/interpreter/python.html          |    6 -
 output/docs/0.7.1/interpreter/r.html               |    6 -
 output/docs/0.7.1/interpreter/scalding.html        |    6 -
 output/docs/0.7.1/interpreter/scio.html            |    6 -
 output/docs/0.7.1/interpreter/shell.html           |    6 -
 output/docs/0.7.1/interpreter/spark.html           |    6 -
 output/docs/0.7.1/manual/dependencymanagement.html |    6 -
 output/docs/0.7.1/manual/dynamicform.html          |    6 -
 .../docs/0.7.1/manual/dynamicinterpreterload.html  |    6 -
 output/docs/0.7.1/manual/interpreterexechooks.html |    6 -
 .../docs/0.7.1/manual/interpreterinstallation.html |    6 -
 output/docs/0.7.1/manual/interpreters.html         |    6 -
 output/docs/0.7.1/manual/notebookashomepage.html   |    6 -
 output/docs/0.7.1/manual/publish.html              |    6 -
 output/docs/0.7.1/manual/userimpersonation.html    |    6 -
 output/docs/0.7.1/pleasecontribute.html            |    6 -
 .../docs/0.7.1/quickstart/explorezeppelinui.html   |    6 -
 .../install_with_flink_and_spark_cluster.html      |    6 -
 output/docs/0.7.1/quickstart/tutorial.html         |    6 -
 output/docs/0.7.1/rest-api/rest-configuration.html |    6 -
 output/docs/0.7.1/rest-api/rest-credential.html    |    6 -
 output/docs/0.7.1/rest-api/rest-helium.html        |    6 -
 output/docs/0.7.1/rest-api/rest-interpreter.html   |    6 -
 output/docs/0.7.1/rest-api/rest-notebook.html      |    6 -
 output/docs/0.7.1/rest-api/rest-notebookRepo.html  |    6 -
 output/docs/0.7.1/screenshots.html                 |    6 -
 output/docs/0.7.1/search.html                      |    6 -
 output/docs/0.7.1/security/authentication.html     |    6 -
 .../0.7.1/security/datasource_authorization.html   |    6 -
 .../0.7.1/security/notebook_authorization.html     |    6 -
 .../docs/0.7.1/security/shiroauthentication.html   |    6 -
 output/docs/0.7.1/storage/storage.html             |    6 -
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 output/docs/0.7.2/development/howtocontribute.html |    6 -
 .../0.7.2/development/howtocontributewebsite.html  |    6 -
 .../development/writingzeppelinapplication.html    |    6 -
 .../development/writingzeppelininterpreter.html    |    6 -
 .../development/writingzeppelinvisualization.html  |    6 -
 .../docs/0.7.2/displaysystem/back-end-angular.html |    6 -
 .../0.7.2/displaysystem/basicdisplaysystem.html    |    6 -
 .../0.7.2/displaysystem/front-end-angular.html     |    6 -
 output/docs/0.7.2/index.html                       |    6 -
 output/docs/0.7.2/install/build.html               |    7 -
 output/docs/0.7.2/install/cdh.html                 |    6 -
 output/docs/0.7.2/install/configuration.html       |    6 -
 output/docs/0.7.2/install/docker.html              |    6 -
 output/docs/0.7.2/install/install.html             |    6 -
 output/docs/0.7.2/install/spark_cluster_mode.html  |    6 -
 output/docs/0.7.2/install/upgrade.html             |    6 -
 output/docs/0.7.2/install/virtual_machine.html     |    6 -
 output/docs/0.7.2/install/yarn_install.html        |    6 -
 output/docs/0.7.2/interpreter/alluxio.html         |    6 -
 output/docs/0.7.2/interpreter/beam.html            |    6 -
 output/docs/0.7.2/interpreter/bigquery.html        |    6 -
 output/docs/0.7.2/interpreter/cassandra.html       |    6 -
 output/docs/0.7.2/interpreter/elasticsearch.html   |    6 -
 output/docs/0.7.2/interpreter/flink.html           |    6 -
 output/docs/0.7.2/interpreter/geode.html           |    8 +-
 output/docs/0.7.2/interpreter/hbase.html           |    6 -
 output/docs/0.7.2/interpreter/hdfs.html            |    6 -
 output/docs/0.7.2/interpreter/hive.html            |    6 -
 output/docs/0.7.2/interpreter/ignite.html          |    6 -
 output/docs/0.7.2/interpreter/jdbc.html            |    6 -
 output/docs/0.7.2/interpreter/kylin.html           |    6 -
 output/docs/0.7.2/interpreter/lens.html            |    6 -
 output/docs/0.7.2/interpreter/livy.html            |    6 -
 output/docs/0.7.2/interpreter/mahout.html          |    6 -
 output/docs/0.7.2/interpreter/markdown.html        |    6 -
 output/docs/0.7.2/interpreter/pig.html             |    6 -
 output/docs/0.7.2/interpreter/postgresql.html      |    8 +-
 output/docs/0.7.2/interpreter/python.html          |    6 -
 output/docs/0.7.2/interpreter/r.html               |    6 -
 output/docs/0.7.2/interpreter/scalding.html        |    6 -
 output/docs/0.7.2/interpreter/scio.html            |    6 -
 output/docs/0.7.2/interpreter/shell.html           |    6 -
 output/docs/0.7.2/interpreter/spark.html           |    6 -
 output/docs/0.7.2/manual/dependencymanagement.html |    6 -
 output/docs/0.7.2/manual/dynamicform.html          |    6 -
 .../docs/0.7.2/manual/dynamicinterpreterload.html  |    6 -
 output/docs/0.7.2/manual/interpreterexechooks.html |    6 -
 .../docs/0.7.2/manual/interpreterinstallation.html |    6 -
 output/docs/0.7.2/manual/interpreters.html         |    6 -
 output/docs/0.7.2/manual/notebookashomepage.html   |    6 -
 output/docs/0.7.2/manual/publish.html              |    6 -
 output/docs/0.7.2/manual/userimpersonation.html    |    6 -
 output/docs/0.7.2/pleasecontribute.html            |    6 -
 .../docs/0.7.2/quickstart/explorezeppelinui.html   |    6 -
 .../install_with_flink_and_spark_cluster.html      |    6 -
 output/docs/0.7.2/quickstart/tutorial.html         |    6 -
 output/docs/0.7.2/rest-api/rest-configuration.html |    6 -
 output/docs/0.7.2/rest-api/rest-credential.html    |    6 -
 output/docs/0.7.2/rest-api/rest-helium.html        |    6 -
 output/docs/0.7.2/rest-api/rest-interpreter.html   |    6 -
 output/docs/0.7.2/rest-api/rest-notebook.html      |    6 -
 output/docs/0.7.2/rest-api/rest-notebookRepo.html  |    6 -
 output/docs/0.7.2/screenshots.html                 |    6 -
 output/docs/0.7.2/search.html                      |    6 -
 output/docs/0.7.2/security/authentication.html     |    6 -
 .../0.7.2/security/datasource_authorization.html   |    6 -
 .../docs/0.7.2/security/helium_authorization.html  |    6 -
 .../0.7.2/security/notebook_authorization.html     |    6 -
 .../docs/0.7.2/security/shiroauthentication.html   |    6 -
 output/docs/0.7.2/storage/storage.html             |    6 -
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 output/docs/0.7.3/development/howtocontribute.html |    6 -
 .../0.7.3/development/howtocontributewebsite.html  |    6 -
 .../development/writingzeppelinapplication.html    |    6 -
 .../development/writingzeppelininterpreter.html    |    6 -
 .../development/writingzeppelinvisualization.html  |    6 -
 .../docs/0.7.3/displaysystem/back-end-angular.html |    6 -
 .../0.7.3/displaysystem/basicdisplaysystem.html    |    6 -
 .../0.7.3/displaysystem/front-end-angular.html     |    6 -
 output/docs/0.7.3/index.html                       |    6 -
 output/docs/0.7.3/install/build.html               |    7 -
 output/docs/0.7.3/install/cdh.html                 |    6 -
 output/docs/0.7.3/install/configuration.html       |    6 -
 output/docs/0.7.3/install/docker.html              |    6 -
 output/docs/0.7.3/install/install.html             |    6 -
 output/docs/0.7.3/install/spark_cluster_mode.html  |    6 -
 output/docs/0.7.3/install/upgrade.html             |    6 -
 output/docs/0.7.3/install/virtual_machine.html     |    6 -
 output/docs/0.7.3/install/yarn_install.html        |    6 -
 output/docs/0.7.3/interpreter/alluxio.html         |    6 -
 output/docs/0.7.3/interpreter/beam.html            |    6 -
 output/docs/0.7.3/interpreter/bigquery.html        |    6 -
 output/docs/0.7.3/interpreter/cassandra.html       |    6 -
 output/docs/0.7.3/interpreter/elasticsearch.html   |    6 -
 output/docs/0.7.3/interpreter/flink.html           |    6 -
 output/docs/0.7.3/interpreter/geode.html           |    8 +-
 output/docs/0.7.3/interpreter/hbase.html           |    6 -
 output/docs/0.7.3/interpreter/hdfs.html            |    6 -
 output/docs/0.7.3/interpreter/hive.html            |    6 -
 output/docs/0.7.3/interpreter/ignite.html          |    6 -
 output/docs/0.7.3/interpreter/jdbc.html            |    6 -
 output/docs/0.7.3/interpreter/kylin.html           |    6 -
 output/docs/0.7.3/interpreter/lens.html            |    6 -
 output/docs/0.7.3/interpreter/livy.html            |    6 -
 output/docs/0.7.3/interpreter/mahout.html          |    6 -
 output/docs/0.7.3/interpreter/markdown.html        |    6 -
 output/docs/0.7.3/interpreter/pig.html             |    6 -
 output/docs/0.7.3/interpreter/postgresql.html      |    8 +-
 output/docs/0.7.3/interpreter/python.html          |    6 -
 output/docs/0.7.3/interpreter/r.html               |    6 -
 output/docs/0.7.3/interpreter/scalding.html        |    6 -
 output/docs/0.7.3/interpreter/scio.html            |    6 -
 output/docs/0.7.3/interpreter/shell.html           |    6 -
 output/docs/0.7.3/interpreter/spark.html           |    6 -
 output/docs/0.7.3/manual/dependencymanagement.html |    6 -
 output/docs/0.7.3/manual/dynamicform.html          |    6 -
 .../docs/0.7.3/manual/dynamicinterpreterload.html  |    6 -
 output/docs/0.7.3/manual/interpreterexechooks.html |    6 -
 .../docs/0.7.3/manual/interpreterinstallation.html |    6 -
 output/docs/0.7.3/manual/interpreters.html         |    6 -
 output/docs/0.7.3/manual/notebookashomepage.html   |    6 -
 output/docs/0.7.3/manual/publish.html              |    6 -
 output/docs/0.7.3/manual/userimpersonation.html    |    6 -
 output/docs/0.7.3/pleasecontribute.html            |    6 -
 .../docs/0.7.3/quickstart/explorezeppelinui.html   |    6 -
 .../install_with_flink_and_spark_cluster.html      |    6 -
 output/docs/0.7.3/quickstart/tutorial.html         |    6 -
 output/docs/0.7.3/rest-api/rest-configuration.html |    6 -
 output/docs/0.7.3/rest-api/rest-credential.html    |    6 -
 output/docs/0.7.3/rest-api/rest-helium.html        |    6 -
 output/docs/0.7.3/rest-api/rest-interpreter.html   |    6 -
 output/docs/0.7.3/rest-api/rest-notebook.html      |    6 -
 output/docs/0.7.3/rest-api/rest-notebookRepo.html  |    6 -
 output/docs/0.7.3/screenshots.html                 |    6 -
 output/docs/0.7.3/search.html                      |    6 -
 output/docs/0.7.3/security/authentication.html     |    6 -
 .../0.7.3/security/datasource_authorization.html   |    6 -
 .../docs/0.7.3/security/helium_authorization.html  |    6 -
 .../docs/0.7.3/security/http_security_headers.html |    6 -
 .../0.7.3/security/notebook_authorization.html     |    6 -
 .../docs/0.7.3/security/shiroauthentication.html   |    6 -
 output/docs/0.7.3/storage/storage.html             |    6 -
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 .../contribution/how_to_contribute_code.html       |    6 -
 .../contribution/how_to_contribute_website.html    |    6 -
 .../contribution/useful_developer_tools.html       |    6 -
 output/docs/0.8.0/development/helium/overview.html |    6 -
 .../development/helium/writing_application.html    |    6 -
 .../0.8.0/development/helium/writing_spell.html    |    6 -
 .../helium/writing_visualization_basic.html        |    6 -
 .../writing_visualization_transformation.html      |    6 -
 .../development/writing_zeppelin_interpreter.html  |    6 -
 output/docs/0.8.0/index.html                       |    6 -
 output/docs/0.8.0/interpreter/alluxio.html         |    6 -
 output/docs/0.8.0/interpreter/beam.html            |    6 -
 output/docs/0.8.0/interpreter/bigquery.html        |    6 -
 output/docs/0.8.0/interpreter/cassandra.html       |    6 -
 output/docs/0.8.0/interpreter/elasticsearch.html   |    6 -
 output/docs/0.8.0/interpreter/flink.html           |    6 -
 output/docs/0.8.0/interpreter/geode.html           |    8 +-
 output/docs/0.8.0/interpreter/groovy.html          |    6 -
 output/docs/0.8.0/interpreter/hbase.html           |    6 -
 output/docs/0.8.0/interpreter/hdfs.html            |    6 -
 output/docs/0.8.0/interpreter/hive.html            |    6 -
 output/docs/0.8.0/interpreter/ignite.html          |    6 -
 output/docs/0.8.0/interpreter/jdbc.html            |    6 -
 output/docs/0.8.0/interpreter/kylin.html           |    6 -
 output/docs/0.8.0/interpreter/lens.html            |    6 -
 output/docs/0.8.0/interpreter/livy.html            |    6 -
 output/docs/0.8.0/interpreter/mahout.html          |    6 -
 output/docs/0.8.0/interpreter/markdown.html        |    6 -
 output/docs/0.8.0/interpreter/neo4j.html           |    6 -
 output/docs/0.8.0/interpreter/pig.html             |    6 -
 output/docs/0.8.0/interpreter/postgresql.html      |    6 -
 output/docs/0.8.0/interpreter/python.html          |    6 -
 output/docs/0.8.0/interpreter/r.html               |    6 -
 output/docs/0.8.0/interpreter/sap.html             |    6 -
 output/docs/0.8.0/interpreter/scalding.html        |    6 -
 output/docs/0.8.0/interpreter/scio.html            |    6 -
 output/docs/0.8.0/interpreter/shell.html           |    6 -
 output/docs/0.8.0/interpreter/spark.html           |    6 -
 output/docs/0.8.0/pleasecontribute.html            |    6 -
 output/docs/0.8.0/quickstart/explore_ui.html       |    6 -
 output/docs/0.8.0/quickstart/install.html          |    6 -
 .../0.8.0/quickstart/python_with_zeppelin.html     |    6 -
 .../docs/0.8.0/quickstart/spark_with_zeppelin.html |    6 -
 .../docs/0.8.0/quickstart/sql_with_zeppelin.html   |    6 -
 output/docs/0.8.0/quickstart/tutorial.html         |    6 -
 output/docs/0.8.0/screenshots.html                 |    6 -
 output/docs/0.8.0/search.html                      |    6 -
 output/docs/0.8.0/setup/basics/how_to_build.html   |    7 -
 .../0.8.0/setup/basics/multi_user_support.html     |    6 -
 output/docs/0.8.0/setup/deployment/cdh.html        |    6 -
 output/docs/0.8.0/setup/deployment/docker.html     |    6 -
 .../setup/deployment/flink_and_spark_cluster.html  |    6 -
 .../0.8.0/setup/deployment/spark_cluster_mode.html |    6 -
 .../0.8.0/setup/deployment/virtual_machine.html    |    6 -
 .../docs/0.8.0/setup/deployment/yarn_install.html  |    6 -
 .../docs/0.8.0/setup/operation/configuration.html  |    6 -
 .../docs/0.8.0/setup/operation/proxy_setting.html  |    6 -
 .../0.8.0/setup/operation/trouble_shooting.html    |    6 -
 output/docs/0.8.0/setup/operation/upgrading.html   |    6 -
 .../0.8.0/setup/security/authentication_nginx.html |    6 -
 .../setup/security/datasource_authorization.html   |    6 -
 .../setup/security/http_security_headers.html      |    6 -
 .../setup/security/notebook_authorization.html     |    6 -
 .../0.8.0/setup/security/shiro_authentication.html |    6 -
 output/docs/0.8.0/setup/storage/storage.html       |    6 -
 .../usage/display_system/angular_backend.html      |    6 -
 .../usage/display_system/angular_frontend.html     |    6 -
 output/docs/0.8.0/usage/display_system/basic.html  |   10 +-
 output/docs/0.8.0/usage/dynamic_form/intro.html    |    6 -
 .../usage/interpreter/dependency_management.html   |    6 -
 .../0.8.0/usage/interpreter/dynamic_loading.html   |    6 -
 .../0.8.0/usage/interpreter/execution_hooks.html   |    6 -
 .../docs/0.8.0/usage/interpreter/installation.html |    6 -
 .../interpreter/interpreter_binding_mode.html      |    6 -
 output/docs/0.8.0/usage/interpreter/overview.html  |    6 -
 .../usage/interpreter/user_impersonation.html      |    6 -
 .../0.8.0/usage/other_features/cron_scheduler.html |    6 -
 .../usage/other_features/customizing_homepage.html |    6 -
 .../usage/other_features/notebook_actions.html     |    6 -
 .../usage/other_features/personalized_mode.html    |    6 -
 .../other_features/publishing_paragraphs.html      |    6 -
 .../usage/other_features/zeppelin_context.html     |    6 -
 .../docs/0.8.0/usage/rest_api/configuration.html   |    6 -
 output/docs/0.8.0/usage/rest_api/credential.html   |    6 -
 output/docs/0.8.0/usage/rest_api/helium.html       |    6 -
 output/docs/0.8.0/usage/rest_api/interpreter.html  |    6 -
 output/docs/0.8.0/usage/rest_api/notebook.html     |    6 -
 .../0.8.0/usage/rest_api/notebook_repository.html  |    6 -
 .../docs/0.8.0/usage/rest_api/zeppelin_server.html |    6 -
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 .../contribution/how_to_contribute_code.html       |    6 -
 .../contribution/how_to_contribute_website.html    |    6 -
 .../contribution/useful_developer_tools.html       |    6 -
 output/docs/0.8.1/development/helium/overview.html |    6 -
 .../development/helium/writing_application.html    |    6 -
 .../0.8.1/development/helium/writing_spell.html    |    6 -
 .../helium/writing_visualization_basic.html        |    6 -
 .../writing_visualization_transformation.html      |    6 -
 .../development/writing_zeppelin_interpreter.html  |    6 -
 output/docs/0.8.1/index.html                       |    6 -
 output/docs/0.8.1/interpreter/alluxio.html         |    6 -
 output/docs/0.8.1/interpreter/beam.html            |    6 -
 output/docs/0.8.1/interpreter/bigquery.html        |    6 -
 output/docs/0.8.1/interpreter/cassandra.html       |    6 -
 output/docs/0.8.1/interpreter/elasticsearch.html   |    6 -
 output/docs/0.8.1/interpreter/flink.html           |    6 -
 output/docs/0.8.1/interpreter/geode.html           |    8 +-
 output/docs/0.8.1/interpreter/groovy.html          |    6 -
 output/docs/0.8.1/interpreter/hbase.html           |    6 -
 output/docs/0.8.1/interpreter/hdfs.html            |    6 -
 output/docs/0.8.1/interpreter/hive.html            |    6 -
 output/docs/0.8.1/interpreter/ignite.html          |    6 -
 output/docs/0.8.1/interpreter/jdbc.html            |    6 -
 output/docs/0.8.1/interpreter/kylin.html           |    6 -
 output/docs/0.8.1/interpreter/lens.html            |    6 -
 output/docs/0.8.1/interpreter/livy.html            |    6 -
 output/docs/0.8.1/interpreter/mahout.html          |    6 -
 output/docs/0.8.1/interpreter/markdown.html        |    6 -
 output/docs/0.8.1/interpreter/neo4j.html           |    6 -
 output/docs/0.8.1/interpreter/pig.html             |    6 -
 output/docs/0.8.1/interpreter/postgresql.html      |    6 -
 output/docs/0.8.1/interpreter/python.html          |    6 -
 output/docs/0.8.1/interpreter/r.html               |    6 -
 output/docs/0.8.1/interpreter/sap.html             |    6 -
 output/docs/0.8.1/interpreter/scalding.html        |    6 -
 output/docs/0.8.1/interpreter/scio.html            |    6 -
 output/docs/0.8.1/interpreter/shell.html           |    6 -
 output/docs/0.8.1/interpreter/spark.html           |    6 -
 output/docs/0.8.1/pleasecontribute.html            |    6 -
 output/docs/0.8.1/quickstart/explore_ui.html       |    6 -
 output/docs/0.8.1/quickstart/install.html          |    6 -
 .../0.8.1/quickstart/python_with_zeppelin.html     |    6 -
 .../docs/0.8.1/quickstart/spark_with_zeppelin.html |    6 -
 .../docs/0.8.1/quickstart/sql_with_zeppelin.html   |    6 -
 output/docs/0.8.1/quickstart/tutorial.html         |    6 -
 output/docs/0.8.1/screenshots.html                 |    6 -
 output/docs/0.8.1/search.html                      |    6 -
 output/docs/0.8.1/setup/basics/how_to_build.html   |    7 -
 .../0.8.1/setup/basics/multi_user_support.html     |    6 -
 output/docs/0.8.1/setup/deployment/cdh.html        |    6 -
 output/docs/0.8.1/setup/deployment/docker.html     |    6 -
 .../setup/deployment/flink_and_spark_cluster.html  |    6 -
 .../0.8.1/setup/deployment/spark_cluster_mode.html |    6 -
 .../0.8.1/setup/deployment/virtual_machine.html    |    6 -
 .../docs/0.8.1/setup/deployment/yarn_install.html  |    6 -
 .../docs/0.8.1/setup/operation/configuration.html  |    6 -
 .../docs/0.8.1/setup/operation/proxy_setting.html  |    6 -
 .../0.8.1/setup/operation/trouble_shooting.html    |    6 -
 output/docs/0.8.1/setup/operation/upgrading.html   |    6 -
 .../0.8.1/setup/security/authentication_nginx.html |    6 -
 .../setup/security/datasource_authorization.html   |    6 -
 .../setup/security/http_security_headers.html      |    6 -
 .../setup/security/notebook_authorization.html     |    6 -
 .../0.8.1/setup/security/shiro_authentication.html |    6 -
 output/docs/0.8.1/setup/storage/storage.html       |    6 -
 .../usage/display_system/angular_backend.html      |    6 -
 .../usage/display_system/angular_frontend.html     |    6 -
 output/docs/0.8.1/usage/display_system/basic.html  |   10 +-
 output/docs/0.8.1/usage/dynamic_form/intro.html    |    6 -
 .../usage/interpreter/dependency_management.html   |    6 -
 .../0.8.1/usage/interpreter/dynamic_loading.html   |    6 -
 .../0.8.1/usage/interpreter/execution_hooks.html   |    6 -
 .../docs/0.8.1/usage/interpreter/installation.html |    6 -
 .../interpreter/interpreter_binding_mode.html      |    6 -
 output/docs/0.8.1/usage/interpreter/overview.html  |    6 -
 .../usage/interpreter/user_impersonation.html      |    6 -
 .../0.8.1/usage/other_features/cron_scheduler.html |    6 -
 .../usage/other_features/customizing_homepage.html |    6 -
 .../usage/other_features/notebook_actions.html     |    6 -
 .../usage/other_features/personalized_mode.html    |    6 -
 .../other_features/publishing_paragraphs.html      |    6 -
 .../usage/other_features/zeppelin_context.html     |    6 -
 .../docs/0.8.1/usage/rest_api/configuration.html   |    6 -
 output/docs/0.8.1/usage/rest_api/credential.html   |    6 -
 output/docs/0.8.1/usage/rest_api/helium.html       |    6 -
 output/docs/0.8.1/usage/rest_api/interpreter.html  |    6 -
 output/docs/0.8.1/usage/rest_api/notebook.html     |    6 -
 .../0.8.1/usage/rest_api/notebook_repository.html  |    6 -
 .../docs/0.8.1/usage/rest_api/zeppelin_server.html |    6 -
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 .../contribution/how_to_contribute_code.html       |    6 -
 .../contribution/how_to_contribute_website.html    |    6 -
 .../contribution/useful_developer_tools.html       |    6 -
 output/docs/0.8.2/development/helium/overview.html |    6 -
 .../development/helium/writing_application.html    |    6 -
 .../0.8.2/development/helium/writing_spell.html    |    6 -
 .../helium/writing_visualization_basic.html        |    6 -
 .../writing_visualization_transformation.html      |    6 -
 .../development/writing_zeppelin_interpreter.html  |    6 -
 output/docs/0.8.2/index.html                       |    6 -
 output/docs/0.8.2/interpreter/alluxio.html         |    6 -
 output/docs/0.8.2/interpreter/beam.html            |    6 -
 output/docs/0.8.2/interpreter/bigquery.html        |    6 -
 output/docs/0.8.2/interpreter/cassandra.html       |    6 -
 output/docs/0.8.2/interpreter/elasticsearch.html   |    6 -
 output/docs/0.8.2/interpreter/flink.html           |    6 -
 output/docs/0.8.2/interpreter/geode.html           |    8 +-
 output/docs/0.8.2/interpreter/groovy.html          |    6 -
 output/docs/0.8.2/interpreter/hbase.html           |    6 -
 output/docs/0.8.2/interpreter/hdfs.html            |    6 -
 output/docs/0.8.2/interpreter/hive.html            |    6 -
 output/docs/0.8.2/interpreter/ignite.html          |    6 -
 output/docs/0.8.2/interpreter/jdbc.html            |    6 -
 output/docs/0.8.2/interpreter/kylin.html           |    6 -
 output/docs/0.8.2/interpreter/lens.html            |    6 -
 output/docs/0.8.2/interpreter/livy.html            |    6 -
 output/docs/0.8.2/interpreter/mahout.html          |    6 -
 output/docs/0.8.2/interpreter/markdown.html        |    6 -
 output/docs/0.8.2/interpreter/neo4j.html           |    6 -
 output/docs/0.8.2/interpreter/pig.html             |    6 -
 output/docs/0.8.2/interpreter/postgresql.html      |    6 -
 output/docs/0.8.2/interpreter/python.html          |    6 -
 output/docs/0.8.2/interpreter/r.html               |    6 -
 output/docs/0.8.2/interpreter/sap.html             |    6 -
 output/docs/0.8.2/interpreter/scalding.html        |    6 -
 output/docs/0.8.2/interpreter/scio.html            |    6 -
 output/docs/0.8.2/interpreter/shell.html           |    6 -
 output/docs/0.8.2/interpreter/spark.html           |    6 -
 output/docs/0.8.2/pleasecontribute.html            |    6 -
 output/docs/0.8.2/quickstart/explore_ui.html       |    6 -
 output/docs/0.8.2/quickstart/install.html          |    6 -
 .../0.8.2/quickstart/python_with_zeppelin.html     |    6 -
 .../docs/0.8.2/quickstart/spark_with_zeppelin.html |    6 -
 .../docs/0.8.2/quickstart/sql_with_zeppelin.html   |    6 -
 output/docs/0.8.2/quickstart/tutorial.html         |    6 -
 output/docs/0.8.2/screenshots.html                 |    6 -
 output/docs/0.8.2/search.html                      |    6 -
 output/docs/0.8.2/setup/basics/how_to_build.html   |    7 -
 .../0.8.2/setup/basics/multi_user_support.html     |    6 -
 output/docs/0.8.2/setup/deployment/cdh.html        |    6 -
 output/docs/0.8.2/setup/deployment/docker.html     |    6 -
 .../setup/deployment/flink_and_spark_cluster.html  |    6 -
 .../0.8.2/setup/deployment/spark_cluster_mode.html |    6 -
 .../0.8.2/setup/deployment/virtual_machine.html    |    6 -
 .../docs/0.8.2/setup/deployment/yarn_install.html  |    6 -
 .../docs/0.8.2/setup/operation/configuration.html  |    6 -
 .../docs/0.8.2/setup/operation/proxy_setting.html  |    6 -
 .../0.8.2/setup/operation/trouble_shooting.html    |    6 -
 output/docs/0.8.2/setup/operation/upgrading.html   |    6 -
 .../0.8.2/setup/security/authentication_nginx.html |    6 -
 .../setup/security/datasource_authorization.html   |    6 -
 .../setup/security/http_security_headers.html      |    6 -
 .../setup/security/notebook_authorization.html     |    6 -
 .../0.8.2/setup/security/shiro_authentication.html |    6 -
 output/docs/0.8.2/setup/storage/storage.html       |    6 -
 .../usage/display_system/angular_backend.html      |    6 -
 .../usage/display_system/angular_frontend.html     |    6 -
 output/docs/0.8.2/usage/display_system/basic.html  |   10 +-
 output/docs/0.8.2/usage/dynamic_form/intro.html    |    6 -
 .../usage/interpreter/dependency_management.html   |    6 -
 .../0.8.2/usage/interpreter/dynamic_loading.html   |    6 -
 .../0.8.2/usage/interpreter/execution_hooks.html   |    6 -
 .../docs/0.8.2/usage/interpreter/installation.html |    6 -
 .../interpreter/interpreter_binding_mode.html      |    6 -
 output/docs/0.8.2/usage/interpreter/overview.html  |    6 -
 .../usage/interpreter/user_impersonation.html      |    6 -
 .../0.8.2/usage/other_features/cron_scheduler.html |    6 -
 .../usage/other_features/customizing_homepage.html |    6 -
 .../usage/other_features/notebook_actions.html     |    6 -
 .../usage/other_features/personalized_mode.html    |    6 -
 .../other_features/publishing_paragraphs.html      |    6 -
 .../usage/other_features/zeppelin_context.html     |    6 -
 .../docs/0.8.2/usage/rest_api/configuration.html   |    6 -
 output/docs/0.8.2/usage/rest_api/credential.html   |    6 -
 output/docs/0.8.2/usage/rest_api/helium.html       |    6 -
 output/docs/0.8.2/usage/rest_api/interpreter.html  |    6 -
 output/docs/0.8.2/usage/rest_api/notebook.html     |    6 -
 .../0.8.2/usage/rest_api/notebook_repository.html  |    6 -
 .../docs/0.8.2/usage/rest_api/zeppelin_server.html |    6 -
 .../assets/themes/fonts/fontawesome-webfont.svg    |    2 +-
 .../contribution/how_to_contribute_code.html       |    6 -
 .../contribution/how_to_contribute_website.html    |    6 -
 .../contribution/useful_developer_tools.html       |    6 -
 output/docs/0.9.0/development/helium/overview.html |    6 -
 .../development/helium/writing_application.html    |    6 -
 .../0.9.0/development/helium/writing_spell.html    |    6 -
 .../helium/writing_visualization_basic.html        |    6 -
 .../writing_visualization_transformation.html      |    6 -
 .../development/writing_zeppelin_interpreter.html  |    6 -
 output/docs/0.9.0/index.html                       |    6 -
 output/docs/0.9.0/interpreter/alluxio.html         |    6 -
 output/docs/0.9.0/interpreter/beam.html            |    6 -
 output/docs/0.9.0/interpreter/bigquery.html        |    6 -
 output/docs/0.9.0/interpreter/cassandra.html       |    6 -
 output/docs/0.9.0/interpreter/elasticsearch.html   |    6 -
 output/docs/0.9.0/interpreter/flink.html           |    6 -
 output/docs/0.9.0/interpreter/geode.html           |    8 +-
 output/docs/0.9.0/interpreter/groovy.html          |    6 -
 output/docs/0.9.0/interpreter/hazelcastjet.html    |    6 -
 output/docs/0.9.0/interpreter/hbase.html           |    6 -
 output/docs/0.9.0/interpreter/hdfs.html            |    6 -
 output/docs/0.9.0/interpreter/hive.html            |    6 -
 output/docs/0.9.0/interpreter/ignite.html          |    6 -
 output/docs/0.9.0/interpreter/influxdb.html        |    6 -
 output/docs/0.9.0/interpreter/java.html            |    6 -
 output/docs/0.9.0/interpreter/jdbc.html            |    6 -
 output/docs/0.9.0/interpreter/jupyter.html         |    6 -
 output/docs/0.9.0/interpreter/kotlin.html          |    6 -
 output/docs/0.9.0/interpreter/ksql.html            |    6 -
 output/docs/0.9.0/interpreter/kylin.html           |    6 -
 output/docs/0.9.0/interpreter/lens.html            |    6 -
 output/docs/0.9.0/interpreter/livy.html            |    6 -
 output/docs/0.9.0/interpreter/mahout.html          |    6 -
 output/docs/0.9.0/interpreter/markdown.html        |    6 -
 output/docs/0.9.0/interpreter/mongodb.html         |    6 -
 output/docs/0.9.0/interpreter/neo4j.html           |    6 -
 output/docs/0.9.0/interpreter/pig.html             |    6 -
 output/docs/0.9.0/interpreter/postgresql.html      |    6 -
 output/docs/0.9.0/interpreter/python.html          |    6 -
 output/docs/0.9.0/interpreter/r.html               |    6 -
 output/docs/0.9.0/interpreter/sap.html             |    6 -
 output/docs/0.9.0/interpreter/scalding.html        |    6 -
 output/docs/0.9.0/interpreter/scio.html            |    6 -
 output/docs/0.9.0/interpreter/shell.html           |    6 -
 output/docs/0.9.0/interpreter/spark.html           |    6 -
 output/docs/0.9.0/interpreter/sparql.html          |    6 -
 output/docs/0.9.0/interpreter/submarine.html       |    6 -
 output/docs/0.9.0/pleasecontribute.html            |    6 -
 output/docs/0.9.0/quickstart/docker.html           |    6 -
 output/docs/0.9.0/quickstart/explore_ui.html       |    6 -
 output/docs/0.9.0/quickstart/install.html          |    6 -
 output/docs/0.9.0/quickstart/kubernetes.html       |    6 -
 .../0.9.0/quickstart/python_with_zeppelin.html     |    6 -
 .../docs/0.9.0/quickstart/spark_with_zeppelin.html |    6 -
 .../docs/0.9.0/quickstart/sql_with_zeppelin.html   |    6 -
 output/docs/0.9.0/quickstart/tutorial.html         |    6 -
 output/docs/0.9.0/quickstart/yarn.html             |    6 -
 output/docs/0.9.0/screenshots.html                 |    6 -
 output/docs/0.9.0/search.html                      |    6 -
 .../0.9.0/setup/basics/hadoop_integration.html     |    6 -
 output/docs/0.9.0/setup/basics/how_to_build.html   |    7 -
 .../0.9.0/setup/basics/multi_user_support.html     |    6 -
 output/docs/0.9.0/setup/basics/systemd.html        |    6 -
 output/docs/0.9.0/setup/deployment/cdh.html        |    6 -
 output/docs/0.9.0/setup/deployment/docker.html     |    6 -
 .../setup/deployment/flink_and_spark_cluster.html  |    6 -
 .../0.9.0/setup/deployment/spark_cluster_mode.html |    6 -
 .../0.9.0/setup/deployment/virtual_machine.html    |    6 -
 .../docs/0.9.0/setup/deployment/yarn_install.html  |    6 -
 .../docs/0.9.0/setup/operation/configuration.html  |    6 -
 output/docs/0.9.0/setup/operation/monitoring.html  |    6 -
 .../docs/0.9.0/setup/operation/proxy_setting.html  |    6 -
 .../0.9.0/setup/operation/trouble_shooting.html    |    6 -
 output/docs/0.9.0/setup/operation/upgrading.html   |    6 -
 .../0.9.0/setup/security/authentication_nginx.html |    6 -
 .../setup/security/datasource_authorization.html   |    6 -
 .../setup/security/http_security_headers.html      |    6 -
 .../setup/security/notebook_authorization.html     |    6 -
 .../0.9.0/setup/security/shiro_authentication.html |    6 -
 output/docs/0.9.0/setup/storage/storage.html       |    6 -
 .../usage/display_system/angular_backend.html      |    6 -
 .../usage/display_system/angular_frontend.html     |    6 -
 output/docs/0.9.0/usage/display_system/basic.html  |   10 +-
 output/docs/0.9.0/usage/dynamic_form/intro.html    |    6 -
 .../usage/interpreter/dependency_management.html   |    6 -
 .../0.9.0/usage/interpreter/dynamic_loading.html   |    6 -
 .../0.9.0/usage/interpreter/execution_hooks.html   |    6 -
 .../docs/0.9.0/usage/interpreter/installation.html |    6 -
 .../interpreter/interpreter_binding_mode.html      |    6 -
 output/docs/0.9.0/usage/interpreter/overview.html  |    6 -
 .../usage/interpreter/user_impersonation.html      |    6 -
 .../0.9.0/usage/other_features/cron_scheduler.html |    6 -
 .../usage/other_features/customizing_homepage.html |    6 -
 .../usage/other_features/notebook_actions.html     |    6 -
 .../usage/other_features/personalized_mode.html    |    6 -
 .../other_features/publishing_paragraphs.html      |    6 -
 .../usage/other_features/zeppelin_context.html     |    6 -
 .../docs/0.9.0/usage/rest_api/configuration.html   |    6 -
 output/docs/0.9.0/usage/rest_api/credential.html   |    6 -
 output/docs/0.9.0/usage/rest_api/helium.html       |    6 -
 output/docs/0.9.0/usage/rest_api/interpreter.html  |    6 -
 output/docs/0.9.0/usage/rest_api/notebook.html     |    6 -
 .../0.9.0/usage/rest_api/notebook_repository.html  |    6 -
 .../docs/0.9.0/usage/rest_api/zeppelin_server.html |    6 -
 .../docs/0.9.0/usage/zeppelin_sdk/client_api.html  |    6 -
 .../docs/0.9.0/usage/zeppelin_sdk/session_api.html |    6 -
 output/documentation.html                          |    9 +-
 output/download.html                               |    9 +-
 output/helium_packages.html                        |    9 +-
 output/index.html                                  |    9 +-
 output/releases/zeppelin-release-0.10.1.html       |    9 +-
 output/releases/zeppelin-release-0.11.0.html       |    9 +-
 output/releases/zeppelin-release-0.11.1.html       |    9 +-
 output/releases/zeppelin-release-0.11.2.html       |    9 +-
 output/releases/zeppelin-release-0.12.0.html       |    9 +-
 output/releases/zeppelin-release-0.12.1.html       |    9 +-
 .../zeppelin-release-0.5.0-incubating.html         |    9 +-
 .../zeppelin-release-0.5.5-incubating.html         |    9 +-
 .../zeppelin-release-0.5.6-incubating.html         |    9 +-
 output/releases/zeppelin-release-0.6.0.html        |    9 +-
 output/releases/zeppelin-release-0.6.1.html        |    9 +-
 output/releases/zeppelin-release-0.6.2.html        |    9 +-
 output/releases/zeppelin-release-0.7.0.html        |    9 +-
 output/releases/zeppelin-release-0.7.1.html        |    9 +-
 output/releases/zeppelin-release-0.7.2.html        |    9 +-
 output/releases/zeppelin-release-0.7.3.html        |    9 +-
 output/releases/zeppelin-release-0.8.0.html        |    9 +-
 output/releases/zeppelin-release-0.8.1.html        |    9 +-
 output/releases/zeppelin-release-0.8.2.html        |    9 +-
 output/releases/zeppelin-release-0.9.0.html        |    9 +-
 output/screenshots.html                            |    9 +-
 output/security.html                               |    9 +-
 output/supported_interpreters.html                 |    9 +-
 3285 files changed, 11435 insertions(+), 23575 deletions(-)

diff --git a/_includes/themes/zeppelin/default.html b/_includes/themes/zeppelin/default.html
index 26358d465..2a904bb8a 100644
--- a/_includes/themes/zeppelin/default.html
+++ b/_includes/themes/zeppelin/default.html
@@ -8,15 +8,9 @@
 
     <!-- Enable responsive viewport -->
     <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
-
-    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
-    <!--[if lt IE 9]>
-      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-
     <!-- Le styles -->
-    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
-    <link href="https://fonts.googleapis.com/icon?family=Material+Icons">
+    <link href="{{ ASSET_PATH }}/font-awesome.min.css" rel="stylesheet">
+    <link href="{{ ASSET_PATH }}/icon.css" rel="stylesheet" type="text/css"/>
     <link href="{{ ASSET_PATH }}/bootstrap/css/bootstrap.css" rel="stylesheet">
     <link href="{{ ASSET_PATH }}/css/style.css?body=1" rel="stylesheet" type="text/css">
     <link href="{{ ASSET_PATH }}/css/syntax.css" rel="stylesheet"  type="text/css" media="screen" />
@@ -36,10 +30,9 @@
     <meta name="theme-color" content="#ffffff">
 
     <!-- Js -->
-    <script src="https://code.jquery.com/jquery-1.10.2.min.js"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script>
-<!--    <script src="https://s3.amazonaws.com/apache-zeppelin/post/medium.js"></script>-->
-    <script src="https://angular-ui.github.io/bootstrap/ui-bootstrap-tpls-2.5.0.js"></script>
+    <script src="{{ ASSET_PATH }}/jquery-1.10.2.min.js"></script>
+    <script src="{{ ASSET_PATH }}/angular.min.js"></script>
+    <script src="{{ ASSET_PATH }}/ui-bootstrap-tpls-2.5.0.js"></script>
     <script src="{{ ASSET_PATH }}/bootstrap/js/bootstrap.min.js"></script>
     <script src="{{ ASSET_PATH }}/js/docs.js"></script>
     <script src="{{ ASSET_PATH }}/js/anchor.min.js"></script>
diff --git a/assets/themes/fonts/fontawesome-webfont.woff2 b/assets/themes/fonts/fontawesome-webfont.woff2
new file mode 100644
index 000000000..4d13fc604
Binary files /dev/null and b/assets/themes/fonts/fontawesome-webfont.woff2 differ
diff --git a/assets/themes/fonts/material-icons.ttf b/assets/themes/fonts/material-icons.ttf
new file mode 100644
index 000000000..9d09b0feb
Binary files /dev/null and b/assets/themes/fonts/material-icons.ttf differ
diff --git a/assets/themes/zeppelin/angular.min.js b/assets/themes/zeppelin/angular.min.js
new file mode 100644
index 000000000..0fb8002f9
--- /dev/null
+++ b/assets/themes/zeppelin/angular.min.js
@@ -0,0 +1,251 @@
+/*
+ AngularJS v1.3.15
+ (c) 2010-2014 Google, Inc. http://angularjs.org
+ License: MIT
+*/
+(function(Q,W,t){'use strict';function R(b){return function(){var a=arguments[0],c;c="["+(b?b+":":"")+a+"] http://errors.angularjs.org/1.3.15/"+(b?b+"/":"")+a;for(a=1;a<arguments.length;a++){c=c+(1==a?"?":"&")+"p"+(a-1)+"=";var d=encodeURIComponent,e;e=arguments[a];e="function"==typeof e?e.toString().replace(/ \{[\s\S]*$/,""):"undefined"==typeof e?"undefined":"string"!=typeof e?JSON.stringify(e):e;c+=d(e)}return Error(c)}}function Sa(b){if(null==b||Ta(b))return!1;var a=b.length;return b. [...]
+qa&&a?!0:C(b)||H(b)||0===a||"number"===typeof a&&0<a&&a-1 in b}function r(b,a,c){var d,e;if(b)if(G(b))for(d in b)"prototype"==d||"length"==d||"name"==d||b.hasOwnProperty&&!b.hasOwnProperty(d)||a.call(c,b[d],d,b);else if(H(b)||Sa(b)){var f="object"!==typeof b;d=0;for(e=b.length;d<e;d++)(f||d in b)&&a.call(c,b[d],d,b)}else if(b.forEach&&b.forEach!==r)b.forEach(a,c,b);else for(d in b)b.hasOwnProperty(d)&&a.call(c,b[d],d,b);return b}function Ed(b,a,c){for(var d=Object.keys(b).sort(),e=0;e<d. [...]
+b[d[e]],d[e]);return d}function mc(b){return function(a,c){b(c,a)}}function Fd(){return++ob}function nc(b,a){a?b.$$hashKey=a:delete b.$$hashKey}function w(b){for(var a=b.$$hashKey,c=1,d=arguments.length;c<d;c++){var e=arguments[c];if(e)for(var f=Object.keys(e),g=0,h=f.length;g<h;g++){var l=f[g];b[l]=e[l]}}nc(b,a);return b}function aa(b){return parseInt(b,10)}function Ob(b,a){return w(Object.create(b),a)}function E(){}function ra(b){return b}function ea(b){return function(){return b}}func [...]
+typeof b}function y(b){return"undefined"!==typeof b}function J(b){return null!==b&&"object"===typeof b}function C(b){return"string"===typeof b}function Y(b){return"number"===typeof b}function ga(b){return"[object Date]"===Ca.call(b)}function G(b){return"function"===typeof b}function Ua(b){return"[object RegExp]"===Ca.call(b)}function Ta(b){return b&&b.window===b}function Va(b){return b&&b.$evalAsync&&b.$watch}function Wa(b){return"boolean"===typeof b}function oc(b){return!(!b||!(b.nodeNa [...]
+b.attr&&b.find))}function Gd(b){var a={};b=b.split(",");var c;for(c=0;c<b.length;c++)a[b[c]]=!0;return a}function va(b){return z(b.nodeName||b[0]&&b[0].nodeName)}function Xa(b,a){var c=b.indexOf(a);0<=c&&b.splice(c,1);return a}function Da(b,a,c,d){if(Ta(b)||Va(b))throw Ja("cpws");if(a){if(b===a)throw Ja("cpi");c=c||[];d=d||[];if(J(b)){var e=c.indexOf(b);if(-1!==e)return d[e];c.push(b);d.push(a)}if(H(b))for(var f=a.length=0;f<b.length;f++)e=Da(b[f],null,c,d),J(b[f])&&(c.push(b[f]),d.push( [...]
+else{var g=a.$$hashKey;H(a)?a.length=0:r(a,function(b,c){delete a[c]});for(f in b)b.hasOwnProperty(f)&&(e=Da(b[f],null,c,d),J(b[f])&&(c.push(b[f]),d.push(e)),a[f]=e);nc(a,g)}}else if(a=b)H(b)?a=Da(b,[],c,d):ga(b)?a=new Date(b.getTime()):Ua(b)?(a=new RegExp(b.source,b.toString().match(/[^\/]*$/)[0]),a.lastIndex=b.lastIndex):J(b)&&(e=Object.create(Object.getPrototypeOf(b)),a=Da(b,e,c,d));return a}function sa(b,a){if(H(b)){a=a||[];for(var c=0,d=b.length;c<d;c++)a[c]=b[c]}else if(J(b))for(c  [...]
+b)if("$"!==c.charAt(0)||"$"!==c.charAt(1))a[c]=b[c];return a||b}function ha(b,a){if(b===a)return!0;if(null===b||null===a)return!1;if(b!==b&&a!==a)return!0;var c=typeof b,d;if(c==typeof a&&"object"==c)if(H(b)){if(!H(a))return!1;if((c=b.length)==a.length){for(d=0;d<c;d++)if(!ha(b[d],a[d]))return!1;return!0}}else{if(ga(b))return ga(a)?ha(b.getTime(),a.getTime()):!1;if(Ua(b))return Ua(a)?b.toString()==a.toString():!1;if(Va(b)||Va(a)||Ta(b)||Ta(a)||H(a)||ga(a)||Ua(a))return!1;c={};for(d in b) [...]
+d.charAt(0)&&!G(b[d])){if(!ha(b[d],a[d]))return!1;c[d]=!0}for(d in a)if(!c.hasOwnProperty(d)&&"$"!==d.charAt(0)&&a[d]!==t&&!G(a[d]))return!1;return!0}return!1}function Ya(b,a,c){return b.concat(Za.call(a,c))}function pc(b,a){var c=2<arguments.length?Za.call(arguments,2):[];return!G(a)||a instanceof RegExp?a:c.length?function(){return arguments.length?a.apply(b,Ya(c,arguments,0)):a.apply(b,c)}:function(){return arguments.length?a.apply(b,arguments):a.call(b)}}function Hd(b,a){var c=a;"str [...]
+"$"===b.charAt(0)&&"$"===b.charAt(1)?c=t:Ta(a)?c="$WINDOW":a&&W===a?c="$DOCUMENT":Va(a)&&(c="$SCOPE");return c}function $a(b,a){if("undefined"===typeof b)return t;Y(a)||(a=a?2:null);return JSON.stringify(b,Hd,a)}function qc(b){return C(b)?JSON.parse(b):b}function wa(b){b=A(b).clone();try{b.empty()}catch(a){}var c=A("<div>").append(b).html();try{return b[0].nodeType===pb?z(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+z(b)})}catch(d){return z(c)}}function rc(b) [...]
+function sc(b){var a={},c,d;r((b||"").split("&"),function(b){b&&(c=b.replace(/\+/g,"%20").split("="),d=rc(c[0]),y(d)&&(b=y(c[1])?rc(c[1]):!0,tc.call(a,d)?H(a[d])?a[d].push(b):a[d]=[a[d],b]:a[d]=b))});return a}function Pb(b){var a=[];r(b,function(b,d){H(b)?r(b,function(b){a.push(Ea(d,!0)+(!0===b?"":"="+Ea(b,!0)))}):a.push(Ea(d,!0)+(!0===b?"":"="+Ea(b,!0)))});return a.length?a.join("&"):""}function qb(b){return Ea(b,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}functio [...]
+"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,a?"%20":"+")}function Id(b,a){var c,d,e=rb.length;b=A(b);for(d=0;d<e;++d)if(c=rb[d]+a,C(c=b.attr(c)))return c;return null}function Jd(b,a){var c,d,e={};r(rb,function(a){a+="app";!c&&b.hasAttribute&&b.hasAttribute(a)&&(c=b,d=b.getAttribute(a))});r(rb,function(a){a+="app";var e;!c&&(e=b.querySelector("["+a.replace(":","\\:")+"]"))&&(c=e,d=e.getAttribute(a))});c&&(e.strictDi=null!==Id(c,"s [...]
+a(c,d?[d]:[],e))}function uc(b,a,c){J(c)||(c={});c=w({strictDi:!1},c);var d=function(){b=A(b);if(b.injector()){var d=b[0]===W?"document":wa(b);throw Ja("btstrpd",d.replace(/</,"&lt;").replace(/>/,"&gt;"));}a=a||[];a.unshift(["$provide",function(a){a.value("$rootElement",b)}]);c.debugInfoEnabled&&a.push(["$compileProvider",function(a){a.debugInfoEnabled(!0)}]);a.unshift("ng");d=ab(a,c.strictDi);d.invoke(["$rootScope","$rootElement","$compile","$injector",function(a,b,c,d){a.$apply(functio [...]
+d);c(b)(a)})}]);return d},e=/^NG_ENABLE_DEBUG_INFO!/,f=/^NG_DEFER_BOOTSTRAP!/;Q&&e.test(Q.name)&&(c.debugInfoEnabled=!0,Q.name=Q.name.replace(e,""));if(Q&&!f.test(Q.name))return d();Q.name=Q.name.replace(f,"");ca.resumeBootstrap=function(b){r(b,function(b){a.push(b)});return d()};G(ca.resumeDeferredBootstrap)&&ca.resumeDeferredBootstrap()}function Kd(){Q.name="NG_ENABLE_DEBUG_INFO!"+Q.name;Q.location.reload()}function Ld(b){b=ca.element(b).injector();if(!b)throw Ja("test");return b.get(" [...]
+function vc(b,a){a=a||"_";return b.replace(Md,function(b,d){return(d?a:"")+b.toLowerCase()})}function Nd(){var b;wc||((ta=Q.jQuery)&&ta.fn.on?(A=ta,w(ta.fn,{scope:Ka.scope,isolateScope:Ka.isolateScope,controller:Ka.controller,injector:Ka.injector,inheritedData:Ka.inheritedData}),b=ta.cleanData,ta.cleanData=function(a){var c;if(Qb)Qb=!1;else for(var d=0,e;null!=(e=a[d]);d++)(c=ta._data(e,"events"))&&c.$destroy&&ta(e).triggerHandler("$destroy");b(a)}):A=T,ca.element=A,wc=!0)}function Rb(b, [...]
+a||"?",c||"required");return b}function sb(b,a,c){c&&H(b)&&(b=b[b.length-1]);Rb(G(b),a,"not a function, got "+(b&&"object"===typeof b?b.constructor.name||"Object":typeof b));return b}function La(b,a){if("hasOwnProperty"===b)throw Ja("badname",a);}function xc(b,a,c){if(!a)return b;a=a.split(".");for(var d,e=b,f=a.length,g=0;g<f;g++)d=a[g],b&&(b=(e=b)[d]);return!c&&G(b)?pc(e,b):b}function tb(b){var a=b[0];b=b[b.length-1];var c=[a];do{a=a.nextSibling;if(!a)break;c.push(a)}while(a!==b);retur [...]
+function Od(b){function a(a,b,c){return a[b]||(a[b]=c())}var c=R("$injector"),d=R("ng");b=a(b,"angular",Object);b.$$minErr=b.$$minErr||R;return a(b,"module",function(){var b={};return function(f,g,h){if("hasOwnProperty"===f)throw d("badname","module");g&&b.hasOwnProperty(f)&&(b[f]=null);return a(b,f,function(){function a(c,d,e,f){f||(f=b);return function(){f[e||"push"]([c,d,arguments]);return u}}if(!g)throw c("nomod",f);var b=[],d=[],e=[],q=a("$injector","invoke","push",d),u={_invokeQueu [...]
+_runBlocks:e,requires:g,name:f,provider:a("$provide","provider"),factory:a("$provide","factory"),service:a("$provide","service"),value:a("$provide","value"),constant:a("$provide","constant","unshift"),animation:a("$animateProvider","register"),filter:a("$filterProvider","register"),controller:a("$controllerProvider","register"),directive:a("$compileProvider","directive"),config:q,run:function(a){e.push(a);return this}};h&&q(h);return u})}})}function Pd(b){w(b,{bootstrap:uc,copy:Da,extend [...]
+element:A,forEach:r,injector:ab,noop:E,bind:pc,toJson:$a,fromJson:qc,identity:ra,isUndefined:x,isDefined:y,isString:C,isFunction:G,isObject:J,isNumber:Y,isElement:oc,isArray:H,version:Qd,isDate:ga,lowercase:z,uppercase:ub,callbacks:{counter:0},getTestability:Ld,$$minErr:R,$$csp:bb,reloadWithDebugInfo:Kd});cb=Od(Q);try{cb("ngLocale")}catch(a){cb("ngLocale",[]).provider("$locale",Rd)}cb("ng",["ngLocale"],["$provide",function(a){a.provider({$$sanitizeUri:Sd});a.provider("$compile",yc).direc [...]
+input:zc,textarea:zc,form:Ud,script:Vd,select:Wd,style:Xd,option:Yd,ngBind:Zd,ngBindHtml:$d,ngBindTemplate:ae,ngClass:be,ngClassEven:ce,ngClassOdd:de,ngCloak:ee,ngController:fe,ngForm:ge,ngHide:he,ngIf:ie,ngInclude:je,ngInit:ke,ngNonBindable:le,ngPluralize:me,ngRepeat:ne,ngShow:oe,ngStyle:pe,ngSwitch:qe,ngSwitchWhen:re,ngSwitchDefault:se,ngOptions:te,ngTransclude:ue,ngModel:ve,ngList:we,ngChange:xe,pattern:Ac,ngPattern:Ac,required:Bc,ngRequired:Bc,minlength:Cc,ngMinlength:Cc,maxlength:Dc [...]
+ngValue:ye,ngModelOptions:ze}).directive({ngInclude:Ae}).directive(vb).directive(Ec);a.provider({$anchorScroll:Be,$animate:Ce,$browser:De,$cacheFactory:Ee,$controller:Fe,$document:Ge,$exceptionHandler:He,$filter:Fc,$interpolate:Ie,$interval:Je,$http:Ke,$httpBackend:Le,$location:Me,$log:Ne,$parse:Oe,$rootScope:Pe,$q:Qe,$$q:Re,$sce:Se,$sceDelegate:Te,$sniffer:Ue,$templateCache:Ve,$templateRequest:We,$$testability:Xe,$timeout:Ye,$window:Ze,$$rAF:$e,$$asyncCallback:af,$$jqLite:bf})}])}functi [...]
+function(a,b,d,e){return e?d.toUpperCase():d}).replace(df,"Moz$1")}function Gc(b){b=b.nodeType;return b===qa||!b||9===b}function Hc(b,a){var c,d,e=a.createDocumentFragment(),f=[];if(Sb.test(b)){c=c||e.appendChild(a.createElement("div"));d=(ef.exec(b)||["",""])[1].toLowerCase();d=ja[d]||ja._default;c.innerHTML=d[1]+b.replace(ff,"<$1></$2>")+d[2];for(d=d[0];d--;)c=c.lastChild;f=Ya(f,c.childNodes);c=e.firstChild;c.textContent=""}else f.push(a.createTextNode(b));e.textContent="";e.innerHTML= [...]
+return e}function T(b){if(b instanceof T)return b;var a;C(b)&&(b=N(b),a=!0);if(!(this instanceof T)){if(a&&"<"!=b.charAt(0))throw Tb("nosel");return new T(b)}if(a){a=W;var c;b=(c=gf.exec(b))?[a.createElement(c[1])]:(c=Hc(b,a))?c.childNodes:[]}Ic(this,b)}function Ub(b){return b.cloneNode(!0)}function wb(b,a){a||xb(b);if(b.querySelectorAll)for(var c=b.querySelectorAll("*"),d=0,e=c.length;d<e;d++)xb(c[d])}function Jc(b,a,c,d){if(y(d))throw Tb("offargs");var e=(d=yb(b))&&d.events,f=d&&d.hand [...]
+function(a){if(y(c)){var d=e[a];Xa(d||[],c);if(d&&0<d.length)return}b.removeEventListener(a,f,!1);delete e[a]});else for(a in e)"$destroy"!==a&&b.removeEventListener(a,f,!1),delete e[a]}function xb(b,a){var c=b.ng339,d=c&&zb[c];d&&(a?delete d.data[a]:(d.handle&&(d.events.$destroy&&d.handle({},"$destroy"),Jc(b)),delete zb[c],b.ng339=t))}function yb(b,a){var c=b.ng339,c=c&&zb[c];a&&!c&&(b.ng339=c=++hf,c=zb[c]={events:{},data:{},handle:t});return c}function Vb(b,a,c){if(Gc(b)){var d=y(c),e= [...]
+f=!a;b=(b=yb(b,!e))&&b.data;if(d)b[a]=c;else{if(f)return b;if(e)return b&&b[a];w(b,a)}}}function Ab(b,a){return b.getAttribute?-1<(" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").indexOf(" "+a+" "):!1}function Bb(b,a){a&&b.setAttribute&&r(a.split(" "),function(a){b.setAttribute("class",N((" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").replace(" "+N(a)+" "," ")))})}function Cb(b,a){if(a&&b.setAttribute){var c=(" "+(b.getAttribute("class")||"")+" ").replace(/[\ [...]
+r(a.split(" "),function(a){a=N(a);-1===c.indexOf(" "+a+" ")&&(c+=a+" ")});b.setAttribute("class",N(c))}}function Ic(b,a){if(a)if(a.nodeType)b[b.length++]=a;else{var c=a.length;if("number"===typeof c&&a.window!==a){if(c)for(var d=0;d<c;d++)b[b.length++]=a[d]}else b[b.length++]=a}}function Kc(b,a){return Db(b,"$"+(a||"ngController")+"Controller")}function Db(b,a,c){9==b.nodeType&&(b=b.documentElement);for(a=H(a)?a:[a];b;){for(var d=0,e=a.length;d<e;d++)if((c=A.data(b,a[d]))!==t)return c;b= [...]
+11===b.nodeType&&b.host}}function Lc(b){for(wb(b,!0);b.firstChild;)b.removeChild(b.firstChild)}function Mc(b,a){a||wb(b);var c=b.parentNode;c&&c.removeChild(b)}function jf(b,a){a=a||Q;if("complete"===a.document.readyState)a.setTimeout(b);else A(a).on("load",b)}function Nc(b,a){var c=Eb[a.toLowerCase()];return c&&Oc[va(b)]&&c}function kf(b,a){var c=b.nodeName;return("INPUT"===c||"TEXTAREA"===c)&&Pc[a]}function lf(b,a){var c=function(c,e){c.isDefaultPrevented=function(){return c.defaultPre [...]
+a[e||c.type],g=f?f.length:0;if(g){if(x(c.immediatePropagationStopped)){var h=c.stopImmediatePropagation;c.stopImmediatePropagation=function(){c.immediatePropagationStopped=!0;c.stopPropagation&&c.stopPropagation();h&&h.call(c)}}c.isImmediatePropagationStopped=function(){return!0===c.immediatePropagationStopped};1<g&&(f=sa(f));for(var l=0;l<g;l++)c.isImmediatePropagationStopped()||f[l].call(b,c)}};c.elem=b;return c}function bf(){this.$get=function(){return w(T,{hasClass:function(b,a){b.at [...]
+return Ab(b,a)},addClass:function(b,a){b.attr&&(b=b[0]);return Cb(b,a)},removeClass:function(b,a){b.attr&&(b=b[0]);return Bb(b,a)}})}}function Ma(b,a){var c=b&&b.$$hashKey;if(c)return"function"===typeof c&&(c=b.$$hashKey()),c;c=typeof b;return c="function"==c||"object"==c&&null!==b?b.$$hashKey=c+":"+(a||Fd)():c+":"+b}function eb(b,a){if(a){var c=0;this.nextUid=function(){return++c}}r(b,this.put,this)}function mf(b){return(b=b.toString().replace(Qc,"").match(Rc))?"function("+(b[1]||"").re [...]
+" ")+")":"fn"}function ab(b,a){function c(a){return function(b,c){if(J(b))r(b,mc(a));else return a(b,c)}}function d(a,b){La(a,"service");if(G(b)||H(b))b=q.instantiate(b);if(!b.$get)throw Fa("pget",a);return p[a+"Provider"]=b}function e(a,b){return function(){var c=s.invoke(b,this);if(x(c))throw Fa("undef",a);return c}}function f(a,b,c){return d(a,{$get:!1!==c?e(a,b):b})}function g(a){var b=[],c;r(a,function(a){function d(a){var b,c;b=0;for(c=a.length;b<c;b++){var e=a[b],f=q.get(e[0]);f[e [...]
+e[2])}}if(!n.get(a)){n.put(a,!0);try{C(a)?(c=cb(a),b=b.concat(g(c.requires)).concat(c._runBlocks),d(c._invokeQueue),d(c._configBlocks)):G(a)?b.push(q.invoke(a)):H(a)?b.push(q.invoke(a)):sb(a,"module")}catch(e){throw H(a)&&(a=a[a.length-1]),e.message&&e.stack&&-1==e.stack.indexOf(e.message)&&(e=e.message+"\n"+e.stack),Fa("modulerr",a,e.stack||e.message||e);}}});return b}function h(b,c){function d(a,e){if(b.hasOwnProperty(a)){if(b[a]===l)throw Fa("cdep",a+" <- "+k.join(" <- "));return b[a] [...]
+b[a]=l,b[a]=c(a,e)}catch(f){throw b[a]===l&&delete b[a],f;}finally{k.shift()}}function e(b,c,f,g){"string"===typeof f&&(g=f,f=null);var k=[],h=ab.$$annotate(b,a,g),l,q,p;q=0;for(l=h.length;q<l;q++){p=h[q];if("string"!==typeof p)throw Fa("itkn",p);k.push(f&&f.hasOwnProperty(p)?f[p]:d(p,g))}H(b)&&(b=b[l]);return b.apply(c,k)}return{invoke:e,instantiate:function(a,b,c){var d=Object.create((H(a)?a[a.length-1]:a).prototype||null);a=e(a,d,b,c);return J(a)||G(a)?a:d},get:d,annotate:ab.$$annotat [...]
+"Provider")||b.hasOwnProperty(a)}}}a=!0===a;var l={},k=[],n=new eb([],!0),p={$provide:{provider:c(d),factory:c(f),service:c(function(a,b){return f(a,["$injector",function(a){return a.instantiate(b)}])}),value:c(function(a,b){return f(a,ea(b),!1)}),constant:c(function(a,b){La(a,"constant");p[a]=b;u[a]=b}),decorator:function(a,b){var c=q.get(a+"Provider"),d=c.$get;c.$get=function(){var a=s.invoke(d,c);return s.invoke(b,null,{$delegate:a})}}}},q=p.$injector=h(p,function(a,b){ca.isString(b)& [...]
+throw Fa("unpr",k.join(" <- "));}),u={},s=u.$injector=h(u,function(a,b){var c=q.get(a+"Provider",b);return s.invoke(c.$get,c,t,a)});r(g(b),function(a){s.invoke(a||E)});return s}function Be(){var b=!0;this.disableAutoScrolling=function(){b=!1};this.$get=["$window","$location","$rootScope",function(a,c,d){function e(a){var b=null;Array.prototype.some.call(a,function(a){if("a"===va(a))return b=a,!0});return b}function f(b){if(b){b.scrollIntoView();var c;c=g.yOffset;G(c)?c=c():oc(c)?(c=c[0], [...]
+a.getComputedStyle(c).position?0:c.getBoundingClientRect().bottom):Y(c)||(c=0);c&&(b=b.getBoundingClientRect().top,a.scrollBy(0,b-c))}else a.scrollTo(0,0)}function g(){var a=c.hash(),b;a?(b=h.getElementById(a))?f(b):(b=e(h.getElementsByName(a)))?f(b):"top"===a&&f(null):f(null)}var h=a.document;b&&d.$watch(function(){return c.hash()},function(a,b){a===b&&""===a||jf(function(){d.$evalAsync(g)})});return g}]}function af(){this.$get=["$$rAF","$timeout",function(b,a){return b.supported?functi [...]
+function(b){return a(b,0,!1)}}]}function nf(b,a,c,d){function e(a){try{a.apply(null,Za.call(arguments,1))}finally{if(m--,0===m)for(;F.length;)try{F.pop()()}catch(b){c.error(b)}}}function f(a,b){(function da(){r(Z,function(a){a()});L=b(da,a)})()}function g(){h();l()}function h(){a:{try{B=u.state;break a}catch(a){}B=void 0}B=x(B)?null:B;ha(B,O)&&(B=O);O=B}function l(){if(D!==n.url()||I!==B)D=n.url(),I=B,r(X,function(a){a(n.url(),B)})}function k(a){try{return decodeURIComponent(a)}catch(b){ [...]
+var n=this,p=a[0],q=b.location,u=b.history,s=b.setTimeout,M=b.clearTimeout,v={};n.isMock=!1;var m=0,F=[];n.$$completeOutstandingRequest=e;n.$$incOutstandingRequestCount=function(){m++};n.notifyWhenNoOutstandingRequests=function(a){r(Z,function(a){a()});0===m?a():F.push(a)};var Z=[],L;n.addPollFn=function(a){x(L)&&f(100,s);Z.push(a);return a};var B,I,D=q.href,S=a.find("base"),P=null;h();I=B;n.url=function(a,c,e){x(e)&&(e=null);q!==b.location&&(q=b.location);u!==b.history&&(u=b.history);if [...]
+I===e;if(D===a&&(!d.history||f))return n;var g=D&&Ga(D)===Ga(a);D=a;I=e;!d.history||g&&f?(g||(P=a),c?q.replace(a):g?(c=q,e=a.indexOf("#"),a=-1===e?"":a.substr(e+1),c.hash=a):q.href=a):(u[c?"replaceState":"pushState"](e,"",a),h(),I=B);return n}return P||q.href.replace(/%27/g,"'")};n.state=function(){return B};var X=[],ba=!1,O=null;n.onUrlChange=function(a){if(!ba){if(d.history)A(b).on("popstate",g);A(b).on("hashchange",g);ba=!0}X.push(a);return a};n.$$checkUrlChange=l;n.baseHref=function( [...]
+return a?a.replace(/^(https?\:)?\/\/[^\/]*/,""):""};var fa={},y="",ka=n.baseHref();n.cookies=function(a,b){var d,e,f,g;if(a)b===t?p.cookie=encodeURIComponent(a)+"=;path="+ka+";expires=Thu, 01 Jan 1970 00:00:00 GMT":C(b)&&(d=(p.cookie=encodeURIComponent(a)+"="+encodeURIComponent(b)+";path="+ka).length+1,4096<d&&c.warn("Cookie '"+a+"' possibly not set or overflowed because it was too large ("+d+" > 4096 bytes)!"));else{if(p.cookie!==y)for(y=p.cookie,d=y.split("; "),fa={},f=0;f<d.length;f++ [...]
+e.indexOf("="),0<g&&(a=k(e.substring(0,g)),fa[a]===t&&(fa[a]=k(e.substring(g+1))));return fa}};n.defer=function(a,b){var c;m++;c=s(function(){delete v[c];e(a)},b||0);v[c]=!0;return c};n.defer.cancel=function(a){return v[a]?(delete v[a],M(a),e(E),!0):!1}}function De(){this.$get=["$window","$log","$sniffer","$document",function(b,a,c,d){return new nf(b,d,a,c)}]}function Ee(){this.$get=function(){function b(b,d){function e(a){a!=p&&(q?q==a&&(q=a.n):q=a,f(a.n,a.p),f(a,p),p=a,p.n=null)}functi [...]
+b&&(a&&(a.p=b),b&&(b.n=a))}if(b in a)throw R("$cacheFactory")("iid",b);var g=0,h=w({},d,{id:b}),l={},k=d&&d.capacity||Number.MAX_VALUE,n={},p=null,q=null;return a[b]={put:function(a,b){if(k<Number.MAX_VALUE){var c=n[a]||(n[a]={key:a});e(c)}if(!x(b))return a in l||g++,l[a]=b,g>k&&this.remove(q.key),b},get:function(a){if(k<Number.MAX_VALUE){var b=n[a];if(!b)return;e(b)}return l[a]},remove:function(a){if(k<Number.MAX_VALUE){var b=n[a];if(!b)return;b==p&&(p=b.p);b==q&&(q=b.n);f(b.n,b.p);dele [...]
+g--},removeAll:function(){l={};g=0;n={};p=q=null},destroy:function(){n=h=l=null;delete a[b]},info:function(){return w({},h,{size:g})}}}var a={};b.info=function(){var b={};r(a,function(a,e){b[e]=a.info()});return b};b.get=function(b){return a[b]};return b}}function Ve(){this.$get=["$cacheFactory",function(b){return b("templates")}]}function yc(b,a){function c(a,b){var c=/^\s*([@&]|=(\*?))(\??)\s*(\w*)\s*$/,d={};r(a,function(a,e){var f=a.match(c);if(!f)throw la("iscp",b,e,a);d[e]={mode:f[1 [...]
+f[2],optional:"?"===f[3],attrName:f[4]||e}});return d}var d={},e=/^\s*directive\:\s*([\w\-]+)\s+(.*)$/,f=/(([\w\-]+)(?:\:([^;]+))?;?)/,g=Gd("ngSrc,ngSrcset,src,srcset"),h=/^(?:(\^\^?)?(\?)?(\^\^?)?)?/,l=/^(on[a-z]+|formaction)$/;this.directive=function p(a,e){La(a,"directive");C(a)?(Rb(e,"directiveFactory"),d.hasOwnProperty(a)||(d[a]=[],b.factory(a+"Directive",["$injector","$exceptionHandler",function(b,e){var f=[];r(d[a],function(d,g){try{var h=b.invoke(d);G(h)?h={compile:ea(h)}:!h.comp [...]
+(h.compile=ea(h.link));h.priority=h.priority||0;h.index=g;h.name=h.name||a;h.require=h.require||h.controller&&h.name;h.restrict=h.restrict||"EA";J(h.scope)&&(h.$$isolateBindings=c(h.scope,h.name));f.push(h)}catch(k){e(k)}});return f}])),d[a].push(e)):r(a,mc(p));return this};this.aHrefSanitizationWhitelist=function(b){return y(b)?(a.aHrefSanitizationWhitelist(b),this):a.aHrefSanitizationWhitelist()};this.imgSrcSanitizationWhitelist=function(b){return y(b)?(a.imgSrcSanitizationWhitelist(b) [...]
+var k=!0;this.debugInfoEnabled=function(a){return y(a)?(k=a,this):k};this.$get=["$injector","$interpolate","$exceptionHandler","$templateRequest","$parse","$controller","$rootScope","$document","$sce","$animate","$$sanitizeUri",function(a,b,c,s,M,v,m,F,Z,L,B){function I(a,b){try{a.addClass(b)}catch(c){}}function D(a,b,c,d,e){a instanceof A||(a=A(a));r(a,function(b,c){b.nodeType==pb&&b.nodeValue.match(/\S+/)&&(a[c]=A(b).wrap("<span></span>").parent()[0])});var f=S(a,b,a,c,d,e);D.$$addScop [...]
+var g=null;return function(b,c,d){Rb(b,"scope");d=d||{};var e=d.parentBoundTranscludeFn,h=d.transcludeControllers;d=d.futureParentElement;e&&e.$$boundTransclude&&(e=e.$$boundTransclude);g||(g=(d=d&&d[0])?"foreignobject"!==va(d)&&d.toString().match(/SVG/)?"svg":"html":"html");d="html"!==g?A(Xb(g,A("<div>").append(a).html())):c?Ka.clone.call(a):a;if(h)for(var k in h)d.data("$"+k+"Controller",h[k].instance);D.$$addScopeInfo(d,b);c&&c(d,b);f&&f(b,d,d,e);return d}}function S(a,b,c,d,e,f){func [...]
+c,d,e){var f,k,l,q,p,s,M;if(m)for(M=Array(c.length),q=0;q<h.length;q+=3)f=h[q],M[f]=c[f];else M=c;q=0;for(p=h.length;q<p;)k=M[h[q++]],c=h[q++],f=h[q++],c?(c.scope?(l=a.$new(),D.$$addScopeInfo(A(k),l)):l=a,s=c.transcludeOnThisElement?P(a,c.transclude,e,c.elementTranscludeOnThisElement):!c.templateOnThisElement&&e?e:!e&&b?P(a,b):null,c(f,l,k,d,s)):f&&f(a,k.childNodes,t,e)}for(var h=[],k,l,q,p,m,s=0;s<a.length;s++){k=new Yb;l=X(a[s],[],k,0===s?d:t,e);(f=l.length?fa(l,a[s],k,b,c,null,[],[],f [...]
+f.scope&&D.$$addScopeClass(k.$$element);k=f&&f.terminal||!(q=a[s].childNodes)||!q.length?null:S(q,f?(f.transcludeOnThisElement||!f.templateOnThisElement)&&f.transclude:b);if(f||k)h.push(s,f,k),p=!0,m=m||f;f=null}return p?g:null}function P(a,b,c,d){return function(d,e,f,g,h){d||(d=a.$new(!1,h),d.$$transcluded=!0);return b(d,e,{parentBoundTranscludeFn:c,transcludeControllers:f,futureParentElement:g})}}function X(a,b,c,d,g){var h=c.$attr,k;switch(a.nodeType){case qa:ka(b,xa(va(a)),"E",d,g); [...]
+q,p,m=a.attributes,s=0,M=m&&m.length;s<M;s++){var u=!1,L=!1;l=m[s];k=l.name;q=N(l.value);l=xa(k);if(p=U.test(l))k=k.replace(Sc,"").substr(8).replace(/_(.)/g,function(a,b){return b.toUpperCase()});var B=l.replace(/(Start|End)$/,"");x(B)&&l===B+"Start"&&(u=k,L=k.substr(0,k.length-5)+"end",k=k.substr(0,k.length-6));l=xa(k.toLowerCase());h[l]=k;if(p||!c.hasOwnProperty(l))c[l]=q,Nc(a,l)&&(c[l]=!0);Oa(a,b,q,l,p);ka(b,l,"A",d,g,u,L)}a=a.className;J(a)&&(a=a.animVal);if(C(a)&&""!==a)for(;k=f.exe [...]
+ka(b,l,"C",d,g)&&(c[l]=N(k[3])),a=a.substr(k.index+k[0].length);break;case pb:za(b,a.nodeValue);break;case 8:try{if(k=e.exec(a.nodeValue))l=xa(k[1]),ka(b,l,"M",d,g)&&(c[l]=N(k[2]))}catch(v){}}b.sort(da);return b}function ba(a,b,c){var d=[],e=0;if(b&&a.hasAttribute&&a.hasAttribute(b)){do{if(!a)throw la("uterdir",b,c);a.nodeType==qa&&(a.hasAttribute(b)&&e++,a.hasAttribute(c)&&e--);d.push(a);a=a.nextSibling}while(0<e)}else d.push(a);return A(d)}function O(a,b,c){return function(d,e,f,g,h){e [...]
+b,c);return a(d,e,f,g,h)}}function fa(a,d,e,f,g,k,l,p,m){function s(a,b,c,d){if(a){c&&(a=O(a,c,d));a.require=K.require;a.directiveName=da;if(P===K||K.$$isolateScope)a=Y(a,{isolateScope:!0});l.push(a)}if(b){c&&(b=O(b,c,d));b.require=K.require;b.directiveName=da;if(P===K||K.$$isolateScope)b=Y(b,{isolateScope:!0});p.push(b)}}function L(a,b,c,d){var e,f="data",g=!1,k=c,l;if(C(b)){l=b.match(h);b=b.substring(l[0].length);l[3]&&(l[1]?l[3]=null:l[1]=l[3]);"^"===l[1]?f="inheritedData":"^^"===l[1] [...]
+k=c.parent());"?"===l[2]&&(g=!0);e=null;d&&"data"===f&&(e=d[b])&&(e=e.instance);e=e||k[f]("$"+b+"Controller");if(!e&&!g)throw la("ctreq",b,a);return e||null}H(b)&&(e=[],r(b,function(b){e.push(L(a,b,c,d))}));return e}function B(a,c,f,g,h){function k(a,b,c){var d;Va(a)||(c=b,b=a,a=t);E&&(d=F);c||(c=E?X.parent():X);return h(a,b,d,c,Wb)}var m,s,u,I,F,gb,X,O;d===f?(O=e,X=e.$$element):(X=A(f),O=new Yb(X,e));P&&(I=c.$new(!0));h&&(gb=k,gb.$$boundTransclude=h);S&&(Z={},F={},r(S,function(a){var b= [...]
+P||a.$$isolateScope?I:c,$element:X,$attrs:O,$transclude:gb};u=a.controller;"@"==u&&(u=O[a.name]);b=v(u,b,!0,a.controllerAs);F[a.name]=b;E||X.data("$"+a.name+"Controller",b.instance);Z[a.name]=b}));if(P){D.$$addScopeInfo(X,I,!0,!(ma&&(ma===P||ma===P.$$originalDirective)));D.$$addScopeClass(X,!0);g=Z&&Z[P.name];var ba=I;g&&g.identifier&&!0===P.bindToController&&(ba=g.instance);r(I.$$isolateBindings=P.$$isolateBindings,function(a,d){var e=a.attrName,f=a.optional,g,h,k,l;switch(a.mode){case  [...]
+function(a){ba[d]=a});O.$$observers[e].$$scope=c;O[e]&&(ba[d]=b(O[e])(c));break;case "=":if(f&&!O[e])break;h=M(O[e]);l=h.literal?ha:function(a,b){return a===b||a!==a&&b!==b};k=h.assign||function(){g=ba[d]=h(c);throw la("nonassign",O[e],P.name);};g=ba[d]=h(c);f=function(a){l(a,ba[d])||(l(a,g)?k(c,a=ba[d]):ba[d]=a);return g=a};f.$stateful=!0;f=a.collection?c.$watchCollection(O[e],f):c.$watch(M(O[e],f),null,h.literal);I.$on("$destroy",f);break;case "&":h=M(O[e]),ba[d]=function(a){return h(c [...]
+(r(Z,function(a){a()}),Z=null);g=0;for(m=l.length;g<m;g++)s=l[g],$(s,s.isolateScope?I:c,X,O,s.require&&L(s.directiveName,s.require,X,F),gb);var Wb=c;P&&(P.template||null===P.templateUrl)&&(Wb=I);a&&a(Wb,f.childNodes,t,h);for(g=p.length-1;0<=g;g--)s=p[g],$(s,s.isolateScope?I:c,X,O,s.require&&L(s.directiveName,s.require,X,F),gb)}m=m||{};for(var I=-Number.MAX_VALUE,F,S=m.controllerDirectives,Z,P=m.newIsolateScopeDirective,ma=m.templateDirective,fa=m.nonTlbTranscludeDirective,ka=!1,x=!1,E=m. [...]
+w=e.$$element=A(d),K,da,V,fb=f,za,z=0,Q=a.length;z<Q;z++){K=a[z];var Oa=K.$$start,U=K.$$end;Oa&&(w=ba(d,Oa,U));V=t;if(I>K.priority)break;if(V=K.scope)K.templateUrl||(J(V)?(Na("new/isolated scope",P||F,K,w),P=K):Na("new/isolated scope",P,K,w)),F=F||K;da=K.name;!K.templateUrl&&K.controller&&(V=K.controller,S=S||{},Na("'"+da+"' controller",S[da],K,w),S[da]=K);if(V=K.transclude)ka=!0,K.$$tlb||(Na("transclusion",fa,K,w),fa=K),"element"==V?(E=!0,I=K.priority,V=w,w=e.$$element=A(W.createComment [...]
+e[da]+" ")),d=w[0],T(g,Za.call(V,0),d),fb=D(V,f,I,k&&k.name,{nonTlbTranscludeDirective:fa})):(V=A(Ub(d)).contents(),w.empty(),fb=D(V,f));if(K.template)if(x=!0,Na("template",ma,K,w),ma=K,V=G(K.template)?K.template(w,e):K.template,V=Tc(V),K.replace){k=K;V=Sb.test(V)?Uc(Xb(K.templateNamespace,N(V))):[];d=V[0];if(1!=V.length||d.nodeType!==qa)throw la("tplrt",da,"");T(g,w,d);Q={$attr:{}};V=X(d,[],Q);var aa=a.splice(z+1,a.length-(z+1));P&&y(V);a=a.concat(V).concat(aa);R(e,Q);Q=a.length}else w. [...]
+!0,Na("template",ma,K,w),ma=K,K.replace&&(k=K),B=of(a.splice(z,a.length-z),w,e,g,ka&&fb,l,p,{controllerDirectives:S,newIsolateScopeDirective:P,templateDirective:ma,nonTlbTranscludeDirective:fa}),Q=a.length;else if(K.compile)try{za=K.compile(w,e,fb),G(za)?s(null,za,Oa,U):za&&s(za.pre,za.post,Oa,U)}catch(pf){c(pf,wa(w))}K.terminal&&(B.terminal=!0,I=Math.max(I,K.priority))}B.scope=F&&!0===F.scope;B.transcludeOnThisElement=ka;B.elementTranscludeOnThisElement=E;B.templateOnThisElement=x;B.tra [...]
+m.hasElementTranscludeDirective=E;return B}function y(a){for(var b=0,c=a.length;b<c;b++)a[b]=Ob(a[b],{$$isolateScope:!0})}function ka(b,e,f,g,h,k,l){if(e===h)return null;h=null;if(d.hasOwnProperty(e)){var q;e=a.get(e+"Directive");for(var m=0,s=e.length;m<s;m++)try{q=e[m],(g===t||g>q.priority)&&-1!=q.restrict.indexOf(f)&&(k&&(q=Ob(q,{$$start:k,$$end:l})),b.push(q),h=q)}catch(M){c(M)}}return h}function x(b){if(d.hasOwnProperty(b))for(var c=a.get(b+"Directive"),e=0,f=c.length;e<f;e++)if(b=c [...]
+return!1}function R(a,b){var c=b.$attr,d=a.$attr,e=a.$$element;r(a,function(d,e){"$"!=e.charAt(0)&&(b[e]&&b[e]!==d&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});r(b,function(b,f){"class"==f?(I(e,b),a["class"]=(a["class"]?a["class"]+" ":"")+b):"style"==f?(e.attr("style",e.attr("style")+";"+b),a.style=(a.style?a.style+";":"")+b):"$"==f.charAt(0)||a.hasOwnProperty(f)||(a[f]=b,d[f]=c[f])})}function of(a,b,c,d,e,f,g,h){var k=[],l,q,p=b[0],m=a.shift(),M=Ob(m,{templateUrl:null,transcl [...]
+replace:null,$$originalDirective:m}),u=G(m.templateUrl)?m.templateUrl(b,c):m.templateUrl,L=m.templateNamespace;b.empty();s(Z.getTrustedResourceUrl(u)).then(function(s){var B,v;s=Tc(s);if(m.replace){s=Sb.test(s)?Uc(Xb(L,N(s))):[];B=s[0];if(1!=s.length||B.nodeType!==qa)throw la("tplrt",m.name,u);s={$attr:{}};T(d,b,B);var D=X(B,[],s);J(m.scope)&&y(D);a=D.concat(a);R(c,s)}else B=p,b.html(s);a.unshift(M);l=fa(a,B,c,e,b,m,f,g,h);r(d,function(a,c){a==B&&(d[c]=b[0])});for(q=S(b[0].childNodes,e); [...]
+k.shift();v=k.shift();var F=k.shift(),O=k.shift(),D=b[0];if(!s.$$destroyed){if(v!==p){var Z=v.className;h.hasElementTranscludeDirective&&m.replace||(D=Ub(B));T(F,A(v),D);I(A(D),Z)}v=l.transcludeOnThisElement?P(s,l.transclude,O):O;l(q,s,D,d,v)}}k=null});return function(a,b,c,d,e){a=e;b.$$destroyed||(k?k.push(b,c,d,a):(l.transcludeOnThisElement&&(a=P(b,l.transclude,e)),l(q,b,c,d,a)))}}function da(a,b){var c=b.priority-a.priority;return 0!==c?c:a.name!==b.name?a.name<b.name?-1:1:a.index-b.i [...]
+b,c,d){if(b)throw la("multidir",b.name,c.name,a,wa(d));}function za(a,c){var d=b(c,!0);d&&a.push({priority:0,compile:function(a){a=a.parent();var b=!!a.length;b&&D.$$addBindingClass(a);return function(a,c){var e=c.parent();b||D.$$addBindingClass(e);D.$$addBindingInfo(e,d.expressions);a.$watch(d,function(a){c[0].nodeValue=a})}}})}function Xb(a,b){a=z(a||"html");switch(a){case "svg":case "math":var c=W.createElement("div");c.innerHTML="<"+a+">"+b+"</"+a+">";return c.childNodes[0].childNode [...]
+function Q(a,b){if("srcdoc"==b)return Z.HTML;var c=va(a);if("xlinkHref"==b||"form"==c&&"action"==b||"img"!=c&&("src"==b||"ngSrc"==b))return Z.RESOURCE_URL}function Oa(a,c,d,e,f){var h=Q(a,e);f=g[e]||f;var k=b(d,!0,h,f);if(k){if("multiple"===e&&"select"===va(a))throw la("selmulti",wa(a));c.push({priority:100,compile:function(){return{pre:function(a,c,g){c=g.$$observers||(g.$$observers={});if(l.test(e))throw la("nodomevents");var m=g[e];m!==d&&(k=m&&b(m,!0,h,f),d=m);k&&(g[e]=k(a),(c[e]||(c [...]
+!0,(g.$$observers&&g.$$observers[e].$$scope||a).$watch(k,function(a,b){"class"===e&&a!=b?g.$updateClass(a,b):g.$set(e,a)}))}}}})}}function T(a,b,c){var d=b[0],e=b.length,f=d.parentNode,g,h;if(a)for(g=0,h=a.length;g<h;g++)if(a[g]==d){a[g++]=c;h=g+e-1;for(var k=a.length;g<k;g++,h++)h<k?a[g]=a[h]:delete a[g];a.length-=e-1;a.context===d&&(a.context=c);break}f&&f.replaceChild(c,d);a=W.createDocumentFragment();a.appendChild(d);A(c).data(A(d).data());ta?(Qb=!0,ta.cleanData([d])):delete A.cache[ [...]
+d=1;for(e=b.length;d<e;d++)f=b[d],A(f).remove(),a.appendChild(f),delete b[d];b[0]=c;b.length=1}function Y(a,b){return w(function(){return a.apply(null,arguments)},a,b)}function $(a,b,d,e,f,g){try{a(b,d,e,f,g)}catch(h){c(h,wa(d))}}var Yb=function(a,b){if(b){var c=Object.keys(b),d,e,f;d=0;for(e=c.length;d<e;d++)f=c[d],this[f]=b[f]}else this.$attr={};this.$$element=a};Yb.prototype={$normalize:xa,$addClass:function(a){a&&0<a.length&&L.addClass(this.$$element,a)},$removeClass:function(a){a&&0 [...]
+L.removeClass(this.$$element,a)},$updateClass:function(a,b){var c=Vc(a,b);c&&c.length&&L.addClass(this.$$element,c);(c=Vc(b,a))&&c.length&&L.removeClass(this.$$element,c)},$set:function(a,b,d,e){var f=this.$$element[0],g=Nc(f,a),h=kf(f,a),f=a;g?(this.$$element.prop(a,b),e=g):h&&(this[h]=b,f=h);this[a]=b;e?this.$attr[a]=e:(e=this.$attr[a])||(this.$attr[a]=e=vc(a,"-"));g=va(this.$$element);if("a"===g&&"href"===a||"img"===g&&"src"===a)this[a]=b=B(b,"src"===a);else if("img"===g&&"srcset"===a [...]
+"",h=N(b),k=/(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/,k=/\s/.test(h)?k:/(,)/,h=h.split(k),k=Math.floor(h.length/2),l=0;l<k;l++)var q=2*l,g=g+B(N(h[q]),!0),g=g+(" "+N(h[q+1]));h=N(h[2*l]).split(/\s/);g+=B(N(h[0]),!0);2===h.length&&(g+=" "+N(h[1]));this[a]=b=g}!1!==d&&(null===b||b===t?this.$$element.removeAttr(e):this.$$element.attr(e,b));(a=this.$$observers)&&r(a[f],function(a){try{a(b)}catch(d){c(d)}})},$observe:function(a,b){var c=this,d=c.$$observers||(c.$$observers=ia()),e=d[a]||(d[a]=[]) [...]
+m.$evalAsync(function(){!e.$$inter&&c.hasOwnProperty(a)&&b(c[a])});return function(){Xa(e,b)}}};var V=b.startSymbol(),ma=b.endSymbol(),Tc="{{"==V||"}}"==ma?ra:function(a){return a.replace(/\{\{/g,V).replace(/}}/g,ma)},U=/^ngAttr[A-Z]/;D.$$addBindingInfo=k?function(a,b){var c=a.data("$binding")||[];H(b)?c=c.concat(b):c.push(b);a.data("$binding",c)}:E;D.$$addBindingClass=k?function(a){I(a,"ng-binding")}:E;D.$$addScopeInfo=k?function(a,b,c,d){a.data(c?d?"$isolateScopeNoTemplate":"$isolateSc [...]
+b)}:E;D.$$addScopeClass=k?function(a,b){I(a,b?"ng-isolate-scope":"ng-scope")}:E;return D}]}function xa(b){return db(b.replace(Sc,""))}function Vc(b,a){var c="",d=b.split(/\s+/),e=a.split(/\s+/),f=0;a:for(;f<d.length;f++){for(var g=d[f],h=0;h<e.length;h++)if(g==e[h])continue a;c+=(0<c.length?" ":"")+g}return c}function Uc(b){b=A(b);var a=b.length;if(1>=a)return b;for(;a--;)8===b[a].nodeType&&qf.call(b,a,1);return b}function Fe(){var b={},a=!1,c=/^(\S+)(\s+as\s+(\w+))?$/;this.register=func [...]
+"controller");J(a)?w(b,a):b[a]=c};this.allowGlobals=function(){a=!0};this.$get=["$injector","$window",function(d,e){function f(a,b,c,d){if(!a||!J(a.$scope))throw R("$controller")("noscp",d,b);a.$scope[b]=c}return function(g,h,l,k){var n,p,q;l=!0===l;k&&C(k)&&(q=k);if(C(g)){k=g.match(c);if(!k)throw rf("ctrlfmt",g);p=k[1];q=q||k[3];g=b.hasOwnProperty(p)?b[p]:xc(h.$scope,p,!0)||(a?xc(e,p,!0):t);sb(g,p,!0)}if(l)return l=(H(g)?g[g.length-1]:g).prototype,n=Object.create(l||null),q&&f(h,q,n,p|| [...]
+n,h,p);return n},{instance:n,identifier:q});n=d.instantiate(g,h,p);q&&f(h,q,n,p||g.name);return n}}]}function Ge(){this.$get=["$window",function(b){return A(b.document)}]}function He(){this.$get=["$log",function(b){return function(a,c){b.error.apply(b,arguments)}}]}function Zb(b,a){if(C(b)){var c=b.replace(sf,"").trim();if(c){var d=a("Content-Type");(d=d&&0===d.indexOf(Wc))||(d=(d=c.match(tf))&&uf[d[0]].test(c));d&&(b=qc(c))}}return b}function Xc(b){var a=ia(),c,d,e;if(!b)return a;r(b.sp [...]
+function(b){e=b.indexOf(":");c=z(N(b.substr(0,e)));d=N(b.substr(e+1));c&&(a[c]=a[c]?a[c]+", "+d:d)});return a}function Yc(b){var a=J(b)?b:t;return function(c){a||(a=Xc(b));return c?(c=a[z(c)],void 0===c&&(c=null),c):a}}function Zc(b,a,c,d){if(G(d))return d(b,a,c);r(d,function(d){b=d(b,a,c)});return b}function Ke(){var b=this.defaults={transformResponse:[Zb],transformRequest:[function(a){return J(a)&&"[object File]"!==Ca.call(a)&&"[object Blob]"!==Ca.call(a)&&"[object FormData]"!==Ca.call [...]
+a}],headers:{common:{Accept:"application/json, text/plain, */*"},post:sa($b),put:sa($b),patch:sa($b)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"},a=!1;this.useApplyAsync=function(b){return y(b)?(a=!!b,this):a};var c=this.interceptors=[];this.$get=["$httpBackend","$browser","$cacheFactory","$rootScope","$q","$injector",function(d,e,f,g,h,l){function k(a){function c(a){var b=w({},a);b.data=a.data?Zc(a.data,a.headers,a.status,e.transformResponse):a.data;a=a.status;return 200< [...]
+b:h.reject(b)}function d(a){var b,c={};r(a,function(a,d){G(a)?(b=a(),null!=b&&(c[d]=b)):c[d]=a});return c}if(!ca.isObject(a))throw R("$http")("badreq",a);var e=w({method:"get",transformRequest:b.transformRequest,transformResponse:b.transformResponse},a);e.headers=function(a){var c=b.headers,e=w({},a.headers),f,g,c=w({},c.common,c[z(a.method)]);a:for(f in c){a=z(f);for(g in e)if(z(g)===a)continue a;e[f]=c[f]}return d(e)}(a);e.method=ub(e.method);var f=[function(a){var d=a.headers,e=Zc(a.d [...]
+t,a.transformRequest);x(e)&&r(d,function(a,b){"content-type"===z(b)&&delete d[b]});x(a.withCredentials)&&!x(b.withCredentials)&&(a.withCredentials=b.withCredentials);return n(a,e).then(c,c)},t],g=h.when(e);for(r(u,function(a){(a.request||a.requestError)&&f.unshift(a.request,a.requestError);(a.response||a.responseError)&&f.push(a.response,a.responseError)});f.length;){a=f.shift();var k=f.shift(),g=g.then(a,k)}g.success=function(a){g.then(function(b){a(b.data,b.status,b.headers,e)});return [...]
+function(a){g.then(null,function(b){a(b.data,b.status,b.headers,e)});return g};return g}function n(c,f){function l(b,c,d,e){function f(){m(c,b,d,e)}I&&(200<=b&&300>b?I.put(P,[b,c,Xc(d),e]):I.remove(P));a?g.$applyAsync(f):(f(),g.$$phase||g.$apply())}function m(a,b,d,e){b=Math.max(b,0);(200<=b&&300>b?L.resolve:L.reject)({data:a,status:b,headers:Yc(d),config:c,statusText:e})}function n(a){m(a.data,a.status,sa(a.headers()),a.statusText)}function u(){var a=k.pendingRequests.indexOf(c);-1!==a& [...]
+1)}var L=h.defer(),B=L.promise,I,D,S=c.headers,P=p(c.url,c.params);k.pendingRequests.push(c);B.then(u,u);!c.cache&&!b.cache||!1===c.cache||"GET"!==c.method&&"JSONP"!==c.method||(I=J(c.cache)?c.cache:J(b.cache)?b.cache:q);I&&(D=I.get(P),y(D)?D&&G(D.then)?D.then(n,n):H(D)?m(D[1],D[0],sa(D[2]),D[3]):m(D,200,{},"OK"):I.put(P,B));x(D)&&((D=$c(c.url)?e.cookies()[c.xsrfCookieName||b.xsrfCookieName]:t)&&(S[c.xsrfHeaderName||b.xsrfHeaderName]=D),d(c.method,P,f,l,S,c.timeout,c.withCredentials,c.re [...]
+return B}function p(a,b){if(!b)return a;var c=[];Ed(b,function(a,b){null===a||x(a)||(H(a)||(a=[a]),r(a,function(a){J(a)&&(a=ga(a)?a.toISOString():$a(a));c.push(Ea(b)+"="+Ea(a))}))});0<c.length&&(a+=(-1==a.indexOf("?")?"?":"&")+c.join("&"));return a}var q=f("$http"),u=[];r(c,function(a){u.unshift(C(a)?l.get(a):l.invoke(a))});k.pendingRequests=[];(function(a){r(arguments,function(a){k[a]=function(b,c){return k(w(c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");(function(a){r(ar [...]
+function(b,c,d){return k(w(d||{},{method:a,url:b,data:c}))}})})("post","put","patch");k.defaults=b;return k}]}function vf(){return new Q.XMLHttpRequest}function Le(){this.$get=["$browser","$window","$document",function(b,a,c){return wf(b,vf,b.defer,a.angular.callbacks,c[0])}]}function wf(b,a,c,d,e){function f(a,b,c){var f=e.createElement("script"),n=null;f.type="text/javascript";f.src=a;f.async=!0;n=function(a){f.removeEventListener("load",n,!1);f.removeEventListener("error",n,!1);e.body [...]
+f=null;var g=-1,u="unknown";a&&("load"!==a.type||d[b].called||(a={type:"error"}),u=a.type,g="error"===a.type?404:200);c&&c(g,u)};f.addEventListener("load",n,!1);f.addEventListener("error",n,!1);e.body.appendChild(f);return n}return function(e,h,l,k,n,p,q,u){function s(){m&&m();F&&F.abort()}function M(a,d,e,f,g){L!==t&&c.cancel(L);m=F=null;a(d,e,f,g);b.$$completeOutstandingRequest(E)}b.$$incOutstandingRequestCount();h=h||b.url();if("jsonp"==z(e)){var v="_"+(d.counter++).toString(36);d[v]= [...]
+a;d[v].called=!0};var m=f(h.replace("JSON_CALLBACK","angular.callbacks."+v),v,function(a,b){M(k,a,d[v].data,"",b);d[v]=E})}else{var F=a();F.open(e,h,!0);r(n,function(a,b){y(a)&&F.setRequestHeader(b,a)});F.onload=function(){var a=F.statusText||"",b="response"in F?F.response:F.responseText,c=1223===F.status?204:F.status;0===c&&(c=b?200:"file"==Aa(h).protocol?404:0);M(k,c,b,F.getAllResponseHeaders(),a)};e=function(){M(k,-1,null,null,"")};F.onerror=e;F.onabort=e;q&&(F.withCredentials=!0);if( [...]
+u}catch(Z){if("json"!==u)throw Z;}F.send(l||null)}if(0<p)var L=c(s,p);else p&&G(p.then)&&p.then(s)}}function Ie(){var b="{{",a="}}";this.startSymbol=function(a){return a?(b=a,this):b};this.endSymbol=function(b){return b?(a=b,this):a};this.$get=["$parse","$exceptionHandler","$sce",function(c,d,e){function f(a){return"\\\\\\"+a}function g(f,g,u,s){function M(c){return c.replace(k,b).replace(n,a)}function v(a){try{var b=a;a=u?e.getTrusted(u,b):e.valueOf(b);var c;if(s&&!y(a))c=a;else if(null [...]
+else{switch(typeof a){case "string":break;case "number":a=""+a;break;default:a=$a(a)}c=a}return c}catch(g){c=ac("interr",f,g.toString()),d(c)}}s=!!s;for(var m,F,r=0,L=[],B=[],I=f.length,D=[],S=[];r<I;)if(-1!=(m=f.indexOf(b,r))&&-1!=(F=f.indexOf(a,m+h)))r!==m&&D.push(M(f.substring(r,m))),r=f.substring(m+h,F),L.push(r),B.push(c(r,v)),r=F+l,S.push(D.length),D.push("");else{r!==I&&D.push(M(f.substring(r)));break}if(u&&1<D.length)throw ac("noconcat",f);if(!g||L.length){var P=function(a){for(v [...]
+L.length;b<c;b++){if(s&&x(a[b]))return;D[S[b]]=a[b]}return D.join("")};return w(function(a){var b=0,c=L.length,e=Array(c);try{for(;b<c;b++)e[b]=B[b](a);return P(e)}catch(g){a=ac("interr",f,g.toString()),d(a)}},{exp:f,expressions:L,$$watchDelegate:function(a,b,c){var d;return a.$watchGroup(B,function(c,e){var f=P(c);G(b)&&b.call(this,f,c!==e?d:f,a);d=f},c)}})}}var h=b.length,l=a.length,k=new RegExp(b.replace(/./g,f),"g"),n=new RegExp(a.replace(/./g,f),"g");g.startSymbol=function(){return  [...]
+function(){return a};return g}]}function Je(){this.$get=["$rootScope","$window","$q","$$q",function(b,a,c,d){function e(e,h,l,k){var n=a.setInterval,p=a.clearInterval,q=0,u=y(k)&&!k,s=(u?d:c).defer(),M=s.promise;l=y(l)?l:0;M.then(null,null,e);M.$$intervalId=n(function(){s.notify(q++);0<l&&q>=l&&(s.resolve(q),p(M.$$intervalId),delete f[M.$$intervalId]);u||b.$apply()},h);f[M.$$intervalId]=s;return M}var f={};e.cancel=function(b){return b&&b.$$intervalId in f?(f[b.$$intervalId].reject("canc [...]
+delete f[b.$$intervalId],!0):!1};return e}]}function Rd(){this.$get=function(){return{id:"en-us",NUMBER_FORMATS:{DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{minInt:1,minFrac:0,maxFrac:3,posPre:"",posSuf:"",negPre:"-",negSuf:"",gSize:3,lgSize:3},{minInt:1,minFrac:2,maxFrac:2,posPre:"\u00a4",posSuf:"",negPre:"(\u00a4",negSuf:")",gSize:3,lgSize:3}],CURRENCY_SYM:"$"},DATETIME_FORMATS:{MONTH:"January February March April May June July August September October November December".split(" "),SHORTM [...]
+DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),AMPMS:["AM","PM"],medium:"MMM d, y h:mm:ss a","short":"M/d/yy h:mm a",fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",mediumDate:"MMM d, y",shortDate:"M/d/yy",mediumTime:"h:mm:ss a",shortTime:"h:mm a",ERANAMES:["Before Christ","Anno Domini"],ERAS:["BC","AD"]},pluralCat:function(b){return 1===b?"one":"other"}}}}function bc(b){b=b.split("/");for(var a=b.length;a--;)b[ [...]
+return b.join("/")}function ad(b,a){var c=Aa(b);a.$$protocol=c.protocol;a.$$host=c.hostname;a.$$port=aa(c.port)||xf[c.protocol]||null}function bd(b,a){var c="/"!==b.charAt(0);c&&(b="/"+b);var d=Aa(b);a.$$path=decodeURIComponent(c&&"/"===d.pathname.charAt(0)?d.pathname.substring(1):d.pathname);a.$$search=sc(d.search);a.$$hash=decodeURIComponent(d.hash);a.$$path&&"/"!=a.$$path.charAt(0)&&(a.$$path="/"+a.$$path)}function ya(b,a){if(0===a.indexOf(b))return a.substr(b.length)}function Ga(b){v [...]
+return-1==a?b:b.substr(0,a)}function Fb(b){return b.replace(/(#.+)|#$/,"$1")}function cc(b){return b.substr(0,Ga(b).lastIndexOf("/")+1)}function dc(b,a){this.$$html5=!0;a=a||"";var c=cc(b);ad(b,this);this.$$parse=function(a){var b=ya(c,a);if(!C(b))throw Gb("ipthprfx",a,c);bd(b,this);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=Pb(this.$$search),b=this.$$hash?"#"+qb(this.$$hash):"";this.$$url=bc(this.$$path)+(a?"?"+a:"")+b;this.$$absUrl=c+this.$$url.sub [...]
+function(d,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;(f=ya(b,d))!==t?(g=f,g=(f=ya(a,f))!==t?c+(ya("/",f)||f):b+g):(f=ya(c,d))!==t?g=c+f:c==d+"/"&&(g=c);g&&this.$$parse(g);return!!g}}function ec(b,a){var c=cc(b);ad(b,this);this.$$parse=function(d){d=ya(b,d)||ya(c,d);var e;"#"===d.charAt(0)?(e=ya(a,d),x(e)&&(e=d)):e=this.$$html5?d:"";bd(e,this);d=this.$$path;var f=/^\/[A-Z]:(\/.*)/;0===e.indexOf(b)&&(e=e.replace(b,""));f.exec(e)||(d=(e=f.exec(d))?e[1]:d);this.$$path=d;thi [...]
+this.$$compose=function(){var c=Pb(this.$$search),e=this.$$hash?"#"+qb(this.$$hash):"";this.$$url=bc(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+(this.$$url?a+this.$$url:"")};this.$$parseLinkUrl=function(a,c){return Ga(b)==Ga(a)?(this.$$parse(a),!0):!1}}function cd(b,a){this.$$html5=!0;ec.apply(this,arguments);var c=cc(b);this.$$parseLinkUrl=function(d,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;b==Ga(d)?f=d:(g=ya(c,d))?f=b+a+g:c===d+"/"&&(f=c);f&&this.$$parse(f);return!! [...]
+function(){var c=Pb(this.$$search),e=this.$$hash?"#"+qb(this.$$hash):"";this.$$url=bc(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+a+this.$$url}}function Hb(b){return function(){return this[b]}}function dd(b,a){return function(c){if(x(c))return this[b];this[b]=a(c);this.$$compose();return this}}function Me(){var b="",a={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(a){return y(a)?(b=a,this):b};this.html5Mode=function(b){return Wa(b)?(a.enabled=b,this):J(b)?(Wa(b.enab [...]
+b.enabled),Wa(b.requireBase)&&(a.requireBase=b.requireBase),Wa(b.rewriteLinks)&&(a.rewriteLinks=b.rewriteLinks),this):a};this.$get=["$rootScope","$browser","$sniffer","$rootElement","$window",function(c,d,e,f,g){function h(a,b,c){var e=k.url(),f=k.$$state;try{d.url(a,b,c),k.$$state=d.state()}catch(g){throw k.url(e),k.$$state=f,g;}}function l(a,b){c.$broadcast("$locationChangeSuccess",k.absUrl(),a,k.$$state,b)}var k,n;n=d.baseHref();var p=d.url(),q;if(a.enabled){if(!n&&a.requireBase)throw [...]
+q=p.substring(0,p.indexOf("/",p.indexOf("//")+2))+(n||"/");n=e.history?dc:cd}else q=Ga(p),n=ec;k=new n(q,"#"+b);k.$$parseLinkUrl(p,p);k.$$state=d.state();var u=/^\s*(javascript|mailto):/i;f.on("click",function(b){if(a.rewriteLinks&&!b.ctrlKey&&!b.metaKey&&!b.shiftKey&&2!=b.which&&2!=b.button){for(var e=A(b.target);"a"!==va(e[0]);)if(e[0]===f[0]||!(e=e.parent())[0])return;var h=e.prop("href"),l=e.attr("href")||e.attr("xlink:href");J(h)&&"[object SVGAnimatedString]"===h.toString()&&(h=Aa(h [...]
+u.test(h)||!h||e.attr("target")||b.isDefaultPrevented()||!k.$$parseLinkUrl(h,l)||(b.preventDefault(),k.absUrl()!=d.url()&&(c.$apply(),g.angular["ff-684208-preventDefault"]=!0))}});Fb(k.absUrl())!=Fb(p)&&d.url(k.absUrl(),!0);var s=!0;d.onUrlChange(function(a,b){c.$evalAsync(function(){var d=k.absUrl(),e=k.$$state,f;k.$$parse(a);k.$$state=b;f=c.$broadcast("$locationChangeStart",a,d,b,e).defaultPrevented;k.absUrl()===a&&(f?(k.$$parse(d),k.$$state=e,h(d,!1,e)):(s=!1,l(d,e)))});c.$$phase||c.$ [...]
+c.$watch(function(){var a=Fb(d.url()),b=Fb(k.absUrl()),f=d.state(),g=k.$$replace,q=a!==b||k.$$html5&&e.history&&f!==k.$$state;if(s||q)s=!1,c.$evalAsync(function(){var b=k.absUrl(),d=c.$broadcast("$locationChangeStart",b,a,k.$$state,f).defaultPrevented;k.absUrl()===b&&(d?(k.$$parse(a),k.$$state=f):(q&&h(b,g,f===k.$$state?null:k.$$state),l(a,f)))});k.$$replace=!1});return k}]}function Ne(){var b=!0,a=this;this.debugEnabled=function(a){return y(a)?(b=a,this):b};this.$get=["$window",function [...]
+Error&&(a.stack?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function e(a){var b=c.console||{},e=b[a]||b.log||E;a=!1;try{a=!!e.apply}catch(l){}return a?function(){var a=[];r(arguments,function(b){a.push(d(b))});return e.apply(b,a)}:function(a,b){e(a,null==b?"":b)}}return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){b& [...]
+arguments)}}()}}]}function ua(b,a){if("__defineGetter__"===b||"__defineSetter__"===b||"__lookupGetter__"===b||"__lookupSetter__"===b||"__proto__"===b)throw na("isecfld",a);return b}function oa(b,a){if(b){if(b.constructor===b)throw na("isecfn",a);if(b.window===b)throw na("isecwindow",a);if(b.children&&(b.nodeName||b.prop&&b.attr&&b.find))throw na("isecdom",a);if(b===Object)throw na("isecobj",a);}return b}function fc(b){return b.constant}function hb(b,a,c,d,e){oa(b,e);oa(a,e);c=c.split("." [...]
+g=0;1<c.length;g++){f=ua(c.shift(),e);var h=0===g&&a&&a[f]||b[f];h||(h={},b[f]=h);b=oa(h,e)}f=ua(c.shift(),e);oa(b[f],e);return b[f]=d}function Pa(b){return"constructor"==b}function ed(b,a,c,d,e,f,g){ua(b,f);ua(a,f);ua(c,f);ua(d,f);ua(e,f);var h=function(a){return oa(a,f)},l=g||Pa(b)?h:ra,k=g||Pa(a)?h:ra,n=g||Pa(c)?h:ra,p=g||Pa(d)?h:ra,q=g||Pa(e)?h:ra;return function(f,g){var h=g&&g.hasOwnProperty(b)?g:f;if(null==h)return h;h=l(h[b]);if(!a)return h;if(null==h)return t;h=k(h[a]);if(!c)ret [...]
+h)return t;h=n(h[c]);if(!d)return h;if(null==h)return t;h=p(h[d]);return e?null==h?t:h=q(h[e]):h}}function yf(b,a){return function(c,d){return b(c,d,oa,a)}}function zf(b,a,c){var d=a.expensiveChecks,e=d?Af:Bf,f=e[b];if(f)return f;var g=b.split("."),h=g.length;if(a.csp)f=6>h?ed(g[0],g[1],g[2],g[3],g[4],c,d):function(a,b){var e=0,f;do f=ed(g[e++],g[e++],g[e++],g[e++],g[e++],c,d)(a,b),b=t,a=f;while(e<h);return f};else{var l="";d&&(l+="s = eso(s, fe);\nl = eso(l, fe);\n");var k=d;r(g,functio [...]
+c);var e=(b?"s":'((l&&l.hasOwnProperty("'+a+'"))?l:s)')+"."+a;if(d||Pa(a))e="eso("+e+", fe)",k=!0;l+="if(s == null) return undefined;\ns="+e+";\n"});l+="return s;";a=new Function("s","l","eso","fe",l);a.toString=ea(l);k&&(a=yf(a,c));f=a}f.sharedGetter=!0;f.assign=function(a,c,d){return hb(a,d,b,c,b)};return e[b]=f}function gc(b){return G(b.valueOf)?b.valueOf():Cf.call(b)}function Oe(){var b=ia(),a=ia();this.$get=["$filter","$sniffer",function(c,d){function e(a){var b=a;a.sharedGetter&&(b [...]
+c){return a(b,c)},b.literal=a.literal,b.constant=a.constant,b.assign=a.assign);return b}function f(a,b){for(var c=0,d=a.length;c<d;c++){var e=a[c];e.constant||(e.inputs?f(e.inputs,b):-1===b.indexOf(e)&&b.push(e))}return b}function g(a,b){return null==a||null==b?a===b:"object"===typeof a&&(a=gc(a),"object"===typeof a)?!1:a===b||a!==a&&b!==b}function h(a,b,c,d){var e=d.$$inputs||(d.$$inputs=f(d.inputs,[])),h;if(1===e.length){var k=g,e=e[0];return a.$watch(function(a){var b=e(a);g(b,k)||(h= [...]
+gc(b));return h},b,c)}for(var l=[],q=0,p=e.length;q<p;q++)l[q]=g;return a.$watch(function(a){for(var b=!1,c=0,f=e.length;c<f;c++){var k=e[c](a);if(b||(b=!g(k,l[c])))l[c]=k&&gc(k)}b&&(h=d(a));return h},b,c)}function l(a,b,c,d){var e,f;return e=a.$watch(function(a){return d(a)},function(a,c,d){f=a;G(b)&&b.apply(this,arguments);y(a)&&d.$$postDigest(function(){y(f)&&e()})},c)}function k(a,b,c,d){function e(a){var b=!0;r(a,function(a){y(a)||(b=!1)});return b}var f,g;return f=a.$watch(function [...]
+function(a,c,d){g=a;G(b)&&b.call(this,a,c,d);e(a)&&d.$$postDigest(function(){e(g)&&f()})},c)}function n(a,b,c,d){var e;return e=a.$watch(function(a){return d(a)},function(a,c,d){G(b)&&b.apply(this,arguments);e()},c)}function p(a,b){if(!b)return a;var c=a.$$watchDelegate,c=c!==k&&c!==l?function(c,d){var e=a(c,d);return b(e,c,d)}:function(c,d){var e=a(c,d),f=b(e,c,d);return y(e)?f:e};a.$$watchDelegate&&a.$$watchDelegate!==h?c.$$watchDelegate=a.$$watchDelegate:b.$stateful||(c.$$watchDelegat [...]
+[a]);return c}var q={csp:d.csp,expensiveChecks:!1},u={csp:d.csp,expensiveChecks:!0};return function(d,f,g){var m,r,t;switch(typeof d){case "string":t=d=d.trim();var L=g?a:b;m=L[t];m||(":"===d.charAt(0)&&":"===d.charAt(1)&&(r=!0,d=d.substring(2)),g=g?u:q,m=new hc(g),m=(new ib(m,c,g)).parse(d),m.constant?m.$$watchDelegate=n:r?(m=e(m),m.$$watchDelegate=m.literal?k:l):m.inputs&&(m.$$watchDelegate=h),L[t]=m);return p(m,f);case "function":return p(d,f);default:return p(E,f)}}}]}function Qe(){t [...]
+["$rootScope","$exceptionHandler",function(b,a){return fd(function(a){b.$evalAsync(a)},a)}]}function Re(){this.$get=["$browser","$exceptionHandler",function(b,a){return fd(function(a){b.defer(a)},a)}]}function fd(b,a){function c(a,b,c){function d(b){return function(c){e||(e=!0,b.call(a,c))}}var e=!1;return[d(b),d(c)]}function d(){this.$$state={status:0}}function e(a,b){return function(c){b.call(a,c)}}function f(c){!c.processScheduled&&c.pending&&(c.processScheduled=!0,b(function(){var b, [...]
+c.processScheduled=!1;c.pending=t;for(var f=0,g=e.length;f<g;++f){d=e[f][0];b=e[f][c.status];try{G(b)?d.resolve(b(c.value)):1===c.status?d.resolve(c.value):d.reject(c.value)}catch(h){d.reject(h),a(h)}}}))}function g(){this.promise=new d;this.resolve=e(this,this.resolve);this.reject=e(this,this.reject);this.notify=e(this,this.notify)}var h=R("$q",TypeError);d.prototype={then:function(a,b,c){var d=new g;this.$$state.pending=this.$$state.pending||[];this.$$state.pending.push([d,a,b,c]);0<th [...]
+f(this.$$state);return d.promise},"catch":function(a){return this.then(null,a)},"finally":function(a,b){return this.then(function(b){return k(b,!0,a)},function(b){return k(b,!1,a)},b)}};g.prototype={resolve:function(a){this.promise.$$state.status||(a===this.promise?this.$$reject(h("qcycle",a)):this.$$resolve(a))},$$resolve:function(b){var d,e;e=c(this,this.$$resolve,this.$$reject);try{if(J(b)||G(b))d=b&&b.then;G(d)?(this.promise.$$state.status=-1,d.call(b,e[0],e[1],this.notify)):(this.pr [...]
+b,this.promise.$$state.status=1,f(this.promise.$$state))}catch(g){e[1](g),a(g)}},reject:function(a){this.promise.$$state.status||this.$$reject(a)},$$reject:function(a){this.promise.$$state.value=a;this.promise.$$state.status=2;f(this.promise.$$state)},notify:function(c){var d=this.promise.$$state.pending;0>=this.promise.$$state.status&&d&&d.length&&b(function(){for(var b,e,f=0,g=d.length;f<g;f++){e=d[f][0];b=d[f][3];try{e.notify(G(b)?b(c):c)}catch(h){a(h)}}})}};var l=function(a,b){var c= [...]
+c.reject(a);return c.promise},k=function(a,b,c){var d=null;try{G(c)&&(d=c())}catch(e){return l(e,!1)}return d&&G(d.then)?d.then(function(){return l(a,b)},function(a){return l(a,!1)}):l(a,b)},n=function(a,b,c,d){var e=new g;e.resolve(a);return e.promise.then(b,c,d)},p=function u(a){if(!G(a))throw h("norslvr",a);if(!(this instanceof u))return new u(a);var b=new g;a(function(a){b.resolve(a)},function(a){b.reject(a)});return b.promise};p.defer=function(){return new g};p.reject=function(a){va [...]
+b.reject(a);return b.promise};p.when=n;p.all=function(a){var b=new g,c=0,d=H(a)?[]:{};r(a,function(a,e){c++;n(a).then(function(a){d.hasOwnProperty(e)||(d[e]=a,--c||b.resolve(d))},function(a){d.hasOwnProperty(e)||b.reject(a)})});0===c&&b.resolve(d);return b.promise};return p}function $e(){this.$get=["$window","$timeout",function(b,a){var c=b.requestAnimationFrame||b.webkitRequestAnimationFrame,d=b.cancelAnimationFrame||b.webkitCancelAnimationFrame||b.webkitCancelRequestAnimationFrame,e=!! [...]
+c(a);return function(){d(b)}}:function(b){var c=a(b,16.66,!1);return function(){a.cancel(c)}};f.supported=e;return f}]}function Pe(){function b(a){function b(){this.$$watchers=this.$$nextSibling=this.$$childHead=this.$$childTail=null;this.$$listeners={};this.$$listenerCount={};this.$$watchersCount=0;this.$id=++ob;this.$$ChildScope=null}b.prototype=a;return b}var a=10,c=R("$rootScope"),d=null,e=null;this.digestTtl=function(b){arguments.length&&(a=b);return a};this.$get=["$injector","$exce [...]
+"$parse","$browser",function(f,g,h,l){function k(a){a.currentScope.$$destroyed=!0}function n(){this.$id=++ob;this.$$phase=this.$parent=this.$$watchers=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null;this.$root=this;this.$$destroyed=!1;this.$$listeners={};this.$$listenerCount={};this.$$isolateBindings=null}function p(a){if(v.$$phase)throw c("inprog",v.$$phase);v.$$phase=a}function q(a,b,c){do a.$$listenerCount[c]-=b,0===a.$$listenerCount[c]&&delete a.$$listene [...]
+while(a=a.$parent)}function u(){}function s(){for(;t.length;)try{t.shift()()}catch(a){g(a)}e=null}function M(){null===e&&(e=l.defer(function(){v.$apply(s)}))}n.prototype={constructor:n,$new:function(a,c){var d;c=c||this;a?(d=new n,d.$root=this.$root):(this.$$ChildScope||(this.$$ChildScope=b(this)),d=new this.$$ChildScope);d.$parent=c;d.$$prevSibling=c.$$childTail;c.$$childHead?(c.$$childTail.$$nextSibling=d,c.$$childTail=d):c.$$childHead=c.$$childTail=d;(a||c!=this)&&d.$on("$destroy",k); [...]
+$watch:function(a,b,c){var e=h(a);if(e.$$watchDelegate)return e.$$watchDelegate(this,b,c,e);var f=this.$$watchers,g={fn:b,last:u,get:e,exp:a,eq:!!c};d=null;G(b)||(g.fn=E);f||(f=this.$$watchers=[]);f.unshift(g);return function(){Xa(f,g);d=null}},$watchGroup:function(a,b){function c(){h=!1;k?(k=!1,b(e,e,g)):b(e,d,g)}var d=Array(a.length),e=Array(a.length),f=[],g=this,h=!1,k=!0;if(!a.length){var l=!0;g.$evalAsync(function(){l&&b(e,e,g)});return function(){l=!1}}if(1===a.length)return this.$ [...]
+function(a,c,f){e[0]=a;d[0]=c;b(e,a===c?e:d,f)});r(a,function(a,b){var k=g.$watch(a,function(a,f){e[b]=a;d[b]=f;h||(h=!0,g.$evalAsync(c))});f.push(k)});return function(){for(;f.length;)f.shift()()}},$watchCollection:function(a,b){function c(a){e=a;var b,d,g,h;if(!x(e)){if(J(e))if(Sa(e))for(f!==p&&(f=p,u=f.length=0,l++),a=e.length,u!==a&&(l++,f.length=u=a),b=0;b<a;b++)h=f[b],g=e[b],d=h!==h&&g!==g,d||h===g||(l++,f[b]=g);else{f!==n&&(f=n={},u=0,l++);a=0;for(b in e)e.hasOwnProperty(b)&&(a++, [...]
+f[b],b in f?(d=h!==h&&g!==g,d||h===g||(l++,f[b]=g)):(u++,f[b]=g,l++));if(u>a)for(b in l++,f)e.hasOwnProperty(b)||(u--,delete f[b])}else f!==e&&(f=e,l++);return l}}c.$stateful=!0;var d=this,e,f,g,k=1<b.length,l=0,q=h(a,c),p=[],n={},m=!0,u=0;return this.$watch(q,function(){m?(m=!1,b(e,e,d)):b(e,g,d);if(k)if(J(e))if(Sa(e)){g=Array(e.length);for(var a=0;a<e.length;a++)g[a]=e[a]}else for(a in g={},e)tc.call(e,a)&&(g[a]=e[a]);else g=e})},$digest:function(){var b,f,h,k,q,n,r=a,t,O=[],M,y;p("$di [...]
+this===v&&null!==e&&(l.defer.cancel(e),s());d=null;do{n=!1;for(t=this;m.length;){try{y=m.shift(),y.scope.$eval(y.expression,y.locals)}catch(w){g(w)}d=null}a:do{if(k=t.$$watchers)for(q=k.length;q--;)try{if(b=k[q])if((f=b.get(t))!==(h=b.last)&&!(b.eq?ha(f,h):"number"===typeof f&&"number"===typeof h&&isNaN(f)&&isNaN(h)))n=!0,d=b,b.last=b.eq?Da(f,null):f,b.fn(f,h===u?f:h,t),5>r&&(M=4-r,O[M]||(O[M]=[]),O[M].push({msg:G(b.exp)?"fn: "+(b.exp.name||b.exp.toString()):b.exp,newVal:f,oldVal:h}));el [...]
+d){n=!1;break a}}catch(A){g(A)}if(!(k=t.$$childHead||t!==this&&t.$$nextSibling))for(;t!==this&&!(k=t.$$nextSibling);)t=t.$parent}while(t=k);if((n||m.length)&&!r--)throw v.$$phase=null,c("infdig",a,O);}while(n||m.length);for(v.$$phase=null;F.length;)try{F.shift()()}catch(x){g(x)}},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;if(this!==v){for(var b in this.$$listenerCount)q(this,this.$$listenerCount[b],b);a.$$childHead==this&& [...]
+this.$$nextSibling);a.$$childTail==this&&(a.$$childTail=this.$$prevSibling);this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling);this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling);this.$destroy=this.$digest=this.$apply=this.$evalAsync=this.$applyAsync=E;this.$on=this.$watch=this.$watchGroup=function(){return E};this.$$listeners={};this.$parent=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=this.$root=this.$$watchers=nul [...]
+b){return h(a)(this,b)},$evalAsync:function(a,b){v.$$phase||m.length||l.defer(function(){m.length&&v.$digest()});m.push({scope:this,expression:a,locals:b})},$$postDigest:function(a){F.push(a)},$apply:function(a){try{return p("$apply"),this.$eval(a)}catch(b){g(b)}finally{v.$$phase=null;try{v.$digest()}catch(c){throw g(c),c;}}},$applyAsync:function(a){function b(){c.$eval(a)}var c=this;a&&t.push(b);M()},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]=c=[]);c.push(b);var [...]
+(d.$$listenerCount[a]=0),d.$$listenerCount[a]++;while(d=d.$parent);var e=this;return function(){var d=c.indexOf(b);-1!==d&&(c[d]=null,q(e,1,a))}},$emit:function(a,b){var c=[],d,e=this,f=!1,h={name:a,targetScope:e,stopPropagation:function(){f=!0},preventDefault:function(){h.defaultPrevented=!0},defaultPrevented:!1},k=Ya([h],arguments,1),l,q;do{d=e.$$listeners[a]||c;h.currentScope=e;l=0;for(q=d.length;l<q;l++)if(d[l])try{d[l].apply(null,k)}catch(p){g(p)}else d.splice(l,1),l--,q--;if(f)retu [...]
+null,h;e=e.$parent}while(e);h.currentScope=null;return h},$broadcast:function(a,b){var c=this,d=this,e={name:a,targetScope:this,preventDefault:function(){e.defaultPrevented=!0},defaultPrevented:!1};if(!this.$$listenerCount[a])return e;for(var f=Ya([e],arguments,1),h,l;c=d;){e.currentScope=c;d=c.$$listeners[a]||[];h=0;for(l=d.length;h<l;h++)if(d[h])try{d[h].apply(null,f)}catch(k){g(k)}else d.splice(h,1),h--,l--;if(!(d=c.$$listenerCount[a]&&c.$$childHead||c!==this&&c.$$nextSibling))for(;c! [...]
+c.$$nextSibling);)c=c.$parent}e.currentScope=null;return e}};var v=new n,m=v.$$asyncQueue=[],F=v.$$postDigestQueue=[],t=v.$$applyAsyncQueue=[];return v}]}function Sd(){var b=/^\s*(https?|ftp|mailto|tel|file):/,a=/^\s*((https?|ftp|file|blob):|data:image\/)/;this.aHrefSanitizationWhitelist=function(a){return y(a)?(b=a,this):b};this.imgSrcSanitizationWhitelist=function(b){return y(b)?(a=b,this):a};this.$get=function(){return function(c,d){var e=d?a:b,f;f=Aa(c).href;return""===f||f.match(e)? [...]
+f}}}function Df(b){if("self"===b)return b;if(C(b)){if(-1<b.indexOf("***"))throw Ba("iwcard",b);b=gd(b).replace("\\*\\*",".*").replace("\\*","[^:/.?&;]*");return new RegExp("^"+b+"$")}if(Ua(b))return new RegExp("^"+b.source+"$");throw Ba("imatcher");}function hd(b){var a=[];y(b)&&r(b,function(b){a.push(Df(b))});return a}function Te(){this.SCE_CONTEXTS=pa;var b=["self"],a=[];this.resourceUrlWhitelist=function(a){arguments.length&&(b=hd(a));return b};this.resourceUrlBlacklist=function(b){ar [...]
+(a=hd(b));return a};this.$get=["$injector",function(c){function d(a,b){return"self"===a?$c(b):!!a.exec(b.href)}function e(a){var b=function(a){this.$$unwrapTrustedValue=function(){return a}};a&&(b.prototype=new a);b.prototype.valueOf=function(){return this.$$unwrapTrustedValue()};b.prototype.toString=function(){return this.$$unwrapTrustedValue().toString()};return b}var f=function(a){throw Ba("unsafe");};c.has("$sanitize")&&(f=c.get("$sanitize"));var g=e(),h={};h[pa.HTML]=e(g);h[pa.CSS]= [...]
+e(g);h[pa.JS]=e(g);h[pa.RESOURCE_URL]=e(h[pa.URL]);return{trustAs:function(a,b){var c=h.hasOwnProperty(a)?h[a]:null;if(!c)throw Ba("icontext",a,b);if(null===b||b===t||""===b)return b;if("string"!==typeof b)throw Ba("itype",a);return new c(b)},getTrusted:function(c,e){if(null===e||e===t||""===e)return e;var g=h.hasOwnProperty(c)?h[c]:null;if(g&&e instanceof g)return e.$$unwrapTrustedValue();if(c===pa.RESOURCE_URL){var g=Aa(e.toString()),p,q,u=!1;p=0;for(q=b.length;p<q;p++)if(d(b[p],g)){u= [...]
+0,q=a.length;p<q;p++)if(d(a[p],g)){u=!1;break}if(u)return e;throw Ba("insecurl",e.toString());}if(c===pa.HTML)return f(e);throw Ba("unsafe");},valueOf:function(a){return a instanceof g?a.$$unwrapTrustedValue():a}}}]}function Se(){var b=!0;this.enabled=function(a){arguments.length&&(b=!!a);return b};this.$get=["$parse","$sceDelegate",function(a,c){if(b&&8>Qa)throw Ba("iequirks");var d=sa(pa);d.isEnabled=function(){return b};d.trustAs=c.trustAs;d.getTrusted=c.getTrusted;d.valueOf=c.valueOf [...]
+d.getTrusted=function(a,b){return b},d.valueOf=ra);d.parseAs=function(b,c){var e=a(c);return e.literal&&e.constant?e:a(c,function(a){return d.getTrusted(b,a)})};var e=d.parseAs,f=d.getTrusted,g=d.trustAs;r(pa,function(a,b){var c=z(b);d[db("parse_as_"+c)]=function(b){return e(a,b)};d[db("get_trusted_"+c)]=function(b){return f(a,b)};d[db("trust_as_"+c)]=function(b){return g(a,b)}});return d}]}function Ue(){this.$get=["$window","$document",function(b,a){var c={},d=aa((/android (\d+)/.exec(z [...]
+{}).userAgent))||[])[1]),e=/Boxee/i.test((b.navigator||{}).userAgent),f=a[0]||{},g,h=/^(Moz|webkit|ms)(?=[A-Z])/,l=f.body&&f.body.style,k=!1,n=!1;if(l){for(var p in l)if(k=h.exec(p)){g=k[0];g=g.substr(0,1).toUpperCase()+g.substr(1);break}g||(g="WebkitOpacity"in l&&"webkit");k=!!("transition"in l||g+"Transition"in l);n=!!("animation"in l||g+"Animation"in l);!d||k&&n||(k=C(f.body.style.webkitTransition),n=C(f.body.style.webkitAnimation))}return{history:!(!b.history||!b.history.pushState||4 [...]
+a&&11>=Qa)return!1;if(x(c[a])){var b=f.createElement("div");c[a]="on"+a in b}return c[a]},csp:bb(),vendorPrefix:g,transitions:k,animations:n,android:d}}]}function We(){this.$get=["$templateCache","$http","$q",function(b,a,c){function d(e,f){d.totalPendingRequests++;var g=a.defaults&&a.defaults.transformResponse;H(g)?g=g.filter(function(a){return a!==Zb}):g===Zb&&(g=null);return a.get(e,{cache:b,transformResponse:g})["finally"](function(){d.totalPendingRequests--}).then(function(a){return [...]
+function(a){if(!f)throw la("tpload",e);return c.reject(a)})}d.totalPendingRequests=0;return d}]}function Xe(){this.$get=["$rootScope","$browser","$location",function(b,a,c){return{findBindings:function(a,b,c){a=a.getElementsByClassName("ng-binding");var g=[];r(a,function(a){var d=ca.element(a).data("$binding");d&&r(d,function(d){c?(new RegExp("(^|\\s)"+gd(b)+"(\\s|\\||$)")).test(d)&&g.push(a):-1!=d.indexOf(b)&&g.push(a)})});return g},findModels:function(a,b,c){for(var g=["ng-","data-ng-" [...]
+h=0;h<g.length;++h){var l=a.querySelectorAll("["+g[h]+"model"+(c?"=":"*=")+'"'+b+'"]');if(l.length)return l}},getLocation:function(){return c.url()},setLocation:function(a){a!==c.url()&&(c.url(a),b.$digest())},whenStable:function(b){a.notifyWhenNoOutstandingRequests(b)}}}]}function Ye(){this.$get=["$rootScope","$browser","$q","$$q","$exceptionHandler",function(b,a,c,d,e){function f(f,l,k){var n=y(k)&&!k,p=(n?d:c).defer(),q=p.promise;l=a.defer(function(){try{p.resolve(f())}catch(a){p.reje [...]
+b.$apply()},l);q.$$timeoutId=l;g[l]=p;return q}var g={};f.cancel=function(b){return b&&b.$$timeoutId in g?(g[b.$$timeoutId].reject("canceled"),delete g[b.$$timeoutId],a.defer.cancel(b.$$timeoutId)):!1};return f}]}function Aa(b){Qa&&($.setAttribute("href",b),b=$.href);$.setAttribute("href",b);return{href:$.href,protocol:$.protocol?$.protocol.replace(/:$/,""):"",host:$.host,search:$.search?$.search.replace(/^\?/,""):"",hash:$.hash?$.hash.replace(/^#/,""):"",hostname:$.hostname,port:$.port, [...]
+$.pathname.charAt(0)?$.pathname:"/"+$.pathname}}function $c(b){b=C(b)?Aa(b):b;return b.protocol===id.protocol&&b.host===id.host}function Ze(){this.$get=ea(Q)}function Fc(b){function a(c,d){if(J(c)){var e={};r(c,function(b,c){e[c]=a(c,b)});return e}return b.factory(c+"Filter",d)}this.register=a;this.$get=["$injector",function(a){return function(b){return a.get(b+"Filter")}}];a("currency",jd);a("date",kd);a("filter",Ef);a("json",Ff);a("limitTo",Gf);a("lowercase",Hf);a("number",ld);a("order [...]
+If)}function Ef(){return function(b,a,c){if(!H(b))return b;var d;switch(typeof a){case "function":break;case "boolean":case "number":case "string":d=!0;case "object":a=Jf(a,c,d);break;default:return b}return b.filter(a)}}function Jf(b,a,c){var d=J(b)&&"$"in b;!0===a?a=ha:G(a)||(a=function(a,b){if(J(a)||J(b))return!1;a=z(""+a);b=z(""+b);return-1!==a.indexOf(b)});return function(e){return d&&!J(e)?Ha(e,b.$,a,!1):Ha(e,b,a,c)}}function Ha(b,a,c,d,e){var f=null!==b?typeof b:"null",g=null!==a? [...]
+"null";if("string"===g&&"!"===a.charAt(0))return!Ha(b,a.substring(1),c,d);if(H(b))return b.some(function(b){return Ha(b,a,c,d)});switch(f){case "object":var h;if(d){for(h in b)if("$"!==h.charAt(0)&&Ha(b[h],a,c,!0))return!0;return e?!1:Ha(b,a,c,!1)}if("object"===g){for(h in a)if(e=a[h],!G(e)&&!x(e)&&(f="$"===h,!Ha(f?b:b[h],e,c,f,f)))return!1;return!0}return c(b,a);case "function":return!1;default:return c(b,a)}}function jd(b){var a=b.NUMBER_FORMATS;return function(b,d,e){x(d)&&(d=a.CURREN [...]
+(e=a.PATTERNS[1].maxFrac);return null==b?b:nd(b,a.PATTERNS[1],a.GROUP_SEP,a.DECIMAL_SEP,e).replace(/\u00A4/g,d)}}function ld(b){var a=b.NUMBER_FORMATS;return function(b,d){return null==b?b:nd(b,a.PATTERNS[0],a.GROUP_SEP,a.DECIMAL_SEP,d)}}function nd(b,a,c,d,e){if(!isFinite(b)||J(b))return"";var f=0>b;b=Math.abs(b);var g=b+"",h="",l=[],k=!1;if(-1!==g.indexOf("e")){var n=g.match(/([\d\.]+)e(-?)(\d+)/);n&&"-"==n[2]&&n[3]>e+1?b=0:(h=g,k=!0)}if(k)0<e&&1>b&&(h=b.toFixed(e),b=parseFloat(h));els [...]
+"").length;x(e)&&(e=Math.min(Math.max(a.minFrac,g),a.maxFrac));b=+(Math.round(+(b.toString()+"e"+e)).toString()+"e"+-e);var g=(""+b).split(od),k=g[0],g=g[1]||"",p=0,q=a.lgSize,u=a.gSize;if(k.length>=q+u)for(p=k.length-q,n=0;n<p;n++)0===(p-n)%u&&0!==n&&(h+=c),h+=k.charAt(n);for(n=p;n<k.length;n++)0===(k.length-n)%q&&0!==n&&(h+=c),h+=k.charAt(n);for(;g.length<e;)g+="0";e&&"0"!==e&&(h+=d+g.substr(0,e))}0===b&&(f=!1);l.push(f?a.negPre:a.posPre,h,f?a.negSuf:a.posSuf);return l.join("")}functio [...]
+c){var d="";0>b&&(d="-",b=-b);for(b=""+b;b.length<a;)b="0"+b;c&&(b=b.substr(b.length-a));return d+b}function U(b,a,c,d){c=c||0;return function(e){e=e["get"+b]();if(0<c||e>-c)e+=c;0===e&&-12==c&&(e=12);return Ib(e,a,d)}}function Jb(b,a){return function(c,d){var e=c["get"+b](),f=ub(a?"SHORT"+b:b);return d[f][e]}}function pd(b){var a=(new Date(b,0,1)).getDay();return new Date(b,0,(4>=a?5:12)-a)}function qd(b){return function(a){var c=pd(a.getFullYear());a=+new Date(a.getFullYear(),a.getMont [...]
+(4-a.getDay()))-+c;a=1+Math.round(a/6048E5);return Ib(a,b)}}function ic(b,a){return 0>=b.getFullYear()?a.ERAS[0]:a.ERAS[1]}function kd(b){function a(a){var b;if(b=a.match(c)){a=new Date(0);var f=0,g=0,h=b[8]?a.setUTCFullYear:a.setFullYear,l=b[8]?a.setUTCHours:a.setHours;b[9]&&(f=aa(b[9]+b[10]),g=aa(b[9]+b[11]));h.call(a,aa(b[1]),aa(b[2])-1,aa(b[3]));f=aa(b[4]||0)-f;g=aa(b[5]||0)-g;h=aa(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));l.call(a,f,g,h,b)}return a}var c=/^(\d{4})-?(\d\d [...]
+return function(c,e,f){var g="",h=[],l,k;e=e||"mediumDate";e=b.DATETIME_FORMATS[e]||e;C(c)&&(c=Kf.test(c)?aa(c):a(c));Y(c)&&(c=new Date(c));if(!ga(c))return c;for(;e;)(k=Lf.exec(e))?(h=Ya(h,k,1),e=h.pop()):(h.push(e),e=null);f&&"UTC"===f&&(c=new Date(c.getTime()),c.setMinutes(c.getMinutes()+c.getTimezoneOffset()));r(h,function(a){l=Mf[a];g+=l?l(c,b.DATETIME_FORMATS):a.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function Ff(){return function(b,a){x(a)&&(a=2);return $a(b,a)}}func [...]
+a){Y(b)&&(b=b.toString());return H(b)||C(b)?(a=Infinity===Math.abs(Number(a))?Number(a):aa(a))?0<a?b.slice(0,a):b.slice(a):C(b)?"":[]:b}}function md(b){return function(a,c,d){function e(a,b){return b?function(b,c){return a(c,b)}:a}function f(a){switch(typeof a){case "number":case "boolean":case "string":return!0;default:return!1}}function g(a){return null===a?"null":"function"===typeof a.valueOf&&(a=a.valueOf(),f(a))||"function"===typeof a.toString&&(a=a.toString(),f(a))?a:""}function h( [...]
+typeof a,d=typeof b;c===d&&"object"===c&&(a=g(a),b=g(b));return c===d?("string"===c&&(a=a.toLowerCase(),b=b.toLowerCase()),a===b?0:a<b?-1:1):c<d?-1:1}if(!Sa(a))return a;c=H(c)?c:[c];0===c.length&&(c=["+"]);c=c.map(function(a){var c=!1,d=a||ra;if(C(a)){if("+"==a.charAt(0)||"-"==a.charAt(0))c="-"==a.charAt(0),a=a.substring(1);if(""===a)return e(h,c);d=b(a);if(d.constant){var f=d();return e(function(a,b){return h(a[f],b[f])},c)}}return e(function(a,b){return h(d(a),d(b))},c)});return Za.cal [...]
+b){for(var d=0;d<c.length;d++){var e=c[d](a,b);if(0!==e)return e}return 0},d))}}function Ia(b){G(b)&&(b={link:b});b.restrict=b.restrict||"AC";return ea(b)}function rd(b,a,c,d,e){var f=this,g=[],h=f.$$parentForm=b.parent().controller("form")||Kb;f.$error={};f.$$success={};f.$pending=t;f.$name=e(a.name||a.ngForm||"")(c);f.$dirty=!1;f.$pristine=!0;f.$valid=!0;f.$invalid=!1;f.$submitted=!1;h.$addControl(f);f.$rollbackViewValue=function(){r(g,function(a){a.$rollbackViewValue()})};f.$commitVie [...]
+function(a){a.$commitViewValue()})};f.$addControl=function(a){La(a.$name,"input");g.push(a);a.$name&&(f[a.$name]=a)};f.$$renameControl=function(a,b){var c=a.$name;f[c]===a&&delete f[c];f[b]=a;a.$name=b};f.$removeControl=function(a){a.$name&&f[a.$name]===a&&delete f[a.$name];r(f.$pending,function(b,c){f.$setValidity(c,null,a)});r(f.$error,function(b,c){f.$setValidity(c,null,a)});r(f.$$success,function(b,c){f.$setValidity(c,null,a)});Xa(g,a)};sd({ctrl:this,$element:b,set:function(a,b,c){va [...]
+d?-1===d.indexOf(c)&&d.push(c):a[b]=[c]},unset:function(a,b,c){var d=a[b];d&&(Xa(d,c),0===d.length&&delete a[b])},parentForm:h,$animate:d});f.$setDirty=function(){d.removeClass(b,Ra);d.addClass(b,Lb);f.$dirty=!0;f.$pristine=!1;h.$setDirty()};f.$setPristine=function(){d.setClass(b,Ra,Lb+" ng-submitted");f.$dirty=!1;f.$pristine=!0;f.$submitted=!1;r(g,function(a){a.$setPristine()})};f.$setUntouched=function(){r(g,function(a){a.$setUntouched()})};f.$setSubmitted=function(){d.addClass(b,"ng-s [...]
+f.$submitted=!0;h.$setSubmitted()}}function jc(b){b.$formatters.push(function(a){return b.$isEmpty(a)?a:a.toString()})}function jb(b,a,c,d,e,f){var g=z(a[0].type);if(!e.android){var h=!1;a.on("compositionstart",function(a){h=!0});a.on("compositionend",function(){h=!1;l()})}var l=function(b){k&&(f.defer.cancel(k),k=null);if(!h){var e=a.val();b=b&&b.type;"password"===g||c.ngTrim&&"false"===c.ngTrim||(e=N(e));(d.$viewValue!==e||""===e&&d.$$hasNativeValidators)&&d.$setViewValue(e,b)}};if(e.h [...]
+l);else{var k,n=function(a,b,c){k||(k=f.defer(function(){k=null;b&&b.value===c||l(a)}))};a.on("keydown",function(a){var b=a.keyCode;91===b||15<b&&19>b||37<=b&&40>=b||n(a,this,this.value)});if(e.hasEvent("paste"))a.on("paste cut",n)}a.on("change",l);d.$render=function(){a.val(d.$isEmpty(d.$viewValue)?"":d.$viewValue)}}function Mb(b,a){return function(c,d){var e,f;if(ga(c))return c;if(C(c)){'"'==c.charAt(0)&&'"'==c.charAt(c.length-1)&&(c=c.substring(1,c.length-1));if(Nf.test(c))return new  [...]
+0;if(e=b.exec(c))return e.shift(),f=d?{yyyy:d.getFullYear(),MM:d.getMonth()+1,dd:d.getDate(),HH:d.getHours(),mm:d.getMinutes(),ss:d.getSeconds(),sss:d.getMilliseconds()/1E3}:{yyyy:1970,MM:1,dd:1,HH:0,mm:0,ss:0,sss:0},r(e,function(b,c){c<a.length&&(f[a[c]]=+b)}),new Date(f.yyyy,f.MM-1,f.dd,f.HH,f.mm,f.ss||0,1E3*f.sss||0)}return NaN}}function kb(b,a,c,d){return function(e,f,g,h,l,k,n){function p(a){return a&&!(a.getTime&&a.getTime()!==a.getTime())}function q(a){return y(a)?ga(a)?a:c(a):t}t [...]
+jb(e,f,g,h,l,k);var u=h&&h.$options&&h.$options.timezone,s;h.$$parserName=b;h.$parsers.push(function(b){return h.$isEmpty(b)?null:a.test(b)?(b=c(b,s),"UTC"===u&&b.setMinutes(b.getMinutes()-b.getTimezoneOffset()),b):t});h.$formatters.push(function(a){if(a&&!ga(a))throw Nb("datefmt",a);if(p(a)){if((s=a)&&"UTC"===u){var b=6E4*s.getTimezoneOffset();s=new Date(s.getTime()+b)}return n("date")(a,d,u)}s=null;return""});if(y(g.min)||g.ngMin){var r;h.$validators.min=function(a){return!p(a)||x(r)|| [...]
+g.$observe("min",function(a){r=q(a);h.$validate()})}if(y(g.max)||g.ngMax){var v;h.$validators.max=function(a){return!p(a)||x(v)||c(a)<=v};g.$observe("max",function(a){v=q(a);h.$validate()})}}}function td(b,a,c,d){(d.$$hasNativeValidators=J(a[0].validity))&&d.$parsers.push(function(b){var c=a.prop("validity")||{};return c.badInput&&!c.typeMismatch?t:b})}function ud(b,a,c,d,e){if(y(d)){b=b(d);if(!b.constant)throw R("ngModel")("constexpr",c,d);return b(a)}return e}function kc(b,a){b="ngClas [...]
+function(c){function d(a,b){var c=[],d=0;a:for(;d<a.length;d++){for(var e=a[d],n=0;n<b.length;n++)if(e==b[n])continue a;c.push(e)}return c}function e(a){if(!H(a)){if(C(a))return a.split(" ");if(J(a)){var b=[];r(a,function(a,c){a&&(b=b.concat(c.split(" ")))});return b}}return a}return{restrict:"AC",link:function(f,g,h){function l(a,b){var c=g.data("$classCounts")||{},d=[];r(a,function(a){if(0<b||c[a])c[a]=(c[a]||0)+b,c[a]===+(0<b)&&d.push(a)});g.data("$classCounts",c);return d.join(" ")}f [...]
+a||f.$index%2===a){var k=e(b||[]);if(!n){var u=l(k,1);h.$addClass(u)}else if(!ha(b,n)){var s=e(n),u=d(k,s),k=d(s,k),u=l(u,1),k=l(k,-1);u&&u.length&&c.addClass(g,u);k&&k.length&&c.removeClass(g,k)}}n=sa(b)}var n;f.$watch(h[b],k,!0);h.$observe("class",function(a){k(f.$eval(h[b]))});"ngClass"!==b&&f.$watch("$index",function(c,d){var g=c&1;if(g!==(d&1)){var k=e(f.$eval(h[b]));g===a?(g=l(k,1),h.$addClass(g)):(g=l(k,-1),h.$removeClass(g))}})}}}]}function sd(b){function a(a,b){b&&!f[a]?(k.addCl [...]
+f[a]=!0):!b&&f[a]&&(k.removeClass(e,a),f[a]=!1)}function c(b,c){b=b?"-"+vc(b,"-"):"";a(lb+b,!0===c);a(vd+b,!1===c)}var d=b.ctrl,e=b.$element,f={},g=b.set,h=b.unset,l=b.parentForm,k=b.$animate;f[vd]=!(f[lb]=e.hasClass(lb));d.$setValidity=function(b,e,f){e===t?(d.$pending||(d.$pending={}),g(d.$pending,b,f)):(d.$pending&&h(d.$pending,b,f),wd(d.$pending)&&(d.$pending=t));Wa(e)?e?(h(d.$error,b,f),g(d.$$success,b,f)):(g(d.$error,b,f),h(d.$$success,b,f)):(h(d.$error,b,f),h(d.$$success,b,f));d.$ [...]
+!0),d.$valid=d.$invalid=t,c("",null)):(a(xd,!1),d.$valid=wd(d.$error),d.$invalid=!d.$valid,c("",d.$valid));e=d.$pending&&d.$pending[b]?t:d.$error[b]?!1:d.$$success[b]?!0:null;c(b,e);l.$setValidity(b,e,d)}}function wd(b){if(b)for(var a in b)return!1;return!0}var Of=/^\/(.+)\/([a-z]*)$/,z=function(b){return C(b)?b.toLowerCase():b},tc=Object.prototype.hasOwnProperty,ub=function(b){return C(b)?b.toUpperCase():b},Qa,A,ta,Za=[].slice,qf=[].splice,Pf=[].push,Ca=Object.prototype.toString,Ja=R("n [...]
+(Q.angular={}),cb,ob=0;Qa=W.documentMode;E.$inject=[];ra.$inject=[];var H=Array.isArray,N=function(b){return C(b)?b.trim():b},gd=function(b){return b.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g,"\\$1").replace(/\x08/g,"\\x08")},bb=function(){if(y(bb.isActive_))return bb.isActive_;var b=!(!W.querySelector("[ng-csp]")&&!W.querySelector("[data-ng-csp]"));if(!b)try{new Function("")}catch(a){b=!0}return bb.isActive_=b},rb=["ng-","data-ng-","ng:","x-ng-"],Md=/[A-Z]/g,wc=!1,Qb,qa=1,pb=3,Qd={full:"1 [...]
+minor:3,dot:15,codeName:"locality-filtration"};T.expando="ng339";var zb=T.cache={},hf=1;T._data=function(b){return this.cache[b[this.expando]]||{}};var cf=/([\:\-\_]+(.))/g,df=/^moz([A-Z])/,Qf={mouseleave:"mouseout",mouseenter:"mouseover"},Tb=R("jqLite"),gf=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,Sb=/<|&#?\w+;/,ef=/<([\w:]+)/,ff=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ja={option:[1,'<select multiple="multiple">',"</select>"],thead:[1,"<table>","</table>"],col:[2,"< [...]
+"</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ja.optgroup=ja.option;ja.tbody=ja.tfoot=ja.colgroup=ja.caption=ja.thead;ja.th=ja.td;var Ka=T.prototype={ready:function(b){function a(){c||(c=!0,b())}var c=!1;"complete"===W.readyState?setTimeout(a):(this.on("DOMContentLoaded",a),T(Q).on("load",a))},toString:function(){var b=[];r(this,function(a){b.push(""+a)});return"["+b.join(", ")+"]"},eq:function(b) [...]
+b?A(this[b]):A(this[this.length+b])},length:0,push:Pf,sort:[].sort,splice:[].splice},Eb={};r("multiple selected checked disabled readOnly required open".split(" "),function(b){Eb[z(b)]=b});var Oc={};r("input select option textarea button form details".split(" "),function(b){Oc[b]=!0});var Pc={ngMinlength:"minlength",ngMaxlength:"maxlength",ngMin:"min",ngMax:"max",ngPattern:"pattern"};r({data:Vb,removeData:xb},function(b,a){T[a]=b});r({data:Vb,inheritedData:Db,scope:function(b){return A.d [...]
+Db(b.parentNode||b,["$isolateScope","$scope"])},isolateScope:function(b){return A.data(b,"$isolateScope")||A.data(b,"$isolateScopeNoTemplate")},controller:Kc,injector:function(b){return Db(b,"$injector")},removeAttr:function(b,a){b.removeAttribute(a)},hasClass:Ab,css:function(b,a,c){a=db(a);if(y(c))b.style[a]=c;else return b.style[a]},attr:function(b,a,c){var d=z(a);if(Eb[d])if(y(c))c?(b[a]=!0,b.setAttribute(a,d)):(b[a]=!1,b.removeAttribute(d));else return b[a]||(b.attributes.getNamedIte [...]
+d:t;else if(y(c))b.setAttribute(a,c);else if(b.getAttribute)return b=b.getAttribute(a,2),null===b?t:b},prop:function(b,a,c){if(y(c))b[a]=c;else return b[a]},text:function(){function b(a,b){if(x(b)){var d=a.nodeType;return d===qa||d===pb?a.textContent:""}a.textContent=b}b.$dv="";return b}(),val:function(b,a){if(x(a)){if(b.multiple&&"select"===va(b)){var c=[];r(b.options,function(a){a.selected&&c.push(a.value||a.text)});return 0===c.length?null:c}return b.value}b.value=a},html:function(b,a [...]
+wb(b,!0);b.innerHTML=a},empty:Lc},function(b,a){T.prototype[a]=function(a,d){var e,f,g=this.length;if(b!==Lc&&(2==b.length&&b!==Ab&&b!==Kc?a:d)===t){if(J(a)){for(e=0;e<g;e++)if(b===Vb)b(this[e],a);else for(f in a)b(this[e],f,a[f]);return this}e=b.$dv;g=e===t?Math.min(g,1):g;for(f=0;f<g;f++){var h=b(this[f],a,d);e=e?e+h:h}return e}for(e=0;e<g;e++)b(this[e],a,d);return this}});r({removeData:xb,on:function a(c,d,e,f){if(y(f))throw Tb("onargs");if(Gc(c)){var g=yb(c,!0);f=g.events;var h=g.han [...]
+g.handle=lf(c,f));for(var g=0<=d.indexOf(" ")?d.split(" "):[d],l=g.length;l--;){d=g[l];var k=f[d];k||(f[d]=[],"mouseenter"===d||"mouseleave"===d?a(c,Qf[d],function(a){var c=a.relatedTarget;c&&(c===this||this.contains(c))||h(a,d)}):"$destroy"!==d&&c.addEventListener(d,h,!1),k=f[d]);k.push(e)}}},off:Jc,one:function(a,c,d){a=A(a);a.on(c,function f(){a.off(c,d);a.off(c,f)});a.on(c,d)},replaceWith:function(a,c){var d,e=a.parentNode;wb(a);r(new T(c),function(c){d?e.insertBefore(c,d.nextSibling [...]
+a);d=c})},children:function(a){var c=[];r(a.childNodes,function(a){a.nodeType===qa&&c.push(a)});return c},contents:function(a){return a.contentDocument||a.childNodes||[]},append:function(a,c){var d=a.nodeType;if(d===qa||11===d){c=new T(c);for(var d=0,e=c.length;d<e;d++)a.appendChild(c[d])}},prepend:function(a,c){if(a.nodeType===qa){var d=a.firstChild;r(new T(c),function(c){a.insertBefore(c,d)})}},wrap:function(a,c){c=A(c).eq(0).clone()[0];var d=a.parentNode;d&&d.replaceChild(c,a);c.appen [...]
+remove:Mc,detach:function(a){Mc(a,!0)},after:function(a,c){var d=a,e=a.parentNode;c=new T(c);for(var f=0,g=c.length;f<g;f++){var h=c[f];e.insertBefore(h,d.nextSibling);d=h}},addClass:Cb,removeClass:Bb,toggleClass:function(a,c,d){c&&r(c.split(" "),function(c){var f=d;x(f)&&(f=!Ab(a,c));(f?Cb:Bb)(a,c)})},parent:function(a){return(a=a.parentNode)&&11!==a.nodeType?a:null},next:function(a){return a.nextElementSibling},find:function(a,c){return a.getElementsByTagName?a.getElementsByTagName(c): [...]
+triggerHandler:function(a,c,d){var e,f,g=c.type||c,h=yb(a);if(h=(h=h&&h.events)&&h[g])e={preventDefault:function(){this.defaultPrevented=!0},isDefaultPrevented:function(){return!0===this.defaultPrevented},stopImmediatePropagation:function(){this.immediatePropagationStopped=!0},isImmediatePropagationStopped:function(){return!0===this.immediatePropagationStopped},stopPropagation:E,type:g,target:a},c.type&&(e=w(e,c)),c=sa(h),f=d?[e].concat(d):[e],r(c,function(c){e.isImmediatePropagationStop [...]
+f)})}},function(a,c){T.prototype[c]=function(c,e,f){for(var g,h=0,l=this.length;h<l;h++)x(g)?(g=a(this[h],c,e,f),y(g)&&(g=A(g))):Ic(g,a(this[h],c,e,f));return y(g)?g:this};T.prototype.bind=T.prototype.on;T.prototype.unbind=T.prototype.off});eb.prototype={put:function(a,c){this[Ma(a,this.nextUid)]=c},get:function(a){return this[Ma(a,this.nextUid)]},remove:function(a){var c=this[a=Ma(a,this.nextUid)];delete this[a];return c}};var Rc=/^function\s*[^\(]*\(\s*([^\)]*)\)/m,Rf=/,/,Sf=/^\s*(_?)( [...]
+Qc=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg,Fa=R("$injector");ab.$$annotate=function(a,c,d){var e;if("function"===typeof a){if(!(e=a.$inject)){e=[];if(a.length){if(c)throw C(d)&&d||(d=a.name||mf(a)),Fa("strictdi",d);c=a.toString().replace(Qc,"");c=c.match(Rc);r(c[1].split(Rf),function(a){a.replace(Sf,function(a,c,d){e.push(d)})})}a.$inject=e}}else H(a)?(c=a.length-1,sb(a[c],"fn"),e=a.slice(0,c)):sb(a,"fn",!0);return e};var Tf=R("$animate"),Ce=["$provide",function(a){this.$$selectors={};this.re [...]
+d){var e=c+"-animation";if(c&&"."!=c.charAt(0))throw Tf("notcsel",c);this.$$selectors[c.substr(1)]=e;a.factory(e,d)};this.classNameFilter=function(a){1===arguments.length&&(this.$$classNameFilter=a instanceof RegExp?a:null);return this.$$classNameFilter};this.$get=["$$q","$$asyncCallback","$rootScope",function(a,d,e){function f(d){var f,g=a.defer();g.promise.$$cancelFn=function(){f&&f()};e.$$postDigest(function(){f=d(function(){g.resolve()})});return g.promise}function g(a,c){var d=[],e= [...]
+r((a.attr("class")||"").split(/\s+/),function(a){f[a]=!0});r(c,function(a,c){var g=f[c];!1===a&&g?e.push(c):!0!==a||g||d.push(c)});return 0<d.length+e.length&&[d.length?d:null,e.length?e:null]}function h(a,c,d){for(var e=0,f=c.length;e<f;++e)a[c[e]]=d}function l(){n||(n=a.defer(),d(function(){n.resolve();n=null}));return n.promise}function k(a,c){if(ca.isObject(c)){var d=w(c.from||{},c.to||{});a.css(d)}}var n;return{animate:function(a,c,d){k(a,{from:c,to:d});return l()},enter:function(a, [...]
+e);d?d.after(a):c.prepend(a);return l()},leave:function(a,c){k(a,c);a.remove();return l()},move:function(a,c,d,e){return this.enter(a,c,d,e)},addClass:function(a,c,d){return this.setClass(a,c,[],d)},$$addClassImmediately:function(a,c,d){a=A(a);c=C(c)?c:H(c)?c.join(" "):"";r(a,function(a){Cb(a,c)});k(a,d);return l()},removeClass:function(a,c,d){return this.setClass(a,[],c,d)},$$removeClassImmediately:function(a,c,d){a=A(a);c=C(c)?c:H(c)?c.join(" "):"";r(a,function(a){Bb(a,c)});k(a,d);retu [...]
+c,d,e){var k=this,l=!1;a=A(a);var m=a.data("$$animateClasses");m?e&&m.options&&(m.options=ca.extend(m.options||{},e)):(m={classes:{},options:e},l=!0);e=m.classes;c=H(c)?c:c.split(" ");d=H(d)?d:d.split(" ");h(e,c,!0);h(e,d,!1);l&&(m.promise=f(function(c){var d=a.data("$$animateClasses");a.removeData("$$animateClasses");if(d){var e=g(a,d.classes);e&&k.$$setClassImmediately(a,e[0],e[1],d.options)}c()}),a.data("$$animateClasses",m));return m.promise},$$setClassImmediately:function(a,c,d,e){c [...]
+c);d&&this.$$removeClassImmediately(a,d);k(a,e);return l()},enabled:E,cancel:E}}]}],la=R("$compile");yc.$inject=["$provide","$$sanitizeUriProvider"];var Sc=/^((?:x|data)[\:\-_])/i,rf=R("$controller"),Wc="application/json",$b={"Content-Type":Wc+";charset=utf-8"},tf=/^\[|^\{(?!\{)/,uf={"[":/]$/,"{":/}$/},sf=/^\)\]\}',?\n/,ac=R("$interpolate"),Uf=/^([^\?#]*)(\?([^#]*))?(#(.*))?$/,xf={http:80,https:443,ftp:21},Gb=R("$location"),Vf={$$html5:!1,$$replace:!1,absUrl:Hb("$$absUrl"),url:function(a [...]
+var c=Uf.exec(a);(c[1]||""===a)&&this.path(decodeURIComponent(c[1]));(c[2]||c[1]||""===a)&&this.search(c[3]||"");this.hash(c[5]||"");return this},protocol:Hb("$$protocol"),host:Hb("$$host"),port:Hb("$$port"),path:dd("$$path",function(a){a=null!==a?a.toString():"";return"/"==a.charAt(0)?a:"/"+a}),search:function(a,c){switch(arguments.length){case 0:return this.$$search;case 1:if(C(a)||Y(a))a=a.toString(),this.$$search=sc(a);else if(J(a))a=Da(a,{}),r(a,function(c,e){null==c&&delete a[e]}), [...]
+a;else throw Gb("isrcharg");break;default:x(c)||null===c?delete this.$$search[a]:this.$$search[a]=c}this.$$compose();return this},hash:dd("$$hash",function(a){return null!==a?a.toString():""}),replace:function(){this.$$replace=!0;return this}};r([cd,ec,dc],function(a){a.prototype=Object.create(Vf);a.prototype.state=function(c){if(!arguments.length)return this.$$state;if(a!==dc||!this.$$html5)throw Gb("nostate");this.$$state=x(c)?null:c;return this}});var na=R("$parse"),Wf=Function.protot [...]
+Xf=Function.prototype.apply,Yf=Function.prototype.bind,mb=ia();r({"null":function(){return null},"true":function(){return!0},"false":function(){return!1},undefined:function(){}},function(a,c){a.constant=a.literal=a.sharedGetter=!0;mb[c]=a});mb["this"]=function(a){return a};mb["this"].sharedGetter=!0;var nb=w(ia(),{"+":function(a,c,d,e){d=d(a,c);e=e(a,c);return y(d)?y(e)?d+e:d:y(e)?e:t},"-":function(a,c,d,e){d=d(a,c);e=e(a,c);return(y(d)?d:0)-(y(e)?e:0)},"*":function(a,c,d,e){return d(a,c [...]
+"/":function(a,c,d,e){return d(a,c)/e(a,c)},"%":function(a,c,d,e){return d(a,c)%e(a,c)},"===":function(a,c,d,e){return d(a,c)===e(a,c)},"!==":function(a,c,d,e){return d(a,c)!==e(a,c)},"==":function(a,c,d,e){return d(a,c)==e(a,c)},"!=":function(a,c,d,e){return d(a,c)!=e(a,c)},"<":function(a,c,d,e){return d(a,c)<e(a,c)},">":function(a,c,d,e){return d(a,c)>e(a,c)},"<=":function(a,c,d,e){return d(a,c)<=e(a,c)},">=":function(a,c,d,e){return d(a,c)>=e(a,c)},"&&":function(a,c,d,e){return d(a,c) [...]
+"||":function(a,c,d,e){return d(a,c)||e(a,c)},"!":function(a,c,d){return!d(a,c)},"=":!0,"|":!0}),Zf={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v","'":"'",'"':'"'},hc=function(a){this.options=a};hc.prototype={constructor:hc,lex:function(a){this.text=a;this.index=0;for(this.tokens=[];this.index<this.text.length;)if(a=this.text.charAt(this.index),'"'===a||"'"===a)this.readString(a);else if(this.isNumber(a)||"."===a&&this.isNumber(this.peek()))this.readNumber();else if(this.isIdent(a))this.readIdent() [...]
+"(){}[].,;:?"))this.tokens.push({index:this.index,text:a}),this.index++;else if(this.isWhitespace(a))this.index++;else{var c=a+this.peek(),d=c+this.peek(2),e=nb[c],f=nb[d];nb[a]||e||f?(a=f?d:e?c:a,this.tokens.push({index:this.index,text:a,operator:!0}),this.index+=a.length):this.throwError("Unexpected next character ",this.index,this.index+1)}return this.tokens},is:function(a,c){return-1!==c.indexOf(a)},peek:function(a){a=a||1;return this.index+a<this.text.length?this.text.charAt(this.in [...]
+isNumber:function(a){return"0"<=a&&"9">=a&&"string"===typeof a},isWhitespace:function(a){return" "===a||"\r"===a||"\t"===a||"\n"===a||"\v"===a||"\u00a0"===a},isIdent:function(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,c,d){d=d||this.index;c=y(c)?"s "+c+"-"+this.index+" ["+this.text.substring(c,d)+"]":" "+d;throw na("lexerr",a,c,this.text);},readNumber:function(){for(var a="",c=this.i [...]
+this.text.length;){var d=z(this.text.charAt(this.index));if("."==d||this.isNumber(d))a+=d;else{var e=this.peek();if("e"==d&&this.isExpOperator(e))a+=d;else if(this.isExpOperator(d)&&e&&this.isNumber(e)&&"e"==a.charAt(a.length-1))a+=d;else if(!this.isExpOperator(d)||e&&this.isNumber(e)||"e"!=a.charAt(a.length-1))break;else this.throwError("Invalid exponent")}this.index++}this.tokens.push({index:c,text:a,constant:!0,value:Number(a)})},readIdent:function(){for(var a=this.index;this.index<th [...]
+this.text.charAt(this.index);if(!this.isIdent(c)&&!this.isNumber(c))break;this.index++}this.tokens.push({index:a,text:this.text.slice(a,this.index),identifier:!0})},readString:function(a){var c=this.index;this.index++;for(var d="",e=a,f=!1;this.index<this.text.length;){var g=this.text.charAt(this.index),e=e+g;if(f)"u"===g?(f=this.text.substring(this.index+1,this.index+5),f.match(/[\da-f]{4}/i)||this.throwError("Invalid unicode escape [\\u"+f+"]"),this.index+=4,d+=String.fromCharCode(pars [...]
+d+=Zf[g]||g,f=!1;else if("\\"===g)f=!0;else{if(g===a){this.index++;this.tokens.push({index:c,text:e,constant:!0,value:d});return}d+=g}this.index++}this.throwError("Unterminated quote",c)}};var ib=function(a,c,d){this.lexer=a;this.$filter=c;this.options=d};ib.ZERO=w(function(){return 0},{sharedGetter:!0,constant:!0});ib.prototype={constructor:ib,parse:function(a){this.text=a;this.tokens=this.lexer.lex(a);a=this.statements();0!==this.tokens.length&&this.throwError("is an unexpected token", [...]
+a.literal=!!a.literal;a.constant=!!a.constant;return a},primary:function(){var a;this.expect("(")?(a=this.filterChain(),this.consume(")")):this.expect("[")?a=this.arrayDeclaration():this.expect("{")?a=this.object():this.peek().identifier&&this.peek().text in mb?a=mb[this.consume().text]:this.peek().identifier?a=this.identifier():this.peek().constant?a=this.constant():this.throwError("not a primary expression",this.peek());for(var c,d;c=this.expect("(","[",".");)"("===c.text?(a=this.funct [...]
+d),d=null):"["===c.text?(d=a,a=this.objectIndex(a)):"."===c.text?(d=a,a=this.fieldAccess(a)):this.throwError("IMPOSSIBLE");return a},throwError:function(a,c){throw na("syntax",c.text,a,c.index+1,this.text,this.text.substring(c.index));},peekToken:function(){if(0===this.tokens.length)throw na("ueoe",this.text);return this.tokens[0]},peek:function(a,c,d,e){return this.peekAhead(0,a,c,d,e)},peekAhead:function(a,c,d,e,f){if(this.tokens.length>a){a=this.tokens[a];var g=a.text;if(g===c||g===d| [...]
+f||!(c||d||e||f))return a}return!1},expect:function(a,c,d,e){return(a=this.peek(a,c,d,e))?(this.tokens.shift(),a):!1},consume:function(a){if(0===this.tokens.length)throw na("ueoe",this.text);var c=this.expect(a);c||this.throwError("is unexpected, expecting ["+a+"]",this.peek());return c},unaryFn:function(a,c){var d=nb[a];return w(function(a,f){return d(a,f,c)},{constant:c.constant,inputs:[c]})},binaryFn:function(a,c,d,e){var f=nb[c];return w(function(c,e){return f(c,e,a,d)},{constant:a.c [...]
+d.constant,inputs:!e&&[a,d]})},identifier:function(){for(var a=this.consume().text;this.peek(".")&&this.peekAhead(1).identifier&&!this.peekAhead(2,"(");)a+=this.consume().text+this.consume().text;return zf(a,this.options,this.text)},constant:function(){var a=this.consume().value;return w(function(){return a},{constant:!0,literal:!0})},statements:function(){for(var a=[];;)if(0<this.tokens.length&&!this.peek("}",")",";","]")&&a.push(this.filterChain()),!this.expect(";"))return 1===a.length [...]
+d){for(var e,f=0,g=a.length;f<g;f++)e=a[f](c,d);return e}},filterChain:function(){for(var a=this.expression();this.expect("|");)a=this.filter(a);return a},filter:function(a){var c=this.$filter(this.consume().text),d,e;if(this.peek(":"))for(d=[],e=[];this.expect(":");)d.push(this.expression());var f=[a].concat(d||[]);return w(function(f,h){var l=a(f,h);if(e){e[0]=l;for(l=d.length;l--;)e[l+1]=d[l](f,h);return c.apply(t,e)}return c(l)},{constant:!c.$stateful&&f.every(fc),inputs:!c.$stateful [...]
+assignment:function(){var a=this.ternary(),c,d;return(d=this.expect("="))?(a.assign||this.throwError("implies assignment but ["+this.text.substring(0,d.index)+"] can not be assigned to",d),c=this.ternary(),w(function(d,f){return a.assign(d,c(d,f),f)},{inputs:[a,c]})):a},ternary:function(){var a=this.logicalOR(),c;if(this.expect("?")&&(c=this.assignment(),this.consume(":"))){var d=this.assignment();return w(function(e,f){return a(e,f)?c(e,f):d(e,f)},{constant:a.constant&&c.constant&&d.con [...]
+logicalOR:function(){for(var a=this.logicalAND(),c;c=this.expect("||");)a=this.binaryFn(a,c.text,this.logicalAND(),!0);return a},logicalAND:function(){for(var a=this.equality(),c;c=this.expect("&&");)a=this.binaryFn(a,c.text,this.equality(),!0);return a},equality:function(){for(var a=this.relational(),c;c=this.expect("==","!=","===","!==");)a=this.binaryFn(a,c.text,this.relational());return a},relational:function(){for(var a=this.additive(),c;c=this.expect("<",">","<=",">=");)a=this.bina [...]
+this.additive());return a},additive:function(){for(var a=this.multiplicative(),c;c=this.expect("+","-");)a=this.binaryFn(a,c.text,this.multiplicative());return a},multiplicative:function(){for(var a=this.unary(),c;c=this.expect("*","/","%");)a=this.binaryFn(a,c.text,this.unary());return a},unary:function(){var a;return this.expect("+")?this.primary():(a=this.expect("-"))?this.binaryFn(ib.ZERO,a.text,this.unary()):(a=this.expect("!"))?this.unaryFn(a.text,this.unary()):this.primary()},fiel [...]
+this.identifier();return w(function(d,e,f){d=f||a(d,e);return null==d?t:c(d)},{assign:function(d,e,f){var g=a(d,f);g||a.assign(d,g={},f);return c.assign(g,e)}})},objectIndex:function(a){var c=this.text,d=this.expression();this.consume("]");return w(function(e,f){var g=a(e,f),h=d(e,f);ua(h,c);return g?oa(g[h],c):t},{assign:function(e,f,g){var h=ua(d(e,g),c),l=oa(a(e,g),c);l||a.assign(e,l={},g);return l[h]=f}})},functionCall:function(a,c){var d=[];if(")"!==this.peekToken().text){do d.push( [...]
+while(this.expect(","))}this.consume(")");var e=this.text,f=d.length?[]:null;return function(g,h){var l=c?c(g,h):y(c)?t:g,k=a(g,h,l)||E;if(f)for(var n=d.length;n--;)f[n]=oa(d[n](g,h),e);oa(l,e);if(k){if(k.constructor===k)throw na("isecfn",e);if(k===Wf||k===Xf||k===Yf)throw na("isecff",e);}l=k.apply?k.apply(l,f):k(f[0],f[1],f[2],f[3],f[4]);f&&(f.length=0);return oa(l,e)}},arrayDeclaration:function(){var a=[];if("]"!==this.peekToken().text){do{if(this.peek("]"))break;a.push(this.expression [...]
+}this.consume("]");return w(function(c,d){for(var e=[],f=0,g=a.length;f<g;f++)e.push(a[f](c,d));return e},{literal:!0,constant:a.every(fc),inputs:a})},object:function(){var a=[],c=[];if("}"!==this.peekToken().text){do{if(this.peek("}"))break;var d=this.consume();d.constant?a.push(d.value):d.identifier?a.push(d.text):this.throwError("invalid key",d);this.consume(":");c.push(this.expression())}while(this.expect(","))}this.consume("}");return w(function(d,f){for(var g={},h=0,l=c.length;h<l; [...]
+c[h](d,f);return g},{literal:!0,constant:c.every(fc),inputs:c})}};var Bf=ia(),Af=ia(),Cf=Object.prototype.valueOf,Ba=R("$sce"),pa={HTML:"html",CSS:"css",URL:"url",RESOURCE_URL:"resourceUrl",JS:"js"},la=R("$compile"),$=W.createElement("a"),id=Aa(Q.location.href);Fc.$inject=["$provide"];jd.$inject=["$locale"];ld.$inject=["$locale"];var od=".",Mf={yyyy:U("FullYear",4),yy:U("FullYear",2,0,!0),y:U("FullYear",1),MMMM:Jb("Month"),MMM:Jb("Month",!0),MM:U("Month",2,1),M:U("Month",1,1),dd:U("Date" [...]
+1),HH:U("Hours",2),H:U("Hours",1),hh:U("Hours",2,-12),h:U("Hours",1,-12),mm:U("Minutes",2),m:U("Minutes",1),ss:U("Seconds",2),s:U("Seconds",1),sss:U("Milliseconds",3),EEEE:Jb("Day"),EEE:Jb("Day",!0),a:function(a,c){return 12>a.getHours()?c.AMPMS[0]:c.AMPMS[1]},Z:function(a){a=-1*a.getTimezoneOffset();return a=(0<=a?"+":"")+(Ib(Math[0<a?"floor":"ceil"](a/60),2)+Ib(Math.abs(a%60),2))},ww:qd(2),w:qd(1),G:ic,GG:ic,GGG:ic,GGGG:function(a,c){return 0>=a.getFullYear()?c.ERANAMES[0]:c.ERANAMES[1 [...]
+Kf=/^\-?\d+$/;kd.$inject=["$locale"];var Hf=ea(z),If=ea(ub);md.$inject=["$parse"];var Td=ea({restrict:"E",compile:function(a,c){if(!c.href&&!c.xlinkHref&&!c.name)return function(a,c){if("a"===c[0].nodeName.toLowerCase()){var f="[object SVGAnimatedString]"===Ca.call(c.prop("href"))?"xlink:href":"href";c.on("click",function(a){c.attr(f)||a.preventDefault()})}}}}),vb={};r(Eb,function(a,c){if("multiple"!=a){var d=xa("ng-"+c);vb[d]=function(){return{restrict:"A",priority:100,link:function(a,f [...]
+function(a){g.$set(c,!!a)})}}}}});r(Pc,function(a,c){vb[c]=function(){return{priority:100,link:function(a,e,f){if("ngPattern"===c&&"/"==f.ngPattern.charAt(0)&&(e=f.ngPattern.match(Of))){f.$set("ngPattern",new RegExp(e[1],e[2]));return}a.$watch(f[c],function(a){f.$set(c,a)})}}}});r(["src","srcset","href"],function(a){var c=xa("ng-"+a);vb[c]=function(){return{priority:99,link:function(d,e,f){var g=a,h=a;"href"===a&&"[object SVGAnimatedString]"===Ca.call(e.prop("href"))&&(h="xlinkHref",f.$a [...]
+g=null);f.$observe(c,function(c){c?(f.$set(h,c),Qa&&g&&e.prop(g,f[h])):"href"===a&&f.$set(h,null)})}}}});var Kb={$addControl:E,$$renameControl:function(a,c){a.$name=c},$removeControl:E,$setValidity:E,$setDirty:E,$setPristine:E,$setSubmitted:E};rd.$inject=["$element","$attrs","$scope","$animate","$interpolate"];var yd=function(a){return["$timeout",function(c){return{name:"form",restrict:a?"EAC":"E",controller:rd,compile:function(d,e){d.addClass(Ra).addClass(lb);var f=e.name?"name":a&&e.ng [...]
+!1;return{pre:function(a,d,e,k){if(!("action"in e)){var n=function(c){a.$apply(function(){k.$commitViewValue();k.$setSubmitted()});c.preventDefault()};d[0].addEventListener("submit",n,!1);d.on("$destroy",function(){c(function(){d[0].removeEventListener("submit",n,!1)},0,!1)})}var p=k.$$parentForm;f&&(hb(a,null,k.$name,k,k.$name),e.$observe(f,function(c){k.$name!==c&&(hb(a,null,k.$name,t,k.$name),p.$$renameControl(k,c),hb(a,null,k.$name,k,k.$name))}));d.on("$destroy",function(){p.$removeC [...]
+f&&hb(a,null,e[f],t,k.$name);w(k,Kb)})}}}}}]},Ud=yd(),ge=yd(!0),Nf=/\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/,$f=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,ag=/^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,bg=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/,zd=/^(\d{4})-(\d{2})-(\d{2})$/,Ad=/^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,lc=/^(\d{4})-W(\d\d) [...]
+Cd=/^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,Dd={text:function(a,c,d,e,f,g){jb(a,c,d,e,f,g);jc(e)},date:kb("date",zd,Mb(zd,["yyyy","MM","dd"]),"yyyy-MM-dd"),"datetime-local":kb("datetimelocal",Ad,Mb(Ad,"yyyy MM dd HH mm ss sss".split(" ")),"yyyy-MM-ddTHH:mm:ss.sss"),time:kb("time",Cd,Mb(Cd,["HH","mm","ss","sss"]),"HH:mm:ss.sss"),week:kb("week",lc,function(a,c){if(ga(a))return a;if(C(a)){lc.lastIndex=0;var d=lc.exec(a);if(d){var e=+d[1],f=+d[2],g=d=0,h=0,l=0,k=pd(e),f=7*(f-1);c&&(d=c.getH [...]
+c.getMinutes(),h=c.getSeconds(),l=c.getMilliseconds());return new Date(e,0,k.getDate()+f,d,g,h,l)}}return NaN},"yyyy-Www"),month:kb("month",Bd,Mb(Bd,["yyyy","MM"]),"yyyy-MM"),number:function(a,c,d,e,f,g){td(a,c,d,e);jb(a,c,d,e,f,g);e.$$parserName="number";e.$parsers.push(function(a){return e.$isEmpty(a)?null:bg.test(a)?parseFloat(a):t});e.$formatters.push(function(a){if(!e.$isEmpty(a)){if(!Y(a))throw Nb("numfmt",a);a=a.toString()}return a});if(y(d.min)||d.ngMin){var h;e.$validators.min=f [...]
+x(h)||a>=h};d.$observe("min",function(a){y(a)&&!Y(a)&&(a=parseFloat(a,10));h=Y(a)&&!isNaN(a)?a:t;e.$validate()})}if(y(d.max)||d.ngMax){var l;e.$validators.max=function(a){return e.$isEmpty(a)||x(l)||a<=l};d.$observe("max",function(a){y(a)&&!Y(a)&&(a=parseFloat(a,10));l=Y(a)&&!isNaN(a)?a:t;e.$validate()})}},url:function(a,c,d,e,f,g){jb(a,c,d,e,f,g);jc(e);e.$$parserName="url";e.$validators.url=function(a,c){var d=a||c;return e.$isEmpty(d)||$f.test(d)}},email:function(a,c,d,e,f,g){jb(a,c,d, [...]
+e.$$parserName="email";e.$validators.email=function(a,c){var d=a||c;return e.$isEmpty(d)||ag.test(d)}},radio:function(a,c,d,e){x(d.name)&&c.attr("name",++ob);c.on("click",function(a){c[0].checked&&e.$setViewValue(d.value,a&&a.type)});e.$render=function(){c[0].checked=d.value==e.$viewValue};d.$observe("value",e.$render)},checkbox:function(a,c,d,e,f,g,h,l){var k=ud(l,a,"ngTrueValue",d.ngTrueValue,!0),n=ud(l,a,"ngFalseValue",d.ngFalseValue,!1);c.on("click",function(a){e.$setViewValue(c[0].c [...]
+a.type)});e.$render=function(){c[0].checked=e.$viewValue};e.$isEmpty=function(a){return!1===a};e.$formatters.push(function(a){return ha(a,k)});e.$parsers.push(function(a){return a?k:n})},hidden:E,button:E,submit:E,reset:E,file:E},zc=["$browser","$sniffer","$filter","$parse",function(a,c,d,e){return{restrict:"E",require:["?ngModel"],link:{pre:function(f,g,h,l){l[0]&&(Dd[z(h.type)]||Dd.text)(f,g,h,l[0],c,a,d,e)}}}}],cg=/^(true|false|\d+)$/,ye=function(){return{restrict:"A",priority:100,com [...]
+c){return cg.test(c.ngValue)?function(a,c,f){f.$set("value",a.$eval(f.ngValue))}:function(a,c,f){a.$watch(f.ngValue,function(a){f.$set("value",a)})}}}},Zd=["$compile",function(a){return{restrict:"AC",compile:function(c){a.$$addBindingClass(c);return function(c,e,f){a.$$addBindingInfo(e,f.ngBind);e=e[0];c.$watch(f.ngBind,function(a){e.textContent=a===t?"":a})}}}}],ae=["$interpolate","$compile",function(a,c){return{compile:function(d){c.$$addBindingClass(d);return function(d,f,g){d=a(f.att [...]
+c.$$addBindingInfo(f,d.expressions);f=f[0];g.$observe("ngBindTemplate",function(a){f.textContent=a===t?"":a})}}}}],$d=["$sce","$parse","$compile",function(a,c,d){return{restrict:"A",compile:function(e,f){var g=c(f.ngBindHtml),h=c(f.ngBindHtml,function(a){return(a||"").toString()});d.$$addBindingClass(e);return function(c,e,f){d.$$addBindingInfo(e,f.ngBindHtml);c.$watch(h,function(){e.html(a.getTrustedHtml(g(c))||"")})}}}}],xe=ea({restrict:"A",require:"ngModel",link:function(a,c,d,e){e.$v [...]
+be=kc("",!0),de=kc("Odd",0),ce=kc("Even",1),ee=Ia({compile:function(a,c){c.$set("ngCloak",t);a.removeClass("ng-cloak")}}),fe=[function(){return{restrict:"A",scope:!0,controller:"@",priority:500}}],Ec={},dg={blur:!0,focus:!0};r("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),function(a){var c=xa("ng-"+a);Ec[c]=["$parse","$rootScope",function(d,e){return{restrict:"A",compile:function(f, [...]
+d(g[c],null,!0);return function(c,d){d.on(a,function(d){var f=function(){h(c,{$event:d})};dg[a]&&e.$$phase?c.$evalAsync(f):c.$apply(f)})}}}}]});var ie=["$animate",function(a){return{multiElement:!0,transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(c,d,e,f,g){var h,l,k;c.$watch(e.ngIf,function(c){c?l||g(function(c,f){l=f;c[c.length++]=W.createComment(" end ngIf: "+e.ngIf+" ");h={clone:c};a.enter(c,d.parent(),d)}):(k&&(k.remove(),k=null),l&&(l.$destroy(),l=n [...]
+tb(h.clone),a.leave(k).then(function(){k=null}),h=null))})}}}],je=["$templateRequest","$anchorScroll","$animate","$sce",function(a,c,d,e){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:ca.noop,compile:function(f,g){var h=g.ngInclude||g.src,l=g.onload||"",k=g.autoscroll;return function(f,g,q,r,s){var t=0,v,m,F,w=function(){m&&(m.remove(),m=null);v&&(v.$destroy(),v=null);F&&(d.leave(F).then(function(){m=null}),m=F,F=null)};f.$watch(e.parseAsResourceUrl(h),fu [...]
+function(){!y(k)||k&&!f.$eval(k)||c()},m=++t;e?(a(e,!0).then(function(a){if(m===t){var c=f.$new();r.template=a;a=s(c,function(a){w();d.enter(a,null,g).then(h)});v=c;F=a;v.$emit("$includeContentLoaded",e);f.$eval(l)}},function(){m===t&&(w(),f.$emit("$includeContentError",e))}),f.$emit("$includeContentRequested",e)):(w(),r.template=null)})}}}}],Ae=["$compile",function(a){return{restrict:"ECA",priority:-400,require:"ngInclude",link:function(c,d,e,f){/SVG/.test(d[0].toString())?(d.empty(),a( [...]
+W).childNodes)(c,function(a){d.append(a)},{futureParentElement:d})):(d.html(f.template),a(d.contents())(c))}}}],ke=Ia({priority:450,compile:function(){return{pre:function(a,c,d){a.$eval(d.ngInit)}}}}),we=function(){return{restrict:"A",priority:100,require:"ngModel",link:function(a,c,d,e){var f=c.attr(d.$attr.ngList)||", ",g="false"!==d.ngTrim,h=g?N(f):f;e.$parsers.push(function(a){if(!x(a)){var c=[];a&&r(a.split(h),function(a){a&&c.push(g?N(a):a)});return c}});e.$formatters.push(function [...]
+a.join(f):t});e.$isEmpty=function(a){return!a||!a.length}}}},lb="ng-valid",vd="ng-invalid",Ra="ng-pristine",Lb="ng-dirty",xd="ng-pending",Nb=new R("ngModel"),eg=["$scope","$exceptionHandler","$attrs","$element","$parse","$animate","$timeout","$rootScope","$q","$interpolate",function(a,c,d,e,f,g,h,l,k,n){this.$modelValue=this.$viewValue=Number.NaN;this.$$rawModelValue=t;this.$validators={};this.$asyncValidators={};this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$unt [...]
+this.$touched=!1;this.$pristine=!0;this.$dirty=!1;this.$valid=!0;this.$invalid=!1;this.$error={};this.$$success={};this.$pending=t;this.$name=n(d.name||"",!1)(a);var p=f(d.ngModel),q=p.assign,u=p,s=q,M=null,v,m=this;this.$$setOptions=function(a){if((m.$options=a)&&a.getterSetter){var c=f(d.ngModel+"()"),g=f(d.ngModel+"($$$p)");u=function(a){var d=p(a);G(d)&&(d=c(a));return d};s=function(a,c){G(p(a))?g(a,{$$$p:m.$modelValue}):q(a,m.$modelValue)}}else if(!p.assign)throw Nb("nonassign",d.ng [...]
+};this.$render=E;this.$isEmpty=function(a){return x(a)||""===a||null===a||a!==a};var F=e.inheritedData("$formController")||Kb,w=0;sd({ctrl:this,$element:e,set:function(a,c){a[c]=!0},unset:function(a,c){delete a[c]},parentForm:F,$animate:g});this.$setPristine=function(){m.$dirty=!1;m.$pristine=!0;g.removeClass(e,Lb);g.addClass(e,Ra)};this.$setDirty=function(){m.$dirty=!0;m.$pristine=!1;g.removeClass(e,Ra);g.addClass(e,Lb);F.$setDirty()};this.$setUntouched=function(){m.$touched=!1;m.$untou [...]
+"ng-untouched","ng-touched")};this.$setTouched=function(){m.$touched=!0;m.$untouched=!1;g.setClass(e,"ng-touched","ng-untouched")};this.$rollbackViewValue=function(){h.cancel(M);m.$viewValue=m.$$lastCommittedViewValue;m.$render()};this.$validate=function(){if(!Y(m.$modelValue)||!isNaN(m.$modelValue)){var a=m.$$rawModelValue,c=m.$valid,d=m.$modelValue,e=m.$options&&m.$options.allowInvalid;m.$$runValidators(a,m.$$lastCommittedViewValue,function(f){e||c===f||(m.$modelValue=f?a:t,m.$modelVal [...]
+this.$$runValidators=function(a,c,d){function e(){var d=!0;r(m.$validators,function(e,f){var h=e(a,c);d=d&&h;g(f,h)});return d?!0:(r(m.$asyncValidators,function(a,c){g(c,null)}),!1)}function f(){var d=[],e=!0;r(m.$asyncValidators,function(f,h){var k=f(a,c);if(!k||!G(k.then))throw Nb("$asyncValidators",k);g(h,t);d.push(k.then(function(){g(h,!0)},function(a){e=!1;g(h,!1)}))});d.length?k.all(d).then(function(){h(e)},E):h(!0)}function g(a,c){l===w&&m.$setValidity(a,c)}function h(a){l===w&&d( [...]
+w;(function(){var a=m.$$parserName||"parse";if(v===t)g(a,null);else return v||(r(m.$validators,function(a,c){g(c,null)}),r(m.$asyncValidators,function(a,c){g(c,null)})),g(a,v),v;return!0})()?e()?f():h(!1):h(!1)};this.$commitViewValue=function(){var a=m.$viewValue;h.cancel(M);if(m.$$lastCommittedViewValue!==a||""===a&&m.$$hasNativeValidators)m.$$lastCommittedViewValue=a,m.$pristine&&this.$setDirty(),this.$$parseAndValidate()};this.$$parseAndValidate=function(){var c=m.$$lastCommittedViewV [...]
+x(c)?t:!0)for(var d=0;d<m.$parsers.length;d++)if(c=m.$parsers[d](c),x(c)){v=!1;break}Y(m.$modelValue)&&isNaN(m.$modelValue)&&(m.$modelValue=u(a));var e=m.$modelValue,f=m.$options&&m.$options.allowInvalid;m.$$rawModelValue=c;f&&(m.$modelValue=c,m.$modelValue!==e&&m.$$writeModelToScope());m.$$runValidators(c,m.$$lastCommittedViewValue,function(a){f||(m.$modelValue=a?c:t,m.$modelValue!==e&&m.$$writeModelToScope())})};this.$$writeModelToScope=function(){s(a,m.$modelValue);r(m.$viewChangeList [...]
+this.$setViewValue=function(a,c){m.$viewValue=a;m.$options&&!m.$options.updateOnDefault||m.$$debounceViewValueCommit(c)};this.$$debounceViewValueCommit=function(c){var d=0,e=m.$options;e&&y(e.debounce)&&(e=e.debounce,Y(e)?d=e:Y(e[c])?d=e[c]:Y(e["default"])&&(d=e["default"]));h.cancel(M);d?M=h(function(){m.$commitViewValue()},d):l.$$phase?m.$commitViewValue():a.$apply(function(){m.$commitViewValue()})};a.$watch(function(){var c=u(a);if(c!==m.$modelValue){m.$modelValue=m.$$rawModelValue=c; [...]
+m.$formatters,e=d.length,f=c;e--;)f=d[e](f);m.$viewValue!==f&&(m.$viewValue=m.$$lastCommittedViewValue=f,m.$render(),m.$$runValidators(c,f,E))}return c})}],ve=["$rootScope",function(a){return{restrict:"A",require:["ngModel","^?form","^?ngModelOptions"],controller:eg,priority:1,compile:function(c){c.addClass(Ra).addClass("ng-untouched").addClass(lb);return{pre:function(a,c,f,g){var h=g[0],l=g[1]||Kb;h.$$setOptions(g[2]&&g[2].$options);l.$addControl(h);f.$observe("name",function(a){h.$name [...]
+a)});a.$on("$destroy",function(){l.$removeControl(h)})},post:function(c,e,f,g){var h=g[0];if(h.$options&&h.$options.updateOn)e.on(h.$options.updateOn,function(a){h.$$debounceViewValueCommit(a&&a.type)});e.on("blur",function(e){h.$touched||(a.$$phase?c.$evalAsync(h.$setTouched):c.$apply(h.$setTouched))})}}}}}],fg=/(\s+|^)default(\s+|$)/,ze=function(){return{restrict:"A",controller:["$scope","$attrs",function(a,c){var d=this;this.$options=a.$eval(c.ngModelOptions);this.$options.updateOn!== [...]
+!1,this.$options.updateOn=N(this.$options.updateOn.replace(fg,function(){d.$options.updateOnDefault=!0;return" "}))):this.$options.updateOnDefault=!0}]}},le=Ia({terminal:!0,priority:1E3}),me=["$locale","$interpolate",function(a,c){var d=/{}/g,e=/^when(Minus)?(.+)$/;return{restrict:"EA",link:function(f,g,h){function l(a){g.text(a||"")}var k=h.count,n=h.$attr.when&&g.attr(h.$attr.when),p=h.offset||0,q=f.$eval(n)||{},u={},n=c.startSymbol(),s=c.endSymbol(),t=n+k+"-"+p+s,v=ca.noop,m;r(h,funct [...]
+e.exec(c);d&&(d=(d[1]?"-":"")+z(d[2]),q[d]=g.attr(h.$attr[c]))});r(q,function(a,e){u[e]=c(a.replace(d,t))});f.$watch(k,function(c){c=parseFloat(c);var d=isNaN(c);d||c in q||(c=a.pluralCat(c-p));c===m||d&&isNaN(m)||(v(),v=f.$watch(u[c],l),m=c)})}}}],ne=["$parse","$animate",function(a,c){var d=R("ngRepeat"),e=function(a,c,d,e,k,n,p){a[d]=e;k&&(a[k]=n);a.$index=c;a.$first=0===c;a.$last=c===p-1;a.$middle=!(a.$first||a.$last);a.$odd=!(a.$even=0===(c&1))};return{restrict:"A",multiElement:!0,tr [...]
+priority:1E3,terminal:!0,$$tlb:!0,compile:function(f,g){var h=g.ngRepeat,l=W.createComment(" end ngRepeat: "+h+" "),k=h.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);if(!k)throw d("iexp",h);var n=k[1],p=k[2],q=k[3],u=k[4],k=n.match(/^(?:(\s*[\$\w]+)|\(\s*([\$\w]+)\s*,\s*([\$\w]+)\s*\))$/);if(!k)throw d("iidexp",n);var s=k[3]||k[1],y=k[2];if(q&&(!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(q)||/^(null|undefined|this|\$index|\$first|\$middle|\$la [...]
+q);var v,m,w,x,E={$id:Ma};u?v=a(u):(w=function(a,c){return Ma(c)},x=function(a){return a});return function(a,f,g,k,n){v&&(m=function(c,d,e){y&&(E[y]=c);E[s]=d;E.$index=e;return v(a,E)});var u=ia();a.$watchCollection(p,function(g){var k,p,v=f[0],D,E=ia(),G,H,L,S,J,C,z;q&&(a[q]=g);if(Sa(g))J=g,p=m||w;else{p=m||x;J=[];for(z in g)g.hasOwnProperty(z)&&"$"!=z.charAt(0)&&J.push(z);J.sort()}G=J.length;z=Array(G);for(k=0;k<G;k++)if(H=g===J?k:J[k],L=g[H],S=p(H,L,k),u[S])C=u[S],delete u[S],E[S]=C,z [...]
+function(a){a&&a.scope&&(u[a.id]=a)}),d("dupes",h,S,L);z[k]={id:S,scope:t,clone:t};E[S]=!0}for(D in u){C=u[D];S=tb(C.clone);c.leave(S);if(S[0].parentNode)for(k=0,p=S.length;k<p;k++)S[k].$$NG_REMOVED=!0;C.scope.$destroy()}for(k=0;k<G;k++)if(H=g===J?k:J[k],L=g[H],C=z[k],C.scope){D=v;do D=D.nextSibling;while(D&&D.$$NG_REMOVED);C.clone[0]!=D&&c.move(tb(C.clone),null,A(v));v=C.clone[C.clone.length-1];e(C.scope,k,s,L,y,H,G)}else n(function(a,d){C.scope=d;var f=l.cloneNode(!1);a[a.length++]=f;c [...]
+null,A(v));v=f;C.clone=a;E[C.id]=C;e(C.scope,k,s,L,y,H,G)});u=E})}}}}],oe=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(c,d,e){c.$watch(e.ngShow,function(c){a[c?"removeClass":"addClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],he=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(c,d,e){c.$watch(e.ngHide,function(c){a[c?"addClass":"removeClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],pe=Ia(function(a,c,d){a.$watchC [...]
+function(a,d){d&&a!==d&&r(d,function(a,d){c.css(d,"")});a&&c.css(a)})}),qe=["$animate",function(a){return{restrict:"EA",require:"ngSwitch",controller:["$scope",function(){this.cases={}}],link:function(c,d,e,f){var g=[],h=[],l=[],k=[],n=function(a,c){return function(){a.splice(c,1)}};c.$watch(e.ngSwitch||e.on,function(c){var d,e;d=0;for(e=l.length;d<e;++d)a.cancel(l[d]);d=l.length=0;for(e=k.length;d<e;++d){var s=tb(h[d].clone);k[d].$destroy();(l[d]=a.leave(s)).then(n(l,d))}h.length=0;k.le [...]
+f.cases["!"+c]||f.cases["?"])&&r(g,function(c){c.transclude(function(d,e){k.push(e);var f=c.element;d[d.length++]=W.createComment(" end ngSwitchWhen: ");h.push({clone:d});a.enter(d,f.parent(),f)})})})}}}],re=Ia({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,c,d,e,f){e.cases["!"+d.ngSwitchWhen]=e.cases["!"+d.ngSwitchWhen]||[];e.cases["!"+d.ngSwitchWhen].push({transclude:f,element:c})}}),se=Ia({transclude:"element",priority:1200,require:"^ngSwitch", [...]
+link:function(a,c,d,e,f){e.cases["?"]=e.cases["?"]||[];e.cases["?"].push({transclude:f,element:c})}}),ue=Ia({restrict:"EAC",link:function(a,c,d,e,f){if(!f)throw R("ngTransclude")("orphan",wa(c));f(function(a){c.empty();c.append(a)})}}),Vd=["$templateCache",function(a){return{restrict:"E",terminal:!0,compile:function(c,d){"text/ng-template"==d.type&&a.put(d.id,c[0].text)}}}],gg=R("ngOptions"),te=ea({restrict:"A",terminal:!0}),Wd=["$compile","$parse",function(a,c){var d=/^\s*([\s\S]+?)(?:\ [...]
+e={$setViewValue:E};return{restrict:"E",require:["select","?ngModel"],controller:["$element","$scope","$attrs",function(a,c,d){var l=this,k={},n=e,p;l.databound=d.ngModel;l.init=function(a,c,d){n=a;p=d};l.addOption=function(c,d){La(c,'"option value"');k[c]=!0;n.$viewValue==c&&(a.val(c),p.parent()&&p.remove());d&&d[0].hasAttribute("selected")&&(d[0].selected=!0)};l.removeOption=function(a){this.hasOption(a)&&(delete k[a],n.$viewValue===a&&this.renderUnknownOption(a))};l.renderUnknownOptio [...]
+"? "+Ma(c)+" ?";p.val(c);a.prepend(p);a.val(c);p.prop("selected",!0)};l.hasOption=function(a){return k.hasOwnProperty(a)};c.$on("$destroy",function(){l.renderUnknownOption=E})}],link:function(e,g,h,l){function k(a,c,d,e){d.$render=function(){var a=d.$viewValue;e.hasOption(a)?(C.parent()&&C.remove(),c.val(a),""===a&&v.prop("selected",!0)):x(a)&&v?c.val(""):e.renderUnknownOption(a)};c.on("change",function(){a.$apply(function(){C.parent()&&C.remove();d.$setViewValue(c.val())})})}function n( [...]
+d.$render=function(){var a=new eb(d.$viewValue);r(c.find("option"),function(c){c.selected=y(a.get(c.value))})};a.$watch(function(){ha(e,d.$viewValue)||(e=sa(d.$viewValue),d.$render())});c.on("change",function(){a.$apply(function(){var a=[];r(c.find("option"),function(c){c.selected&&a.push(c.value)});d.$setViewValue(a)})})}function p(e,f,g){function h(a,c,d){T[x]=d;G&&(T[G]=c);return a(e,T)}function k(a){var c;if(u)if(I&&H(a)){c=new eb([]);for(var d=0;d<a.length;d++)c.put(h(I,null,a[d]),! [...]
+new eb(a);else I&&(a=h(I,null,a));return function(d,e){var f;f=I?I:B?B:z;return u?y(c.remove(h(f,d,e))):a===h(f,d,e)}}function l(){m||(e.$$postDigest(p),m=!0)}function n(a,c,d){a[c]=a[c]||0;a[c]+=d?1:-1}function p(){m=!1;var a={"":[]},c=[""],d,l,s,t,v;s=g.$viewValue;t=L(e)||[];var B=G?Object.keys(t).sort():t,x,A,H,z,O={};v=k(s);var N=!1,U,W;Q={};for(z=0;H=B.length,z<H;z++){x=z;if(G&&(x=B[z],"$"===x.charAt(0)))continue;A=t[x];d=h(J,x,A)||"";(l=a[d])||(l=a[d]=[],c.push(d));d=v(x,A);N=N||d; [...]
+A=y(A)?A:"";W=I?I(e,T):G?B[z]:z;I&&(Q[W]=x);l.push({id:W,label:A,selected:d})}u||(w||null===s?a[""].unshift({id:"",label:"",selected:!N}):N||a[""].unshift({id:"?",label:"",selected:!0}));x=0;for(B=c.length;x<B;x++){d=c[x];l=a[d];R.length<=x?(s={element:E.clone().attr("label",d),label:l.label},t=[s],R.push(t),f.append(s.element)):(t=R[x],s=t[0],s.label!=d&&s.element.attr("label",s.label=d));N=null;z=0;for(H=l.length;z<H;z++)d=l[z],(v=t[z+1])?(N=v.element,v.label!==d.label&&(n(O,v.label,!1 [...]
+!0),N.text(v.label=d.label),N.prop("label",v.label)),v.id!==d.id&&N.val(v.id=d.id),N[0].selected!==d.selected&&(N.prop("selected",v.selected=d.selected),Qa&&N.prop("selected",v.selected))):(""===d.id&&w?U=w:(U=F.clone()).val(d.id).prop("selected",d.selected).attr("selected",d.selected).prop("label",d.label).text(d.label),t.push(v={element:U,label:d.label,id:d.id,selected:d.selected}),n(O,d.label,!0),N?N.after(U):s.element.append(U),N=U);for(z++;t.length>z;)d=t.pop(),n(O,d.label,!1),d.ele [...]
+x;){l=R.pop();for(z=1;z<l.length;++z)n(O,l[z].label,!1);l[0].element.remove()}r(O,function(a,c){0<a?q.addOption(c):0>a&&q.removeOption(c)})}var v;if(!(v=s.match(d)))throw gg("iexp",s,wa(f));var C=c(v[2]||v[1]),x=v[4]||v[6],A=/ as /.test(v[0])&&v[1],B=A?c(A):null,G=v[5],J=c(v[3]||""),z=c(v[2]?v[1]:x),L=c(v[7]),I=v[8]?c(v[8]):null,Q={},R=[[{element:f,label:""}]],T={};w&&(a(w)(e),w.removeClass("ng-scope"),w.remove());f.empty();f.on("change",function(){e.$apply(function(){var a=L(e)||[],c;if [...]
+function(d){d=I?Q[d]:d;c.push("?"===d?t:""===d?null:h(B?B:z,d,a[d]))});else{var d=I?Q[f.val()]:f.val();c="?"===d?t:""===d?null:h(B?B:z,d,a[d])}g.$setViewValue(c);p()})});g.$render=p;e.$watchCollection(L,l);e.$watchCollection(function(){var a=L(e),c;if(a&&H(a)){c=Array(a.length);for(var d=0,f=a.length;d<f;d++)c[d]=h(C,d,a[d])}else if(a)for(d in c={},a)a.hasOwnProperty(d)&&(c[d]=h(C,d,a[d]));return c},l);u&&e.$watchCollection(function(){return g.$modelValue},l)}if(l[1]){var q=l[0];l=l[1];v [...]
+s=h.ngOptions,w=!1,v,m=!1,F=A(W.createElement("option")),E=A(W.createElement("optgroup")),C=F.clone();h=0;for(var B=g.children(),G=B.length;h<G;h++)if(""===B[h].value){v=w=B.eq(h);break}q.init(l,w,C);u&&(l.$isEmpty=function(a){return!a||0===a.length});s?p(e,g,l):u?n(e,g,l):k(e,g,l,q)}}}}],Yd=["$interpolate",function(a){var c={addOption:E,removeOption:E};return{restrict:"E",priority:100,compile:function(d,e){if(x(e.value)){var f=a(d.text(),!0);f||e.$set("value",d.text())}return function(a [...]
+d.parent(),n=k.data("$selectController")||k.parent().data("$selectController");n&&n.databound||(n=c);f?a.$watch(f,function(a,c){e.$set("value",a);c!==a&&n.removeOption(c);n.addOption(a,d)}):n.addOption(e.value,d);d.on("$destroy",function(){n.removeOption(e.value)})}}}}],Xd=ea({restrict:"E",terminal:!1}),Bc=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){e&&(d.required=!0,e.$validators.required=function(a,c){return!d.required||!e.$isEmpty(c)},d.$observe("required" [...]
+Ac=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){if(e){var f,g=d.ngPattern||d.pattern;d.$observe("pattern",function(a){C(a)&&0<a.length&&(a=new RegExp("^"+a+"$"));if(a&&!a.test)throw R("ngPattern")("noregexp",g,a,wa(c));f=a||t;e.$validate()});e.$validators.pattern=function(a){return e.$isEmpty(a)||x(f)||f.test(a)}}}}},Dc=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){if(e){var f=-1;d.$observe("maxlength",function(a){a=aa(a);f=isNaN(a)? [...]
+e.$validators.maxlength=function(a,c){return 0>f||e.$isEmpty(c)||c.length<=f}}}}},Cc=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){if(e){var f=0;d.$observe("minlength",function(a){f=aa(a)||0;e.$validate()});e.$validators.minlength=function(a,c){return e.$isEmpty(c)||c.length>=f}}}}};Q.angular.bootstrap?console.log("WARNING: Tried to load angular more than once."):(Nd(),Pd(ca),A(W).ready(function(){Jd(W,uc)}))})(window,document);!window.angular.$$csp()&&window.a [...]
+//# sourceMappingURL=angular.min.js.map
diff --git a/assets/themes/zeppelin/css/fonts/PatuaOne-Regular.ttf b/assets/themes/zeppelin/css/fonts/PatuaOne-Regular.ttf
new file mode 100644
index 000000000..60fcc2d07
Binary files /dev/null and b/assets/themes/zeppelin/css/fonts/PatuaOne-Regular.ttf differ
diff --git a/assets/themes/zeppelin/css/style.css b/assets/themes/zeppelin/css/style.css
index 2e985b7b1..07d9a3388 100644
--- a/assets/themes/zeppelin/css/style.css
+++ b/assets/themes/zeppelin/css/style.css
@@ -1,7 +1,9 @@
 /* Move down content because we have a fixed navbar that is 50px tall */
-@import url(//fonts.googleapis.com/css?family=Patua+One);
-@import url(//fonts.googleapis.com/css?family=Open+Sans);
-@import url(//fonts.googleapis.com/css?family=Raleway:300,400);
+
+@font-face {
+  font-family: 'Patua One';
+  src: url('fonts/PatuaOne-Regular.ttf') format('truetype');
+}
 
 body {
   padding-top: 50px;
@@ -1649,4 +1651,4 @@ and (max-width: 631px) {
   color: #FFF;
   text-decoration: none;
   background-color: #0479A2;
-}
\ No newline at end of file
+}
diff --git a/assets/themes/zeppelin/font-awesome.min.css b/assets/themes/zeppelin/font-awesome.min.css
new file mode 100644
index 000000000..540440ce8
--- /dev/null
+++ b/assets/themes/zeppelin/font-awesome.min.css
@@ -0,0 +1,4 @@
+/*!
+ *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:norma [...]
diff --git a/assets/themes/zeppelin/icon.css b/assets/themes/zeppelin/icon.css
new file mode 100644
index 000000000..1269af123
--- /dev/null
+++ b/assets/themes/zeppelin/icon.css
@@ -0,0 +1,20 @@
+@font-face {
+  font-family: 'Material Icons';
+  font-style: normal;
+  font-weight: 400;
+  src: url('../fonts/material-icons.ttf') format('truetype');
+}
+
+.material-icons {
+  font-family: 'Material Icons';
+  font-weight: normal;
+  font-style: normal;
+  font-size: 24px;
+  line-height: 1;
+  letter-spacing: normal;
+  text-transform: none;
+  display: inline-block;
+  white-space: nowrap;
+  word-wrap: normal;
+  direction: ltr;
+}
diff --git a/assets/themes/zeppelin/jquery-1.10.2.min.js b/assets/themes/zeppelin/jquery-1.10.2.min.js
new file mode 100644
index 000000000..da4170647
--- /dev/null
+++ b/assets/themes/zeppelin/jquery-1.10.2.min.js
@@ -0,0 +1,6 @@
+/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license
+//@ sourceMappingURL=jquery-1.10.2.min.map
+*/
+(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f="1.10.2",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=/\S+/g,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/ [...]
+}({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null [...]
+u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.first [...]
diff --git a/assets/themes/zeppelin/js/medium.controller.js b/assets/themes/zeppelin/js/medium.controller.js
index f2a939527..e4926f166 100644
--- a/assets/themes/zeppelin/js/medium.controller.js
+++ b/assets/themes/zeppelin/js/medium.controller.js
@@ -1,7 +1,9 @@
 angular.module("app").controller("MediumCtrl", function($scope, $window, $sce) {
-  $scope.mediumPost = mediumPost
+  $scope.mediumPost = $window.mediumPost || []
 
-  var postInfo = $scope.mediumPost[0].items
+  var postInfo = $scope.mediumPost.length && $scope.mediumPost[0].items
+    ? $scope.mediumPost[0].items
+    : []
   var postInfoArray = []
 
   var init = function () {
@@ -44,4 +46,4 @@ angular.module("app").controller("MediumCtrl", function($scope, $window, $sce) {
   }
 
   init()
-})
\ No newline at end of file
+})
diff --git a/assets/themes/zeppelin/ui-bootstrap-tpls-2.5.0.js b/assets/themes/zeppelin/ui-bootstrap-tpls-2.5.0.js
new file mode 100644
index 000000000..dff5c546f
--- /dev/null
+++ b/assets/themes/zeppelin/ui-bootstrap-tpls-2.5.0.js
@@ -0,0 +1,7776 @@
+/*
+ * angular-ui-bootstrap
+ * http://angular-ui.github.io/bootstrap/
+
+ * Version: 2.5.0 - 2017-01-28
+ * License: MIT
+ */angular.module("ui.bootstrap", ["ui.bootstrap.tpls", "ui.bootstrap.collapse","ui.bootstrap.tabindex","ui.bootstrap.accordion","ui.bootstrap.alert","ui.bootstrap.buttons","ui.bootstrap.carousel","ui.bootstrap.dateparser","ui.bootstrap.isClass","ui.bootstrap.datepicker","ui.bootstrap.position","ui.bootstrap.datepickerPopup","ui.bootstrap.debounce","ui.bootstrap.multiMap","ui.bootstrap.dropdown","ui.bootstrap.stackedMap","ui.bootstrap.modal","ui.bootstrap.paging","ui.bootstrap.pager","ui [...]
+angular.module("ui.bootstrap.tpls", ["uib/template/accordion/accordion-group.html","uib/template/accordion/accordion.html","uib/template/alert/alert.html","uib/template/carousel/carousel.html","uib/template/carousel/slide.html","uib/template/datepicker/datepicker.html","uib/template/datepicker/day.html","uib/template/datepicker/month.html","uib/template/datepicker/year.html","uib/template/datepickerPopup/popup.html","uib/template/modal/window.html","uib/template/pager/pager.html","uib/te [...]
+angular.module('ui.bootstrap.collapse', [])
+
+  .directive('uibCollapse', ['$animate', '$q', '$parse', '$injector', function($animate, $q, $parse, $injector) {
+    var $animateCss = $injector.has('$animateCss') ? $injector.get('$animateCss') : null;
+    return {
+      link: function(scope, element, attrs) {
+        var expandingExpr = $parse(attrs.expanding),
+          expandedExpr = $parse(attrs.expanded),
+          collapsingExpr = $parse(attrs.collapsing),
+          collapsedExpr = $parse(attrs.collapsed),
+          horizontal = false,
+          css = {},
+          cssTo = {};
+
+        init();
+
+        function init() {
+          horizontal = !!('horizontal' in attrs);
+          if (horizontal) {
+            css = {
+              width: ''
+            };
+            cssTo = {width: '0'};
+          } else {
+            css = {
+              height: ''
+            };
+            cssTo = {height: '0'};
+          }
+          if (!scope.$eval(attrs.uibCollapse)) {
+            element.addClass('in')
+              .addClass('collapse')
+              .attr('aria-expanded', true)
+              .attr('aria-hidden', false)
+              .css(css);
+          }
+        }
+
+        function getScrollFromElement(element) {
+          if (horizontal) {
+            return {width: element.scrollWidth + 'px'};
+          }
+          return {height: element.scrollHeight + 'px'};
+        }
+
+        function expand() {
+          if (element.hasClass('collapse') && element.hasClass('in')) {
+            return;
+          }
+
+          $q.resolve(expandingExpr(scope))
+            .then(function() {
+              element.removeClass('collapse')
+                .addClass('collapsing')
+                .attr('aria-expanded', true)
+                .attr('aria-hidden', false);
+
+              if ($animateCss) {
+                $animateCss(element, {
+                  addClass: 'in',
+                  easing: 'ease',
+                  css: {
+                    overflow: 'hidden'
+                  },
+                  to: getScrollFromElement(element[0])
+                }).start()['finally'](expandDone);
+              } else {
+                $animate.addClass(element, 'in', {
+                  css: {
+                    overflow: 'hidden'
+                  },
+                  to: getScrollFromElement(element[0])
+                }).then(expandDone);
+              }
+            }, angular.noop);
+        }
+
+        function expandDone() {
+          element.removeClass('collapsing')
+            .addClass('collapse')
+            .css(css);
+          expandedExpr(scope);
+        }
+
+        function collapse() {
+          if (!element.hasClass('collapse') && !element.hasClass('in')) {
+            return collapseDone();
+          }
+
+          $q.resolve(collapsingExpr(scope))
+            .then(function() {
+              element
+              // IMPORTANT: The width must be set before adding "collapsing" class.
+              // Otherwise, the browser attempts to animate from width 0 (in
+              // collapsing class) to the given width here.
+                .css(getScrollFromElement(element[0]))
+                // initially all panel collapse have the collapse class, this removal
+                // prevents the animation from jumping to collapsed state
+                .removeClass('collapse')
+                .addClass('collapsing')
+                .attr('aria-expanded', false)
+                .attr('aria-hidden', true);
+
+              if ($animateCss) {
+                $animateCss(element, {
+                  removeClass: 'in',
+                  to: cssTo
+                }).start()['finally'](collapseDone);
+              } else {
+                $animate.removeClass(element, 'in', {
+                  to: cssTo
+                }).then(collapseDone);
+              }
+            }, angular.noop);
+        }
+
+        function collapseDone() {
+          element.css(cssTo); // Required so that collapse works when animation is disabled
+          element.removeClass('collapsing')
+            .addClass('collapse');
+          collapsedExpr(scope);
+        }
+
+        scope.$watch(attrs.uibCollapse, function(shouldCollapse) {
+          if (shouldCollapse) {
+            collapse();
+          } else {
+            expand();
+          }
+        });
+      }
+    };
+  }]);
+
+angular.module('ui.bootstrap.tabindex', [])
+
+.directive('uibTabindexToggle', function() {
+  return {
+    restrict: 'A',
+    link: function(scope, elem, attrs) {
+      attrs.$observe('disabled', function(disabled) {
+        attrs.$set('tabindex', disabled ? -1 : null);
+      });
+    }
+  };
+});
+
+angular.module('ui.bootstrap.accordion', ['ui.bootstrap.collapse', 'ui.bootstrap.tabindex'])
+
+.constant('uibAccordionConfig', {
+  closeOthers: true
+})
+
+.controller('UibAccordionController', ['$scope', '$attrs', 'uibAccordionConfig', function($scope, $attrs, accordionConfig) {
+  // This array keeps track of the accordion groups
+  this.groups = [];
+
+  // Ensure that all the groups in this accordion are closed, unless close-others explicitly says not to
+  this.closeOthers = function(openGroup) {
+    var closeOthers = angular.isDefined($attrs.closeOthers) ?
+      $scope.$eval($attrs.closeOthers) : accordionConfig.closeOthers;
+    if (closeOthers) {
+      angular.forEach(this.groups, function(group) {
+        if (group !== openGroup) {
+          group.isOpen = false;
+        }
+      });
+    }
+  };
+
+  // This is called from the accordion-group directive to add itself to the accordion
+  this.addGroup = function(groupScope) {
+    var that = this;
+    this.groups.push(groupScope);
+
+    groupScope.$on('$destroy', function(event) {
+      that.removeGroup(groupScope);
+    });
+  };
+
+  // This is called from the accordion-group directive when to remove itself
+  this.removeGroup = function(group) {
+    var index = this.groups.indexOf(group);
+    if (index !== -1) {
+      this.groups.splice(index, 1);
+    }
+  };
+}])
+
+// The accordion directive simply sets up the directive controller
+// and adds an accordion CSS class to itself element.
+.directive('uibAccordion', function() {
+  return {
+    controller: 'UibAccordionController',
+    controllerAs: 'accordion',
+    transclude: true,
+    templateUrl: function(element, attrs) {
+      return attrs.templateUrl || 'uib/template/accordion/accordion.html';
+    }
+  };
+})
+
+// The accordion-group directive indicates a block of html that will expand and collapse in an accordion
+.directive('uibAccordionGroup', function() {
+  return {
+    require: '^uibAccordion',         // We need this directive to be inside an accordion
+    transclude: true,              // It transcludes the contents of the directive into the template
+    restrict: 'A',
+    templateUrl: function(element, attrs) {
+      return attrs.templateUrl || 'uib/template/accordion/accordion-group.html';
+    },
+    scope: {
+      heading: '@',               // Interpolate the heading attribute onto this scope
+      panelClass: '@?',           // Ditto with panelClass
+      isOpen: '=?',
+      isDisabled: '=?'
+    },
+    controller: function() {
+      this.setHeading = function(element) {
+        this.heading = element;
+      };
+    },
+    link: function(scope, element, attrs, accordionCtrl) {
+      element.addClass('panel');
+      accordionCtrl.addGroup(scope);
+
+      scope.openClass = attrs.openClass || 'panel-open';
+      scope.panelClass = attrs.panelClass || 'panel-default';
+      scope.$watch('isOpen', function(value) {
+        element.toggleClass(scope.openClass, !!value);
+        if (value) {
+          accordionCtrl.closeOthers(scope);
+        }
+      });
+
+      scope.toggleOpen = function($event) {
+        if (!scope.isDisabled) {
+          if (!$event || $event.which === 32) {
+            scope.isOpen = !scope.isOpen;
+          }
+        }
+      };
+
+      var id = 'accordiongroup-' + scope.$id + '-' + Math.floor(Math.random() * 10000);
+      scope.headingId = id + '-tab';
+      scope.panelId = id + '-panel';
+    }
+  };
+})
+
+// Use accordion-heading below an accordion-group to provide a heading containing HTML
+.directive('uibAccordionHeading', function() {
+  return {
+    transclude: true,   // Grab the contents to be used as the heading
+    template: '',       // In effect remove this element!
+    replace: true,
+    require: '^uibAccordionGroup',
+    link: function(scope, element, attrs, accordionGroupCtrl, transclude) {
+      // Pass the heading to the accordion-group controller
+      // so that it can be transcluded into the right place in the template
+      // [The second parameter to transclude causes the elements to be cloned so that they work in ng-repeat]
+      accordionGroupCtrl.setHeading(transclude(scope, angular.noop));
+    }
+  };
+})
+
+// Use in the accordion-group template to indicate where you want the heading to be transcluded
+// You must provide the property on the accordion-group controller that will hold the transcluded element
+.directive('uibAccordionTransclude', function() {
+  return {
+    require: '^uibAccordionGroup',
+    link: function(scope, element, attrs, controller) {
+      scope.$watch(function() { return controller[attrs.uibAccordionTransclude]; }, function(heading) {
+        if (heading) {
+          var elem = angular.element(element[0].querySelector(getHeaderSelectors()));
+          elem.html('');
+          elem.append(heading);
+        }
+      });
+    }
+  };
+
+  function getHeaderSelectors() {
+      return 'uib-accordion-header,' +
+          'data-uib-accordion-header,' +
+          'x-uib-accordion-header,' +
+          'uib\\:accordion-header,' +
+          '[uib-accordion-header],' +
+          '[data-uib-accordion-header],' +
+          '[x-uib-accordion-header]';
+  }
+});
+
+angular.module('ui.bootstrap.alert', [])
+
+.controller('UibAlertController', ['$scope', '$element', '$attrs', '$interpolate', '$timeout', function($scope, $element, $attrs, $interpolate, $timeout) {
+  $scope.closeable = !!$attrs.close;
+  $element.addClass('alert');
+  $attrs.$set('role', 'alert');
+  if ($scope.closeable) {
+    $element.addClass('alert-dismissible');
+  }
+
+  var dismissOnTimeout = angular.isDefined($attrs.dismissOnTimeout) ?
+    $interpolate($attrs.dismissOnTimeout)($scope.$parent) : null;
+
+  if (dismissOnTimeout) {
+    $timeout(function() {
+      $scope.close();
+    }, parseInt(dismissOnTimeout, 10));
+  }
+}])
+
+.directive('uibAlert', function() {
+  return {
+    controller: 'UibAlertController',
+    controllerAs: 'alert',
+    restrict: 'A',
+    templateUrl: function(element, attrs) {
+      return attrs.templateUrl || 'uib/template/alert/alert.html';
+    },
+    transclude: true,
+    scope: {
+      close: '&'
+    }
+  };
+});
+
+angular.module('ui.bootstrap.buttons', [])
+
+.constant('uibButtonConfig', {
+  activeClass: 'active',
+  toggleEvent: 'click'
+})
+
+.controller('UibButtonsController', ['uibButtonConfig', function(buttonConfig) {
+  this.activeClass = buttonConfig.activeClass || 'active';
+  this.toggleEvent = buttonConfig.toggleEvent || 'click';
+}])
+
+.directive('uibBtnRadio', ['$parse', function($parse) {
+  return {
+    require: ['uibBtnRadio', 'ngModel'],
+    controller: 'UibButtonsController',
+    controllerAs: 'buttons',
+    link: function(scope, element, attrs, ctrls) {
+      var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1];
+      var uncheckableExpr = $parse(attrs.uibUncheckable);
+
+      element.find('input').css({display: 'none'});
+
+      //model -> UI
+      ngModelCtrl.$render = function() {
+        element.toggleClass(buttonsCtrl.activeClass, angular.equals(ngModelCtrl.$modelValue, scope.$eval(attrs.uibBtnRadio)));
+      };
+
+      //ui->model
+      element.on(buttonsCtrl.toggleEvent, function() {
+        if (attrs.disabled) {
+          return;
+        }
+
+        var isActive = element.hasClass(buttonsCtrl.activeClass);
+
+        if (!isActive || angular.isDefined(attrs.uncheckable)) {
+          scope.$apply(function() {
+            ngModelCtrl.$setViewValue(isActive ? null : scope.$eval(attrs.uibBtnRadio));
+            ngModelCtrl.$render();
+          });
+        }
+      });
+
+      if (attrs.uibUncheckable) {
+        scope.$watch(uncheckableExpr, function(uncheckable) {
+          attrs.$set('uncheckable', uncheckable ? '' : undefined);
+        });
+      }
+    }
+  };
+}])
+
+.directive('uibBtnCheckbox', function() {
+  return {
+    require: ['uibBtnCheckbox', 'ngModel'],
+    controller: 'UibButtonsController',
+    controllerAs: 'button',
+    link: function(scope, element, attrs, ctrls) {
+      var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1];
+
+      element.find('input').css({display: 'none'});
+
+      function getTrueValue() {
+        return getCheckboxValue(attrs.btnCheckboxTrue, true);
+      }
+
+      function getFalseValue() {
+        return getCheckboxValue(attrs.btnCheckboxFalse, false);
+      }
+
+      function getCheckboxValue(attribute, defaultValue) {
+        return angular.isDefined(attribute) ? scope.$eval(attribute) : defaultValue;
+      }
+
+      //model -> UI
+      ngModelCtrl.$render = function() {
+        element.toggleClass(buttonsCtrl.activeClass, angular.equals(ngModelCtrl.$modelValue, getTrueValue()));
+      };
+
+      //ui->model
+      element.on(buttonsCtrl.toggleEvent, function() {
+        if (attrs.disabled) {
+          return;
+        }
+
+        scope.$apply(function() {
+          ngModelCtrl.$setViewValue(element.hasClass(buttonsCtrl.activeClass) ? getFalseValue() : getTrueValue());
+          ngModelCtrl.$render();
+        });
+      });
+    }
+  };
+});
+
+angular.module('ui.bootstrap.carousel', [])
+
+.controller('UibCarouselController', ['$scope', '$element', '$interval', '$timeout', '$animate', function($scope, $element, $interval, $timeout, $animate) {
+  var self = this,
+    slides = self.slides = $scope.slides = [],
+    SLIDE_DIRECTION = 'uib-slideDirection',
+    currentIndex = $scope.active,
+    currentInterval, isPlaying;
+
+  var destroyed = false;
+  $element.addClass('carousel');
+
+  self.addSlide = function(slide, element) {
+    slides.push({
+      slide: slide,
+      element: element
+    });
+    slides.sort(function(a, b) {
+      return +a.slide.index - +b.slide.index;
+    });
+    //if this is the first slide or the slide is set to active, select it
+    if (slide.index === $scope.active || slides.length === 1 && !angular.isNumber($scope.active)) {
+      if ($scope.$currentTransition) {
+        $scope.$currentTransition = null;
+      }
+
+      currentIndex = slide.index;
+      $scope.active = slide.index;
+      setActive(currentIndex);
+      self.select(slides[findSlideIndex(slide)]);
+      if (slides.length === 1) {
+        $scope.play();
+      }
+    }
+  };
+
+  self.getCurrentIndex = function() {
+    for (var i = 0; i < slides.length; i++) {
+      if (slides[i].slide.index === currentIndex) {
+        return i;
+      }
+    }
+  };
+
+  self.next = $scope.next = function() {
+    var newIndex = (self.getCurrentIndex() + 1) % slides.length;
+
+    if (newIndex === 0 && $scope.noWrap()) {
+      $scope.pause();
+      return;
+    }
+
+    return self.select(slides[newIndex], 'next');
+  };
+
+  self.prev = $scope.prev = function() {
+    var newIndex = self.getCurrentIndex() - 1 < 0 ? slides.length - 1 : self.getCurrentIndex() - 1;
+
+    if ($scope.noWrap() && newIndex === slides.length - 1) {
+      $scope.pause();
+      return;
+    }
+
+    return self.select(slides[newIndex], 'prev');
+  };
+
+  self.removeSlide = function(slide) {
+    var index = findSlideIndex(slide);
+
+    //get the index of the slide inside the carousel
+    slides.splice(index, 1);
+    if (slides.length > 0 && currentIndex === index) {
+      if (index >= slides.length) {
+        currentIndex = slides.length - 1;
+        $scope.active = currentIndex;
+        setActive(currentIndex);
+        self.select(slides[slides.length - 1]);
+      } else {
+        currentIndex = index;
+        $scope.active = currentIndex;
+        setActive(currentIndex);
+        self.select(slides[index]);
+      }
+    } else if (currentIndex > index) {
+      currentIndex--;
+      $scope.active = currentIndex;
+    }
+
+    //clean the active value when no more slide
+    if (slides.length === 0) {
+      currentIndex = null;
+      $scope.active = null;
+    }
+  };
+
+  /* direction: "prev" or "next" */
+  self.select = $scope.select = function(nextSlide, direction) {
+    var nextIndex = findSlideIndex(nextSlide.slide);
+    //Decide direction if it's not given
+    if (direction === undefined) {
+      direction = nextIndex > self.getCurrentIndex() ? 'next' : 'prev';
+    }
+    //Prevent this user-triggered transition from occurring if there is already one in progress
+    if (nextSlide.slide.index !== currentIndex &&
+      !$scope.$currentTransition) {
+      goNext(nextSlide.slide, nextIndex, direction);
+    }
+  };
+
+  /* Allow outside people to call indexOf on slides array */
+  $scope.indexOfSlide = function(slide) {
+    return +slide.slide.index;
+  };
+
+  $scope.isActive = function(slide) {
+    return $scope.active === slide.slide.index;
+  };
+
+  $scope.isPrevDisabled = function() {
+    return $scope.active === 0 && $scope.noWrap();
+  };
+
+  $scope.isNextDisabled = function() {
+    return $scope.active === slides.length - 1 && $scope.noWrap();
+  };
+
+  $scope.pause = function() {
+    if (!$scope.noPause) {
+      isPlaying = false;
+      resetTimer();
+    }
+  };
+
+  $scope.play = function() {
+    if (!isPlaying) {
+      isPlaying = true;
+      restartTimer();
+    }
+  };
+
+  $element.on('mouseenter', $scope.pause);
+  $element.on('mouseleave', $scope.play);
+
+  $scope.$on('$destroy', function() {
+    destroyed = true;
+    resetTimer();
+  });
+
+  $scope.$watch('noTransition', function(noTransition) {
+    $animate.enabled($element, !noTransition);
+  });
+
+  $scope.$watch('interval', restartTimer);
+
+  $scope.$watchCollection('slides', resetTransition);
+
+  $scope.$watch('active', function(index) {
+    if (angular.isNumber(index) && currentIndex !== index) {
+      for (var i = 0; i < slides.length; i++) {
+        if (slides[i].slide.index === index) {
+          index = i;
+          break;
+        }
+      }
+
+      var slide = slides[index];
+      if (slide) {
+        setActive(index);
+        self.select(slides[index]);
+        currentIndex = index;
+      }
+    }
+  });
+
+  function getSlideByIndex(index) {
+    for (var i = 0, l = slides.length; i < l; ++i) {
+      if (slides[i].index === index) {
+        return slides[i];
+      }
+    }
+  }
+
+  function setActive(index) {
+    for (var i = 0; i < slides.length; i++) {
+      slides[i].slide.active = i === index;
+    }
+  }
+
+  function goNext(slide, index, direction) {
+    if (destroyed) {
+      return;
+    }
+
+    angular.extend(slide, {direction: direction});
+    angular.extend(slides[currentIndex].slide || {}, {direction: direction});
+    if ($animate.enabled($element) && !$scope.$currentTransition &&
+      slides[index].element && self.slides.length > 1) {
+      slides[index].element.data(SLIDE_DIRECTION, slide.direction);
+      var currentIdx = self.getCurrentIndex();
+
+      if (angular.isNumber(currentIdx) && slides[currentIdx].element) {
+        slides[currentIdx].element.data(SLIDE_DIRECTION, slide.direction);
+      }
+
+      $scope.$currentTransition = true;
+      $animate.on('addClass', slides[index].element, function(element, phase) {
+        if (phase === 'close') {
+          $scope.$currentTransition = null;
+          $animate.off('addClass', element);
+        }
+      });
+    }
+
+    $scope.active = slide.index;
+    currentIndex = slide.index;
+    setActive(index);
+
+    //every time you change slides, reset the timer
+    restartTimer();
+  }
+
+  function findSlideIndex(slide) {
+    for (var i = 0; i < slides.length; i++) {
+      if (slides[i].slide === slide) {
+        return i;
+      }
+    }
+  }
+
+  function resetTimer() {
+    if (currentInterval) {
+      $interval.cancel(currentInterval);
+      currentInterval = null;
+    }
+  }
+
+  function resetTransition(slides) {
+    if (!slides.length) {
+      $scope.$currentTransition = null;
+    }
+  }
+
+  function restartTimer() {
+    resetTimer();
+    var interval = +$scope.interval;
+    if (!isNaN(interval) && interval > 0) {
+      currentInterval = $interval(timerFn, interval);
+    }
+  }
+
+  function timerFn() {
+    var interval = +$scope.interval;
+    if (isPlaying && !isNaN(interval) && interval > 0 && slides.length) {
+      $scope.next();
+    } else {
+      $scope.pause();
+    }
+  }
+}])
+
+.directive('uibCarousel', function() {
+  return {
+    transclude: true,
+    controller: 'UibCarouselController',
+    controllerAs: 'carousel',
+    restrict: 'A',
+    templateUrl: function(element, attrs) {
+      return attrs.templateUrl || 'uib/template/carousel/carousel.html';
+    },
+    scope: {
+      active: '=',
+      interval: '=',
+      noTransition: '=',
+      noPause: '=',
+      noWrap: '&'
+    }
+  };
+})
+
+.directive('uibSlide', ['$animate', function($animate) {
+  return {
+    require: '^uibCarousel',
+    restrict: 'A',
+    transclude: true,
+    templateUrl: function(element, attrs) {
+      return attrs.templateUrl || 'uib/template/carousel/slide.html';
+    },
+    scope: {
+      actual: '=?',
+      index: '=?'
+    },
+    link: function (scope, element, attrs, carouselCtrl) {
+      element.addClass('item');
+      carouselCtrl.addSlide(scope, element);
+      //when the scope is destroyed then remove the slide from the current slides array
+      scope.$on('$destroy', function() {
+        carouselCtrl.removeSlide(scope);
+      });
+
+      scope.$watch('active', function(active) {
+        $animate[active ? 'addClass' : 'removeClass'](element, 'active');
+      });
+    }
+  };
+}])
+
+.animation('.item', ['$animateCss',
+function($animateCss) {
+  var SLIDE_DIRECTION = 'uib-slideDirection';
+
+  function removeClass(element, className, callback) {
+    element.removeClass(className);
+    if (callback) {
+      callback();
+    }
+  }
+
+  return {
+    beforeAddClass: function(element, className, done) {
+      if (className === 'active') {
+        var stopped = false;
+        var direction = element.data(SLIDE_DIRECTION);
+        var directionClass = direction === 'next' ? 'left' : 'right';
+        var removeClassFn = removeClass.bind(this, element,
+          directionClass + ' ' + direction, done);
+        element.addClass(direction);
+
+        $animateCss(element, {addClass: directionClass})
+          .start()
+          .done(removeClassFn);
+
+        return function() {
+          stopped = true;
+        };
+      }
+      done();
+    },
+    beforeRemoveClass: function (element, className, done) {
+      if (className === 'active') {
+        var stopped = false;
+        var direction = element.data(SLIDE_DIRECTION);
+        var directionClass = direction === 'next' ? 'left' : 'right';
+        var removeClassFn = removeClass.bind(this, element, directionClass, done);
+
+        $animateCss(element, {addClass: directionClass})
+          .start()
+          .done(removeClassFn);
+
+        return function() {
+          stopped = true;
+        };
+      }
+      done();
+    }
+  };
+}]);
+
+angular.module('ui.bootstrap.dateparser', [])
+
+.service('uibDateParser', ['$log', '$locale', 'dateFilter', 'orderByFilter', 'filterFilter', function($log, $locale, dateFilter, orderByFilter, filterFilter) {
+  // Pulled from https://github.com/mbostock/d3/blob/master/src/format/requote.js
+  var SPECIAL_CHARACTERS_REGEXP = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;
+
+  var localeId;
+  var formatCodeToRegex;
+
+  this.init = function() {
+    localeId = $locale.id;
+
+    this.parsers = {};
+    this.formatters = {};
+
+    formatCodeToRegex = [
+      {
+        key: 'yyyy',
+        regex: '\\d{4}',
+        apply: function(value) { this.year = +value; },
+        formatter: function(date) {
+          var _date = new Date();
+          _date.setFullYear(Math.abs(date.getFullYear()));
+          return dateFilter(_date, 'yyyy');
+        }
+      },
+      {
+        key: 'yy',
+        regex: '\\d{2}',
+        apply: function(value) { value = +value; this.year = value < 69 ? value + 2000 : value + 1900; },
+        formatter: function(date) {
+          var _date = new Date();
+          _date.setFullYear(Math.abs(date.getFullYear()));
+          return dateFilter(_date, 'yy');
+        }
+      },
+      {
+        key: 'y',
+        regex: '\\d{1,4}',
+        apply: function(value) { this.year = +value; },
+        formatter: function(date) {
+          var _date = new Date();
+          _date.setFullYear(Math.abs(date.getFullYear()));
+          return dateFilter(_date, 'y');
+        }
+      },
+      {
+        key: 'M!',
+        regex: '0?[1-9]|1[0-2]',
+        apply: function(value) { this.month = value - 1; },
+        formatter: function(date) {
+          var value = date.getMonth();
+          if (/^[0-9]$/.test(value)) {
+            return dateFilter(date, 'MM');
+          }
+
+          return dateFilter(date, 'M');
+        }
+      },
+      {
+        key: 'MMMM',
+        regex: $locale.DATETIME_FORMATS.MONTH.join('|'),
+        apply: function(value) { this.month = $locale.DATETIME_FORMATS.MONTH.indexOf(value); },
+        formatter: function(date) { return dateFilter(date, 'MMMM'); }
+      },
+      {
+        key: 'MMM',
+        regex: $locale.DATETIME_FORMATS.SHORTMONTH.join('|'),
+        apply: function(value) { this.month = $locale.DATETIME_FORMATS.SHORTMONTH.indexOf(value); },
+        formatter: function(date) { return dateFilter(date, 'MMM'); }
+      },
+      {
+        key: 'MM',
+        regex: '0[1-9]|1[0-2]',
+        apply: function(value) { this.month = value - 1; },
+        formatter: function(date) { return dateFilter(date, 'MM'); }
+      },
+      {
+        key: 'M',
+        regex: '[1-9]|1[0-2]',
+        apply: function(value) { this.month = value - 1; },
+        formatter: function(date) { return dateFilter(date, 'M'); }
+      },
+      {
+        key: 'd!',
+        regex: '[0-2]?[0-9]{1}|3[0-1]{1}',
+        apply: function(value) { this.date = +value; },
+        formatter: function(date) {
+          var value = date.getDate();
+          if (/^[1-9]$/.test(value)) {
+            return dateFilter(date, 'dd');
+          }
+
+          return dateFilter(date, 'd');
+        }
+      },
+      {
+        key: 'dd',
+        regex: '[0-2][0-9]{1}|3[0-1]{1}',
+        apply: function(value) { this.date = +value; },
+        formatter: function(date) { return dateFilter(date, 'dd'); }
+      },
+      {
+        key: 'd',
+        regex: '[1-2]?[0-9]{1}|3[0-1]{1}',
+        apply: function(value) { this.date = +value; },
+        formatter: function(date) { return dateFilter(date, 'd'); }
+      },
+      {
+        key: 'EEEE',
+        regex: $locale.DATETIME_FORMATS.DAY.join('|'),
+        formatter: function(date) { return dateFilter(date, 'EEEE'); }
+      },
+      {
+        key: 'EEE',
+        regex: $locale.DATETIME_FORMATS.SHORTDAY.join('|'),
+        formatter: function(date) { return dateFilter(date, 'EEE'); }
+      },
+      {
+        key: 'HH',
+        regex: '(?:0|1)[0-9]|2[0-3]',
+        apply: function(value) { this.hours = +value; },
+        formatter: function(date) { return dateFilter(date, 'HH'); }
+      },
+      {
+        key: 'hh',
+        regex: '0[0-9]|1[0-2]',
+        apply: function(value) { this.hours = +value; },
+        formatter: function(date) { return dateFilter(date, 'hh'); }
+      },
+      {
+        key: 'H',
+        regex: '1?[0-9]|2[0-3]',
+        apply: function(value) { this.hours = +value; },
+        formatter: function(date) { return dateFilter(date, 'H'); }
+      },
+      {
+        key: 'h',
+        regex: '[0-9]|1[0-2]',
+        apply: function(value) { this.hours = +value; },
+        formatter: function(date) { return dateFilter(date, 'h'); }
+      },
+      {
+        key: 'mm',
+        regex: '[0-5][0-9]',
+        apply: function(value) { this.minutes = +value; },
+        formatter: function(date) { return dateFilter(date, 'mm'); }
+      },
+      {
+        key: 'm',
+        regex: '[0-9]|[1-5][0-9]',
+        apply: function(value) { this.minutes = +value; },
+        formatter: function(date) { return dateFilter(date, 'm'); }
+      },
+      {
+        key: 'sss',
+        regex: '[0-9][0-9][0-9]',
+        apply: function(value) { this.milliseconds = +value; },
+        formatter: function(date) { return dateFilter(date, 'sss'); }
+      },
+      {
+        key: 'ss',
+        regex: '[0-5][0-9]',
+        apply: function(value) { this.seconds = +value; },
+        formatter: function(date) { return dateFilter(date, 'ss'); }
+      },
+      {
+        key: 's',
+        regex: '[0-9]|[1-5][0-9]',
+        apply: function(value) { this.seconds = +value; },
+        formatter: function(date) { return dateFilter(date, 's'); }
+      },
+      {
+        key: 'a',
+        regex: $locale.DATETIME_FORMATS.AMPMS.join('|'),
+        apply: function(value) {
+          if (this.hours === 12) {
+            this.hours = 0;
+          }
+
+          if (value === 'PM') {
+            this.hours += 12;
+          }
+        },
+        formatter: function(date) { return dateFilter(date, 'a'); }
+      },
+      {
+        key: 'Z',
+        regex: '[+-]\\d{4}',
+        apply: function(value) {
+          var matches = value.match(/([+-])(\d{2})(\d{2})/),
+            sign = matches[1],
+            hours = matches[2],
+            minutes = matches[3];
+          this.hours += toInt(sign + hours);
+          this.minutes += toInt(sign + minutes);
+        },
+        formatter: function(date) {
+          return dateFilter(date, 'Z');
+        }
+      },
+      {
+        key: 'ww',
+        regex: '[0-4][0-9]|5[0-3]',
+        formatter: function(date) { return dateFilter(date, 'ww'); }
+      },
+      {
+        key: 'w',
+        regex: '[0-9]|[1-4][0-9]|5[0-3]',
+        formatter: function(date) { return dateFilter(date, 'w'); }
+      },
+      {
+        key: 'GGGG',
+        regex: $locale.DATETIME_FORMATS.ERANAMES.join('|').replace(/\s/g, '\\s'),
+        formatter: function(date) { return dateFilter(date, 'GGGG'); }
+      },
+      {
+        key: 'GGG',
+        regex: $locale.DATETIME_FORMATS.ERAS.join('|'),
+        formatter: function(date) { return dateFilter(date, 'GGG'); }
+      },
+      {
+        key: 'GG',
+        regex: $locale.DATETIME_FORMATS.ERAS.join('|'),
+        formatter: function(date) { return dateFilter(date, 'GG'); }
+      },
+      {
+        key: 'G',
+        regex: $locale.DATETIME_FORMATS.ERAS.join('|'),
+        formatter: function(date) { return dateFilter(date, 'G'); }
+      }
+    ];
+
+    if (angular.version.major >= 1 && angular.version.minor > 4) {
+      formatCodeToRegex.push({
+        key: 'LLLL',
+        regex: $locale.DATETIME_FORMATS.STANDALONEMONTH.join('|'),
+        apply: function(value) { this.month = $locale.DATETIME_FORMATS.STANDALONEMONTH.indexOf(value); },
+        formatter: function(date) { return dateFilter(date, 'LLLL'); }
+      });
+    }
+  };
+
+  this.init();
+
+  function getFormatCodeToRegex(key) {
+    return filterFilter(formatCodeToRegex, {key: key}, true)[0];
+  }
+
+  this.getParser = function (key) {
+    var f = getFormatCodeToRegex(key);
+    return f && f.apply || null;
+  };
+
+  this.overrideParser = function (key, parser) {
+    var f = getFormatCodeToRegex(key);
+    if (f && angular.isFunction(parser)) {
+      this.parsers = {};
+      f.apply = parser;
+    }
+  }.bind(this);
+
+  function createParser(format) {
+    var map = [], regex = format.split('');
+
+    // check for literal values
+    var quoteIndex = format.indexOf('\'');
+    if (quoteIndex > -1) {
+      var inLiteral = false;
+      format = format.split('');
+      for (var i = quoteIndex; i < format.length; i++) {
+        if (inLiteral) {
+          if (format[i] === '\'') {
+            if (i + 1 < format.length && format[i+1] === '\'') { // escaped single quote
+              format[i+1] = '$';
+              regex[i+1] = '';
+            } else { // end of literal
+              regex[i] = '';
+              inLiteral = false;
+            }
+          }
+          format[i] = '$';
+        } else {
+          if (format[i] === '\'') { // start of literal
+            format[i] = '$';
+            regex[i] = '';
+            inLiteral = true;
+          }
+        }
+      }
+
+      format = format.join('');
+    }
+
+    angular.forEach(formatCodeToRegex, function(data) {
+      var index = format.indexOf(data.key);
+
+      if (index > -1) {
+        format = format.split('');
+
+        regex[index] = '(' + data.regex + ')';
+        format[index] = '$'; // Custom symbol to define consumed part of format
+        for (var i = index + 1, n = index + data.key.length; i < n; i++) {
+          regex[i] = '';
+          format[i] = '$';
+        }
+        format = format.join('');
+
+        map.push({
+          index: index,
+          key: data.key,
+          apply: data.apply,
+          matcher: data.regex
+        });
+      }
+    });
+
+    return {
+      regex: new RegExp('^' + regex.join('') + '$'),
+      map: orderByFilter(map, 'index')
+    };
+  }
+
+  function createFormatter(format) {
+    var formatters = [];
+    var i = 0;
+    var formatter, literalIdx;
+    while (i < format.length) {
+      if (angular.isNumber(literalIdx)) {
+        if (format.charAt(i) === '\'') {
+          if (i + 1 >= format.length || format.charAt(i + 1) !== '\'') {
+            formatters.push(constructLiteralFormatter(format, literalIdx, i));
+            literalIdx = null;
+          }
+        } else if (i === format.length) {
+          while (literalIdx < format.length) {
+            formatter = constructFormatterFromIdx(format, literalIdx);
+            formatters.push(formatter);
+            literalIdx = formatter.endIdx;
+          }
+        }
+
+        i++;
+        continue;
+      }
+
+      if (format.charAt(i) === '\'') {
+        literalIdx = i;
+        i++;
+        continue;
+      }
+
+      formatter = constructFormatterFromIdx(format, i);
+
+      formatters.push(formatter.parser);
+      i = formatter.endIdx;
+    }
+
+    return formatters;
+  }
+
+  function constructLiteralFormatter(format, literalIdx, endIdx) {
+    return function() {
+      return format.substr(literalIdx + 1, endIdx - literalIdx - 1);
+    };
+  }
+
+  function constructFormatterFromIdx(format, i) {
+    var currentPosStr = format.substr(i);
+    for (var j = 0; j < formatCodeToRegex.length; j++) {
+      if (new RegExp('^' + formatCodeToRegex[j].key).test(currentPosStr)) {
+        var data = formatCodeToRegex[j];
+        return {
+          endIdx: i + data.key.length,
+          parser: data.formatter
+        };
+      }
+    }
+
+    return {
+      endIdx: i + 1,
+      parser: function() {
+        return currentPosStr.charAt(0);
+      }
+    };
+  }
+
+  this.filter = function(date, format) {
+    if (!angular.isDate(date) || isNaN(date) || !format) {
+      return '';
+    }
+
+    format = $locale.DATETIME_FORMATS[format] || format;
+
+    if ($locale.id !== localeId) {
+      this.init();
+    }
+
+    if (!this.formatters[format]) {
+      this.formatters[format] = createFormatter(format);
+    }
+
+    var formatters = this.formatters[format];
+
+    return formatters.reduce(function(str, formatter) {
+      return str + formatter(date);
+    }, '');
+  };
+
+  this.parse = function(input, format, baseDate) {
+    if (!angular.isString(input) || !format) {
+      return input;
+    }
+
+    format = $locale.DATETIME_FORMATS[format] || format;
+    format = format.replace(SPECIAL_CHARACTERS_REGEXP, '\\$&');
+
+    if ($locale.id !== localeId) {
+      this.init();
+    }
+
+    if (!this.parsers[format]) {
+      this.parsers[format] = createParser(format, 'apply');
+    }
+
+    var parser = this.parsers[format],
+        regex = parser.regex,
+        map = parser.map,
+        results = input.match(regex),
+        tzOffset = false;
+    if (results && results.length) {
+      var fields, dt;
+      if (angular.isDate(baseDate) && !isNaN(baseDate.getTime())) {
+        fields = {
+          year: baseDate.getFullYear(),
+          month: baseDate.getMonth(),
+          date: baseDate.getDate(),
+          hours: baseDate.getHours(),
+          minutes: baseDate.getMinutes(),
+          seconds: baseDate.getSeconds(),
+          milliseconds: baseDate.getMilliseconds()
+        };
+      } else {
+        if (baseDate) {
+          $log.warn('dateparser:', 'baseDate is not a valid date');
+        }
+        fields = { year: 1900, month: 0, date: 1, hours: 0, minutes: 0, seconds: 0, milliseconds: 0 };
+      }
+
+      for (var i = 1, n = results.length; i < n; i++) {
+        var mapper = map[i - 1];
+        if (mapper.matcher === 'Z') {
+          tzOffset = true;
+        }
+
+        if (mapper.apply) {
+          mapper.apply.call(fields, results[i]);
+        }
+      }
+
+      var datesetter = tzOffset ? Date.prototype.setUTCFullYear :
+        Date.prototype.setFullYear;
+      var timesetter = tzOffset ? Date.prototype.setUTCHours :
+        Date.prototype.setHours;
+
+      if (isValid(fields.year, fields.month, fields.date)) {
+        if (angular.isDate(baseDate) && !isNaN(baseDate.getTime()) && !tzOffset) {
+          dt = new Date(baseDate);
+          datesetter.call(dt, fields.year, fields.month, fields.date);
+          timesetter.call(dt, fields.hours, fields.minutes,
+            fields.seconds, fields.milliseconds);
+        } else {
+          dt = new Date(0);
+          datesetter.call(dt, fields.year, fields.month, fields.date);
+          timesetter.call(dt, fields.hours || 0, fields.minutes || 0,
+            fields.seconds || 0, fields.milliseconds || 0);
+        }
+      }
+
+      return dt;
+    }
+  };
+
+  // Check if date is valid for specific month (and year for February).
+  // Month: 0 = Jan, 1 = Feb, etc
+  function isValid(year, month, date) {
+    if (date < 1) {
+      return false;
+    }
+
+    if (month === 1 && date > 28) {
+      return date === 29 && (year % 4 === 0 && year % 100 !== 0 || year % 400 === 0);
+    }
+
+    if (month === 3 || month === 5 || month === 8 || month === 10) {
+      return date < 31;
+    }
+
+    return true;
+  }
+
+  function toInt(str) {
+    return parseInt(str, 10);
+  }
+
+  this.toTimezone = toTimezone;
+  this.fromTimezone = fromTimezone;
+  this.timezoneToOffset = timezoneToOffset;
+  this.addDateMinutes = addDateMinutes;
+  this.convertTimezoneToLocal = convertTimezoneToLocal;
+
+  function toTimezone(date, timezone) {
+    return date && timezone ? convertTimezoneToLocal(date, timezone) : date;
+  }
+
+  function fromTimezone(date, timezone) {
+    return date && timezone ? convertTimezoneToLocal(date, timezone, true) : date;
+  }
+
+  //https://github.com/angular/angular.js/blob/622c42169699ec07fc6daaa19fe6d224e5d2f70e/src/Angular.js#L1207
+  function timezoneToOffset(timezone, fallback) {
+    timezone = timezone.replace(/:/g, '');
+    var requestedTimezoneOffset = Date.parse('Jan 01, 1970 00:00:00 ' + timezone) / 60000;
+    return isNaN(requestedTimezoneOffset) ? fallback : requestedTimezoneOffset;
+  }
+
+  function addDateMinutes(date, minutes) {
+    date = new Date(date.getTime());
+    date.setMinutes(date.getMinutes() + minutes);
+    return date;
+  }
+
+  function convertTimezoneToLocal(date, timezone, reverse) {
+    reverse = reverse ? -1 : 1;
+    var dateTimezoneOffset = date.getTimezoneOffset();
+    var timezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset);
+    return addDateMinutes(date, reverse * (timezoneOffset - dateTimezoneOffset));
+  }
+}]);
+
+// Avoiding use of ng-class as it creates a lot of watchers when a class is to be applied to
+// at most one element.
+angular.module('ui.bootstrap.isClass', [])
+.directive('uibIsClass', [
+         '$animate',
+function ($animate) {
+  //                    11111111          22222222
+  var ON_REGEXP = /^\s*([\s\S]+?)\s+on\s+([\s\S]+?)\s*$/;
+  //                    11111111           22222222
+  var IS_REGEXP = /^\s*([\s\S]+?)\s+for\s+([\s\S]+?)\s*$/;
+
+  var dataPerTracked = {};
+
+  return {
+    restrict: 'A',
+    compile: function(tElement, tAttrs) {
+      var linkedScopes = [];
+      var instances = [];
+      var expToData = {};
+      var lastActivated = null;
+      var onExpMatches = tAttrs.uibIsClass.match(ON_REGEXP);
+      var onExp = onExpMatches[2];
+      var expsStr = onExpMatches[1];
+      var exps = expsStr.split(',');
+
+      return linkFn;
+
+      function linkFn(scope, element, attrs) {
+        linkedScopes.push(scope);
+        instances.push({
+          scope: scope,
+          element: element
+        });
+
+        exps.forEach(function(exp, k) {
+          addForExp(exp, scope);
+        });
+
+        scope.$on('$destroy', removeScope);
+      }
+
+      function addForExp(exp, scope) {
+        var matches = exp.match(IS_REGEXP);
+        var clazz = scope.$eval(matches[1]);
+        var compareWithExp = matches[2];
+        var data = expToData[exp];
+        if (!data) {
+          var watchFn = function(compareWithVal) {
+            var newActivated = null;
+            instances.some(function(instance) {
+              var thisVal = instance.scope.$eval(onExp);
+              if (thisVal === compareWithVal) {
+                newActivated = instance;
+                return true;
+              }
+            });
+            if (data.lastActivated !== newActivated) {
+              if (data.lastActivated) {
+                $animate.removeClass(data.lastActivated.element, clazz);
+              }
+              if (newActivated) {
+                $animate.addClass(newActivated.element, clazz);
+              }
+              data.lastActivated = newActivated;
+            }
+          };
+          expToData[exp] = data = {
+            lastActivated: null,
+            scope: scope,
+            watchFn: watchFn,
+            compareWithExp: compareWithExp,
+            watcher: scope.$watch(compareWithExp, watchFn)
+          };
+        }
+        data.watchFn(scope.$eval(compareWithExp));
+      }
+
+      function removeScope(e) {
+        var removedScope = e.targetScope;
+        var index = linkedScopes.indexOf(removedScope);
+        linkedScopes.splice(index, 1);
+        instances.splice(index, 1);
+        if (linkedScopes.length) {
+          var newWatchScope = linkedScopes[0];
+          angular.forEach(expToData, function(data) {
+            if (data.scope === removedScope) {
+              data.watcher = newWatchScope.$watch(data.compareWithExp, data.watchFn);
+              data.scope = newWatchScope;
+            }
+          });
+        } else {
+          expToData = {};
+        }
+      }
+    }
+  };
+}]);
+angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootstrap.isClass'])
+
+.value('$datepickerSuppressError', false)
+
+.value('$datepickerLiteralWarning', true)
+
+.constant('uibDatepickerConfig', {
+  datepickerMode: 'day',
+  formatDay: 'dd',
+  formatMonth: 'MMMM',
+  formatYear: 'yyyy',
+  formatDayHeader: 'EEE',
+  formatDayTitle: 'MMMM yyyy',
+  formatMonthTitle: 'yyyy',
+  maxDate: null,
+  maxMode: 'year',
+  minDate: null,
+  minMode: 'day',
+  monthColumns: 3,
+  ngModelOptions: {},
+  shortcutPropagation: false,
+  showWeeks: true,
+  yearColumns: 5,
+  yearRows: 4
+})
+
+.controller('UibDatepickerController', ['$scope', '$element', '$attrs', '$parse', '$interpolate', '$locale', '$log', 'dateFilter', 'uibDatepickerConfig', '$datepickerLiteralWarning', '$datepickerSuppressError', 'uibDateParser',
+  function($scope, $element, $attrs, $parse, $interpolate, $locale, $log, dateFilter, datepickerConfig, $datepickerLiteralWarning, $datepickerSuppressError, dateParser) {
+  var self = this,
+      ngModelCtrl = { $setViewValue: angular.noop }, // nullModelCtrl;
+      ngModelOptions = {},
+      watchListeners = [];
+
+  $element.addClass('uib-datepicker');
+  $attrs.$set('role', 'application');
+
+  if (!$scope.datepickerOptions) {
+    $scope.datepickerOptions = {};
+  }
+
+  // Modes chain
+  this.modes = ['day', 'month', 'year'];
+
+  [
+    'customClass',
+    'dateDisabled',
+    'datepickerMode',
+    'formatDay',
+    'formatDayHeader',
+    'formatDayTitle',
+    'formatMonth',
+    'formatMonthTitle',
+    'formatYear',
+    'maxDate',
+    'maxMode',
+    'minDate',
+    'minMode',
+    'monthColumns',
+    'showWeeks',
+    'shortcutPropagation',
+    'startingDay',
+    'yearColumns',
+    'yearRows'
+  ].forEach(function(key) {
+    switch (key) {
+      case 'customClass':
+      case 'dateDisabled':
+        $scope[key] = $scope.datepickerOptions[key] || angular.noop;
+        break;
+      case 'datepickerMode':
+        $scope.datepickerMode = angular.isDefined($scope.datepickerOptions.datepickerMode) ?
+          $scope.datepickerOptions.datepickerMode : datepickerConfig.datepickerMode;
+        break;
+      case 'formatDay':
+      case 'formatDayHeader':
+      case 'formatDayTitle':
+      case 'formatMonth':
+      case 'formatMonthTitle':
+      case 'formatYear':
+        self[key] = angular.isDefined($scope.datepickerOptions[key]) ?
+          $interpolate($scope.datepickerOptions[key])($scope.$parent) :
+          datepickerConfig[key];
+        break;
+      case 'monthColumns':
+      case 'showWeeks':
+      case 'shortcutPropagation':
+      case 'yearColumns':
+      case 'yearRows':
+        self[key] = angular.isDefined($scope.datepickerOptions[key]) ?
+          $scope.datepickerOptions[key] : datepickerConfig[key];
+        break;
+      case 'startingDay':
+        if (angular.isDefined($scope.datepickerOptions.startingDay)) {
+          self.startingDay = $scope.datepickerOptions.startingDay;
+        } else if (angular.isNumber(datepickerConfig.startingDay)) {
+          self.startingDay = datepickerConfig.startingDay;
+        } else {
+          self.startingDay = ($locale.DATETIME_FORMATS.FIRSTDAYOFWEEK + 8) % 7;
+        }
+
+        break;
+      case 'maxDate':
+      case 'minDate':
+        $scope.$watch('datepickerOptions.' + key, function(value) {
+          if (value) {
+            if (angular.isDate(value)) {
+              self[key] = dateParser.fromTimezone(new Date(value), ngModelOptions.getOption('timezone'));
+            } else {
+              if ($datepickerLiteralWarning) {
+                $log.warn('Literal date support has been deprecated, please switch to date object usage');
+              }
+
+              self[key] = new Date(dateFilter(value, 'medium'));
+            }
+          } else {
+            self[key] = datepickerConfig[key] ?
+              dateParser.fromTimezone(new Date(datepickerConfig[key]), ngModelOptions.getOption('timezone')) :
+              null;
+          }
+
+          self.refreshView();
+        });
+
+        break;
+      case 'maxMode':
+      case 'minMode':
+        if ($scope.datepickerOptions[key]) {
+          $scope.$watch(function() { return $scope.datepickerOptions[key]; }, function(value) {
+            self[key] = $scope[key] = angular.isDefined(value) ? value : $scope.datepickerOptions[key];
+            if (key === 'minMode' && self.modes.indexOf($scope.datepickerOptions.datepickerMode) < self.modes.indexOf(self[key]) ||
+              key === 'maxMode' && self.modes.indexOf($scope.datepickerOptions.datepickerMode) > self.modes.indexOf(self[key])) {
+              $scope.datepickerMode = self[key];
+              $scope.datepickerOptions.datepickerMode = self[key];
+            }
+          });
+        } else {
+          self[key] = $scope[key] = datepickerConfig[key] || null;
+        }
+
+        break;
+    }
+  });
+
+  $scope.uniqueId = 'datepicker-' + $scope.$id + '-' + Math.floor(Math.random() * 10000);
+
+  $scope.disabled = angular.isDefined($attrs.disabled) || false;
+  if (angular.isDefined($attrs.ngDisabled)) {
+    watchListeners.push($scope.$parent.$watch($attrs.ngDisabled, function(disabled) {
+      $scope.disabled = disabled;
+      self.refreshView();
+    }));
+  }
+
+  $scope.isActive = function(dateObject) {
+    if (self.compare(dateObject.date, self.activeDate) === 0) {
+      $scope.activeDateId = dateObject.uid;
+      return true;
+    }
+    return false;
+  };
+
+  this.init = function(ngModelCtrl_) {
+    ngModelCtrl = ngModelCtrl_;
+    ngModelOptions = extractOptions(ngModelCtrl);
+
+    if ($scope.datepickerOptions.initDate) {
+      self.activeDate = dateParser.fromTimezone($scope.datepickerOptions.initDate, ngModelOptions.getOption('timezone')) || new Date();
+      $scope.$watch('datepickerOptions.initDate', function(initDate) {
+        if (initDate && (ngModelCtrl.$isEmpty(ngModelCtrl.$modelValue) || ngModelCtrl.$invalid)) {
+          self.activeDate = dateParser.fromTimezone(initDate, ngModelOptions.getOption('timezone'));
+          self.refreshView();
+        }
+      });
+    } else {
+      self.activeDate = new Date();
+    }
+
+    var date = ngModelCtrl.$modelValue ? new Date(ngModelCtrl.$modelValue) : new Date();
+    this.activeDate = !isNaN(date) ?
+      dateParser.fromTimezone(date, ngModelOptions.getOption('timezone')) :
+      dateParser.fromTimezone(new Date(), ngModelOptions.getOption('timezone'));
+
+    ngModelCtrl.$render = function() {
+      self.render();
+    };
+  };
+
+  this.render = function() {
+    if (ngModelCtrl.$viewValue) {
+      var date = new Date(ngModelCtrl.$viewValue),
+          isValid = !isNaN(date);
+
+      if (isValid) {
+        this.activeDate = dateParser.fromTimezone(date, ngModelOptions.getOption('timezone'));
+      } else if (!$datepickerSuppressError) {
+        $log.error('Datepicker directive: "ng-model" value must be a Date object');
+      }
+    }
+    this.refreshView();
+  };
+
+  this.refreshView = function() {
+    if (this.element) {
+      $scope.selectedDt = null;
+      this._refreshView();
+      if ($scope.activeDt) {
+        $scope.activeDateId = $scope.activeDt.uid;
+      }
+
+      var date = ngModelCtrl.$viewValue ? new Date(ngModelCtrl.$viewValue) : null;
+      date = dateParser.fromTimezone(date, ngModelOptions.getOption('timezone'));
+      ngModelCtrl.$setValidity('dateDisabled', !date ||
+        this.element && !this.isDisabled(date));
+    }
+  };
+
+  this.createDateObject = function(date, format) {
+    var model = ngModelCtrl.$viewValue ? new Date(ngModelCtrl.$viewValue) : null;
+    model = dateParser.fromTimezone(model, ngModelOptions.getOption('timezone'));
+    var today = new Date();
+    today = dateParser.fromTimezone(today, ngModelOptions.getOption('timezone'));
+    var time = this.compare(date, today);
+    var dt = {
+      date: date,
+      label: dateParser.filter(date, format),
+      selected: model && this.compare(date, model) === 0,
+      disabled: this.isDisabled(date),
+      past: time < 0,
+      current: time === 0,
+      future: time > 0,
+      customClass: this.customClass(date) || null
+    };
+
+    if (model && this.compare(date, model) === 0) {
+      $scope.selectedDt = dt;
+    }
+
+    if (self.activeDate && this.compare(dt.date, self.activeDate) === 0) {
+      $scope.activeDt = dt;
+    }
+
+    return dt;
+  };
+
+  this.isDisabled = function(date) {
+    return $scope.disabled ||
+      this.minDate && this.compare(date, this.minDate) < 0 ||
+      this.maxDate && this.compare(date, this.maxDate) > 0 ||
+      $scope.dateDisabled && $scope.dateDisabled({date: date, mode: $scope.datepickerMode});
+  };
+
+  this.customClass = function(date) {
+    return $scope.customClass({date: date, mode: $scope.datepickerMode});
+  };
+
+  // Split array into smaller arrays
+  this.split = function(arr, size) {
+    var arrays = [];
+    while (arr.length > 0) {
+      arrays.push(arr.splice(0, size));
+    }
+    return arrays;
+  };
+
+  $scope.select = function(date) {
+    if ($scope.datepickerMode === self.minMode) {
+      var dt = ngModelCtrl.$viewValue ? dateParser.fromTimezone(new Date(ngModelCtrl.$viewValue), ngModelOptions.getOption('timezone')) : new Date(0, 0, 0, 0, 0, 0, 0);
+      dt.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());
+      dt = dateParser.toTimezone(dt, ngModelOptions.getOption('timezone'));
+      ngModelCtrl.$setViewValue(dt);
+      ngModelCtrl.$render();
+    } else {
+      self.activeDate = date;
+      setMode(self.modes[self.modes.indexOf($scope.datepickerMode) - 1]);
+
+      $scope.$emit('uib:datepicker.mode');
+    }
+
+    $scope.$broadcast('uib:datepicker.focus');
+  };
+
+  $scope.move = function(direction) {
+    var year = self.activeDate.getFullYear() + direction * (self.step.years || 0),
+        month = self.activeDate.getMonth() + direction * (self.step.months || 0);
+    self.activeDate.setFullYear(year, month, 1);
+    self.refreshView();
+  };
+
+  $scope.toggleMode = function(direction) {
+    direction = direction || 1;
+
+    if ($scope.datepickerMode === self.maxMode && direction === 1 ||
+      $scope.datepickerMode === self.minMode && direction === -1) {
+      return;
+    }
+
+    setMode(self.modes[self.modes.indexOf($scope.datepickerMode) + direction]);
+
+    $scope.$emit('uib:datepicker.mode');
+  };
+
+  // Key event mapper
+  $scope.keys = { 13: 'enter', 32: 'space', 33: 'pageup', 34: 'pagedown', 35: 'end', 36: 'home', 37: 'left', 38: 'up', 39: 'right', 40: 'down' };
+
+  var focusElement = function() {
+    self.element[0].focus();
+  };
+
+  // Listen for focus requests from popup directive
+  $scope.$on('uib:datepicker.focus', focusElement);
+
+  $scope.keydown = function(evt) {
+    var key = $scope.keys[evt.which];
+
+    if (!key || evt.shiftKey || evt.altKey || $scope.disabled) {
+      return;
+    }
+
+    evt.preventDefault();
+    if (!self.shortcutPropagation) {
+      evt.stopPropagation();
+    }
+
+    if (key === 'enter' || key === 'space') {
+      if (self.isDisabled(self.activeDate)) {
+        return; // do nothing
+      }
+      $scope.select(self.activeDate);
+    } else if (evt.ctrlKey && (key === 'up' || key === 'down')) {
+      $scope.toggleMode(key === 'up' ? 1 : -1);
+    } else {
+      self.handleKeyDown(key, evt);
+      self.refreshView();
+    }
+  };
+
+  $element.on('keydown', function(evt) {
+    $scope.$apply(function() {
+      $scope.keydown(evt);
+    });
+  });
+
+  $scope.$on('$destroy', function() {
+    //Clear all watch listeners on destroy
+    while (watchListeners.length) {
+      watchListeners.shift()();
+    }
+  });
+
+  function setMode(mode) {
+    $scope.datepickerMode = mode;
+    $scope.datepickerOptions.datepickerMode = mode;
+  }
+
+  function extractOptions(ngModelCtrl) {
+    var ngModelOptions;
+
+    if (angular.version.minor < 6) { // in angular < 1.6 $options could be missing
+      // guarantee a value
+      ngModelOptions = ngModelCtrl.$options ||
+        $scope.datepickerOptions.ngModelOptions ||
+        datepickerConfig.ngModelOptions ||
+        {};
+
+      // mimic 1.6+ api
+      ngModelOptions.getOption = function (key) {
+        return ngModelOptions[key];
+      };
+    } else { // in angular >=1.6 $options is always present
+      // ng-model-options defaults timezone to null; don't let its precedence squash a non-null value
+      var timezone = ngModelCtrl.$options.getOption('timezone') ||
+        ($scope.datepickerOptions.ngModelOptions ? $scope.datepickerOptions.ngModelOptions.timezone : null) ||
+        (datepickerConfig.ngModelOptions ? datepickerConfig.ngModelOptions.timezone : null);
+
+      // values passed to createChild override existing values
+      ngModelOptions = ngModelCtrl.$options // start with a ModelOptions instance
+        .createChild(datepickerConfig.ngModelOptions) // lowest precedence
+        .createChild($scope.datepickerOptions.ngModelOptions)
+        .createChild(ngModelCtrl.$options) // highest precedence
+        .createChild({timezone: timezone}); // to keep from squashing a non-null value
+    }
+
+    return ngModelOptions;
+  }
+}])
+
+.controller('UibDaypickerController', ['$scope', '$element', 'dateFilter', function(scope, $element, dateFilter) {
+  var DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
+
+  this.step = { months: 1 };
+  this.element = $element;
+  function getDaysInMonth(year, month) {
+    return month === 1 && year % 4 === 0 &&
+      (year % 100 !== 0 || year % 400 === 0) ? 29 : DAYS_IN_MONTH[month];
+  }
+
+  this.init = function(ctrl) {
+    angular.extend(ctrl, this);
+    scope.showWeeks = ctrl.showWeeks;
+    ctrl.refreshView();
+  };
+
+  this.getDates = function(startDate, n) {
+    var dates = new Array(n), current = new Date(startDate), i = 0, date;
+    while (i < n) {
+      date = new Date(current);
+      dates[i++] = date;
+      current.setDate(current.getDate() + 1);
+    }
+    return dates;
+  };
+
+  this._refreshView = function() {
+    var year = this.activeDate.getFullYear(),
+      month = this.activeDate.getMonth(),
+      firstDayOfMonth = new Date(this.activeDate);
+
+    firstDayOfMonth.setFullYear(year, month, 1);
+
+    var difference = this.startingDay - firstDayOfMonth.getDay(),
+      numDisplayedFromPreviousMonth = difference > 0 ?
+        7 - difference : - difference,
+      firstDate = new Date(firstDayOfMonth);
+
+    if (numDisplayedFromPreviousMonth > 0) {
+      firstDate.setDate(-numDisplayedFromPreviousMonth + 1);
+    }
+
+    // 42 is the number of days on a six-week calendar
+    var days = this.getDates(firstDate, 42);
+    for (var i = 0; i < 42; i ++) {
+      days[i] = angular.extend(this.createDateObject(days[i], this.formatDay), {
+        secondary: days[i].getMonth() !== month,
+        uid: scope.uniqueId + '-' + i
+      });
+    }
+
+    scope.labels = new Array(7);
+    for (var j = 0; j < 7; j++) {
+      scope.labels[j] = {
+        abbr: dateFilter(days[j].date, this.formatDayHeader),
+        full: dateFilter(days[j].date, 'EEEE')
+      };
+    }
+
+    scope.title = dateFilter(this.activeDate, this.formatDayTitle);
+    scope.rows = this.split(days, 7);
+
+    if (scope.showWeeks) {
+      scope.weekNumbers = [];
+      var thursdayIndex = (4 + 7 - this.startingDay) % 7,
+          numWeeks = scope.rows.length;
+      for (var curWeek = 0; curWeek < numWeeks; curWeek++) {
+        scope.weekNumbers.push(
+          getISO8601WeekNumber(scope.rows[curWeek][thursdayIndex].date));
+      }
+    }
+  };
+
+  this.compare = function(date1, date2) {
+    var _date1 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate());
+    var _date2 = new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());
+    _date1.setFullYear(date1.getFullYear());
+    _date2.setFullYear(date2.getFullYear());
+    return _date1 - _date2;
+  };
+
+  function getISO8601WeekNumber(date) {
+    var checkDate = new Date(date);
+    checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); // Thursday
+    var time = checkDate.getTime();
+    checkDate.setMonth(0); // Compare with Jan 1
+    checkDate.setDate(1);
+    return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
+  }
+
+  this.handleKeyDown = function(key, evt) {
+    var date = this.activeDate.getDate();
+
+    if (key === 'left') {
+      date = date - 1;
+    } else if (key === 'up') {
+      date = date - 7;
+    } else if (key === 'right') {
+      date = date + 1;
+    } else if (key === 'down') {
+      date = date + 7;
+    } else if (key === 'pageup' || key === 'pagedown') {
+      var month = this.activeDate.getMonth() + (key === 'pageup' ? - 1 : 1);
+      this.activeDate.setMonth(month, 1);
+      date = Math.min(getDaysInMonth(this.activeDate.getFullYear(), this.activeDate.getMonth()), date);
+    } else if (key === 'home') {
+      date = 1;
+    } else if (key === 'end') {
+      date = getDaysInMonth(this.activeDate.getFullYear(), this.activeDate.getMonth());
+    }
+    this.activeDate.setDate(date);
+  };
+}])
+
+.controller('UibMonthpickerController', ['$scope', '$element', 'dateFilter', function(scope, $element, dateFilter) {
+  this.step = { years: 1 };
+  this.element = $element;
+
+  this.init = function(ctrl) {
+    angular.extend(ctrl, this);
+    ctrl.refreshView();
+  };
+
+  this._refreshView = function() {
+    var months = new Array(12),
+        year = this.activeDate.getFullYear(),
+        date;
+
+    for (var i = 0; i < 12; i++) {
+      date = new Date(this.activeDate);
+      date.setFullYear(year, i, 1);
+      months[i] = angular.extend(this.createDateObject(date, this.formatMonth), {
+        uid: scope.uniqueId + '-' + i
+      });
+    }
+
+    scope.title = dateFilter(this.activeDate, this.formatMonthTitle);
+    scope.rows = this.split(months, this.monthColumns);
+    scope.yearHeaderColspan = this.monthColumns > 3 ? this.monthColumns - 2 : 1;
+  };
+
+  this.compare = function(date1, date2) {
+    var _date1 = new Date(date1.getFullYear(), date1.getMonth());
+    var _date2 = new Date(date2.getFullYear(), date2.getMonth());
+    _date1.setFullYear(date1.getFullYear());
+    _date2.setFullYear(date2.getFullYear());
+    return _date1 - _date2;
+  };
+
+  this.handleKeyDown = function(key, evt) {
+    var date = this.activeDate.getMonth();
+
+    if (key === 'left') {
+      date = date - 1;
+    } else if (key === 'up') {
+      date = date - this.monthColumns;
+    } else if (key === 'right') {
+      date = date + 1;
+    } else if (key === 'down') {
+      date = date + this.monthColumns;
+    } else if (key === 'pageup' || key === 'pagedown') {
+      var year = this.activeDate.getFullYear() + (key === 'pageup' ? - 1 : 1);
+      this.activeDate.setFullYear(year);
+    } else if (key === 'home') {
+      date = 0;
+    } else if (key === 'end') {
+      date = 11;
+    }
+    this.activeDate.setMonth(date);
+  };
+}])
+
+.controller('UibYearpickerController', ['$scope', '$element', 'dateFilter', function(scope, $element, dateFilter) {
+  var columns, range;
+  this.element = $element;
+
+  function getStartingYear(year) {
+    return parseInt((year - 1) / range, 10) * range + 1;
+  }
+
+  this.yearpickerInit = function() {
+    columns = this.yearColumns;
+    range = this.yearRows * columns;
+    this.step = { years: range };
+  };
+
+  this._refreshView = function() {
+    var years = new Array(range), date;
+
+    for (var i = 0, start = getStartingYear(this.activeDate.getFullYear()); i < range; i++) {
+      date = new Date(this.activeDate);
+      date.setFullYear(start + i, 0, 1);
+      years[i] = angular.extend(this.createDateObject(date, this.formatYear), {
+        uid: scope.uniqueId + '-' + i
+      });
+    }
+
+    scope.title = [years[0].label, years[range - 1].label].join(' - ');
+    scope.rows = this.split(years, columns);
+    scope.columns = columns;
+  };
+
+  this.compare = function(date1, date2) {
+    return date1.getFullYear() - date2.getFullYear();
+  };
+
+  this.handleKeyDown = function(key, evt) {
+    var date = this.activeDate.getFullYear();
+
+    if (key === 'left') {
+      date = date - 1;
+    } else if (key === 'up') {
+      date = date - columns;
+    } else if (key === 'right') {
+      date = date + 1;
+    } else if (key === 'down') {
+      date = date + columns;
+    } else if (key === 'pageup' || key === 'pagedown') {
+      date += (key === 'pageup' ? - 1 : 1) * range;
+    } else if (key === 'home') {
+      date = getStartingYear(this.activeDate.getFullYear());
+    } else if (key === 'end') {
+      date = getStartingYear(this.activeDate.getFullYear()) + range - 1;
+    }
+    this.activeDate.setFullYear(date);
+  };
+}])
+
+.directive('uibDatepicker', function() {
+  return {
+    templateUrl: function(element, attrs) {
+      return attrs.templateUrl || 'uib/template/datepicker/datepicker.html';
+    },
+    scope: {
+      datepickerOptions: '=?'
+    },
+    require: ['uibDatepicker', '^ngModel'],
+    restrict: 'A',
+    controller: 'UibDatepickerController',
+    controllerAs: 'datepicker',
+    link: function(scope, element, attrs, ctrls) {
+      var datepickerCtrl = ctrls[0], ngModelCtrl = ctrls[1];
+
+      datepickerCtrl.init(ngModelCtrl);
+    }
+  };
+})
+
+.directive('uibDaypicker', function() {
+  return {
+    templateUrl: function(element, attrs) {
+      return attrs.templateUrl || 'uib/template/datepicker/day.html';
+    },
+    require: ['^uibDatepicker', 'uibDaypicker'],
+    restrict: 'A',
+    controller: 'UibDaypickerController',
+    link: function(scope, element, attrs, ctrls) {
+      var datepickerCtrl = ctrls[0],
+        daypickerCtrl = ctrls[1];
+
+      daypickerCtrl.init(datepickerCtrl);
+    }
+  };
+})
+
+.directive('uibMonthpicker', function() {
+  return {
+    templateUrl: function(element, attrs) {
+      return attrs.templateUrl || 'uib/template/datepicker/month.html';
+    },
+    require: ['^uibDatepicker', 'uibMonthpicker'],
+    restrict: 'A',
+    controller: 'UibMonthpickerController',
+    link: function(scope, element, attrs, ctrls) {
+      var datepickerCtrl = ctrls[0],
+        monthpickerCtrl = ctrls[1];
+
+      monthpickerCtrl.init(datepickerCtrl);
+    }
+  };
+})
+
+.directive('uibYearpicker', function() {
+  return {
+    templateUrl: function(element, attrs) {
+      return attrs.templateUrl || 'uib/template/datepicker/year.html';
+    },
+    require: ['^uibDatepicker', 'uibYearpicker'],
+    restrict: 'A',
+    controller: 'UibYearpickerController',
+    link: function(scope, element, attrs, ctrls) {
+      var ctrl = ctrls[0];
+      angular.extend(ctrl, ctrls[1]);
+      ctrl.yearpickerInit();
+
+      ctrl.refreshView();
+    }
+  };
+});
+
+angular.module('ui.bootstrap.position', [])
+
+/**
+ * A set of utility methods for working with the DOM.
+ * It is meant to be used where we need to absolute-position elements in
+ * relation to another element (this is the case for tooltips, popovers,
+ * typeahead suggestions etc.).
+ */
+  .factory('$uibPosition', ['$document', '$window', function($document, $window) {
+    /**
+     * Used by scrollbarWidth() function to cache scrollbar's width.
+     * Do not access this variable directly, use scrollbarWidth() instead.
+     */
+    var SCROLLBAR_WIDTH;
+    /**
+     * scrollbar on body and html element in IE and Edge overlay
+     * content and should be considered 0 width.
+     */
+    var BODY_SCROLLBAR_WIDTH;
+    var OVERFLOW_REGEX = {
+      normal: /(auto|scroll)/,
+      hidden: /(auto|scroll|hidden)/
+    };
+    var PLACEMENT_REGEX = {
+      auto: /\s?auto?\s?/i,
+      primary: /^(top|bottom|left|right)$/,
+      secondary: /^(top|bottom|left|right|center)$/,
+      vertical: /^(top|bottom)$/
+    };
+    var BODY_REGEX = /(HTML|BODY)/;
+
+    return {
+
+      /**
+       * Provides a raw DOM element from a jQuery/jQLite element.
+       *
+       * @param {element} elem - The element to convert.
+       *
+       * @returns {element} A HTML element.
+       */
+      getRawNode: function(elem) {
+        return elem.nodeName ? elem : elem[0] || elem;
+      },
+
+      /**
+       * Provides a parsed number for a style property.  Strips
+       * units and casts invalid numbers to 0.
+       *
+       * @param {string} value - The style value to parse.
+       *
+       * @returns {number} A valid number.
+       */
+      parseStyle: function(value) {
+        value = parseFloat(value);
+        return isFinite(value) ? value : 0;
+      },
+
+      /**
+       * Provides the closest positioned ancestor.
+       *
+       * @param {element} element - The element to get the offest parent for.
+       *
+       * @returns {element} The closest positioned ancestor.
+       */
+      offsetParent: function(elem) {
+        elem = this.getRawNode(elem);
+
+        var offsetParent = elem.offsetParent || $document[0].documentElement;
+
+        function isStaticPositioned(el) {
+          return ($window.getComputedStyle(el).position || 'static') === 'static';
+        }
+
+        while (offsetParent && offsetParent !== $document[0].documentElement && isStaticPositioned(offsetParent)) {
+          offsetParent = offsetParent.offsetParent;
+        }
+
+        return offsetParent || $document[0].documentElement;
+      },
+
+      /**
+       * Provides the scrollbar width, concept from TWBS measureScrollbar()
+       * function in https://github.com/twbs/bootstrap/blob/master/js/modal.js
+       * In IE and Edge, scollbar on body and html element overlay and should
+       * return a width of 0.
+       *
+       * @returns {number} The width of the browser scollbar.
+       */
+      scrollbarWidth: function(isBody) {
+        if (isBody) {
+          if (angular.isUndefined(BODY_SCROLLBAR_WIDTH)) {
+            var bodyElem = $document.find('body');
+            bodyElem.addClass('uib-position-body-scrollbar-measure');
+            BODY_SCROLLBAR_WIDTH = $window.innerWidth - bodyElem[0].clientWidth;
+            BODY_SCROLLBAR_WIDTH = isFinite(BODY_SCROLLBAR_WIDTH) ? BODY_SCROLLBAR_WIDTH : 0;
+            bodyElem.removeClass('uib-position-body-scrollbar-measure');
+          }
+          return BODY_SCROLLBAR_WIDTH;
+        }
+
+        if (angular.isUndefined(SCROLLBAR_WIDTH)) {
+          var scrollElem = angular.element('<div class="uib-position-scrollbar-measure"></div>');
+          $document.find('body').append(scrollElem);
+          SCROLLBAR_WIDTH = scrollElem[0].offsetWidth - scrollElem[0].clientWidth;
+          SCROLLBAR_WIDTH = isFinite(SCROLLBAR_WIDTH) ? SCROLLBAR_WIDTH : 0;
+          scrollElem.remove();
+        }
+
+        return SCROLLBAR_WIDTH;
+      },
+
+      /**
+       * Provides the padding required on an element to replace the scrollbar.
+       *
+       * @returns {object} An object with the following properties:
+       *   <ul>
+       *     <li>**scrollbarWidth**: the width of the scrollbar</li>
+       *     <li>**widthOverflow**: whether the the width is overflowing</li>
+       *     <li>**right**: the amount of right padding on the element needed to replace the scrollbar</li>
+       *     <li>**rightOriginal**: the amount of right padding currently on the element</li>
+       *     <li>**heightOverflow**: whether the the height is overflowing</li>
+       *     <li>**bottom**: the amount of bottom padding on the element needed to replace the scrollbar</li>
+       *     <li>**bottomOriginal**: the amount of bottom padding currently on the element</li>
+       *   </ul>
+       */
+      scrollbarPadding: function(elem) {
+        elem = this.getRawNode(elem);
+
+        var elemStyle = $window.getComputedStyle(elem);
+        var paddingRight = this.parseStyle(elemStyle.paddingRight);
+        var paddingBottom = this.parseStyle(elemStyle.paddingBottom);
+        var scrollParent = this.scrollParent(elem, false, true);
+        var scrollbarWidth = this.scrollbarWidth(BODY_REGEX.test(scrollParent.tagName));
+
+        return {
+          scrollbarWidth: scrollbarWidth,
+          widthOverflow: scrollParent.scrollWidth > scrollParent.clientWidth,
+          right: paddingRight + scrollbarWidth,
+          originalRight: paddingRight,
+          heightOverflow: scrollParent.scrollHeight > scrollParent.clientHeight,
+          bottom: paddingBottom + scrollbarWidth,
+          originalBottom: paddingBottom
+         };
+      },
+
+      /**
+       * Checks to see if the element is scrollable.
+       *
+       * @param {element} elem - The element to check.
+       * @param {boolean=} [includeHidden=false] - Should scroll style of 'hidden' be considered,
+       *   default is false.
+       *
+       * @returns {boolean} Whether the element is scrollable.
+       */
+      isScrollable: function(elem, includeHidden) {
+        elem = this.getRawNode(elem);
+
+        var overflowRegex = includeHidden ? OVERFLOW_REGEX.hidden : OVERFLOW_REGEX.normal;
+        var elemStyle = $window.getComputedStyle(elem);
+        return overflowRegex.test(elemStyle.overflow + elemStyle.overflowY + elemStyle.overflowX);
+      },
+
+      /**
+       * Provides the closest scrollable ancestor.
+       * A port of the jQuery UI scrollParent method:
+       * https://github.com/jquery/jquery-ui/blob/master/ui/scroll-parent.js
+       *
+       * @param {element} elem - The element to find the scroll parent of.
+       * @param {boolean=} [includeHidden=false] - Should scroll style of 'hidden' be considered,
+       *   default is false.
+       * @param {boolean=} [includeSelf=false] - Should the element being passed be
+       * included in the scrollable llokup.
+       *
+       * @returns {element} A HTML element.
+       */
+      scrollParent: function(elem, includeHidden, includeSelf) {
+        elem = this.getRawNode(elem);
+
+        var overflowRegex = includeHidden ? OVERFLOW_REGEX.hidden : OVERFLOW_REGEX.normal;
+        var documentEl = $document[0].documentElement;
+        var elemStyle = $window.getComputedStyle(elem);
+        if (includeSelf && overflowRegex.test(elemStyle.overflow + elemStyle.overflowY + elemStyle.overflowX)) {
+          return elem;
+        }
+        var excludeStatic = elemStyle.position === 'absolute';
+        var scrollParent = elem.parentElement || documentEl;
+
+        if (scrollParent === documentEl || elemStyle.position === 'fixed') {
+          return documentEl;
+        }
+
+        while (scrollParent.parentElement && scrollParent !== documentEl) {
+          var spStyle = $window.getComputedStyle(scrollParent);
+          if (excludeStatic && spStyle.position !== 'static') {
+            excludeStatic = false;
+          }
+
+          if (!excludeStatic && overflowRegex.test(spStyle.overflow + spStyle.overflowY + spStyle.overflowX)) {
+            break;
+          }
+          scrollParent = scrollParent.parentElement;
+        }
+
+        return scrollParent;
+      },
+
+      /**
+       * Provides read-only equivalent of jQuery's position function:
+       * http://api.jquery.com/position/ - distance to closest positioned
+       * ancestor.  Does not account for margins by default like jQuery position.
+       *
+       * @param {element} elem - The element to caclulate the position on.
+       * @param {boolean=} [includeMargins=false] - Should margins be accounted
+       * for, default is false.
+       *
+       * @returns {object} An object with the following properties:
+       *   <ul>
+       *     <li>**width**: the width of the element</li>
+       *     <li>**height**: the height of the element</li>
+       *     <li>**top**: distance to top edge of offset parent</li>
+       *     <li>**left**: distance to left edge of offset parent</li>
+       *   </ul>
+       */
+      position: function(elem, includeMagins) {
+        elem = this.getRawNode(elem);
+
+        var elemOffset = this.offset(elem);
+        if (includeMagins) {
+          var elemStyle = $window.getComputedStyle(elem);
+          elemOffset.top -= this.parseStyle(elemStyle.marginTop);
+          elemOffset.left -= this.parseStyle(elemStyle.marginLeft);
+        }
+        var parent = this.offsetParent(elem);
+        var parentOffset = {top: 0, left: 0};
+
+        if (parent !== $document[0].documentElement) {
+          parentOffset = this.offset(parent);
+          parentOffset.top += parent.clientTop - parent.scrollTop;
+          parentOffset.left += parent.clientLeft - parent.scrollLeft;
+        }
+
+        return {
+          width: Math.round(angular.isNumber(elemOffset.width) ? elemOffset.width : elem.offsetWidth),
+          height: Math.round(angular.isNumber(elemOffset.height) ? elemOffset.height : elem.offsetHeight),
+          top: Math.round(elemOffset.top - parentOffset.top),
+          left: Math.round(elemOffset.left - parentOffset.left)
+        };
+      },
+
+      /**
+       * Provides read-only equivalent of jQuery's offset function:
+       * http://api.jquery.com/offset/ - distance to viewport.  Does
+       * not account for borders, margins, or padding on the body
+       * element.
+       *
+       * @param {element} elem - The element to calculate the offset on.
+       *
+       * @returns {object} An object with the following properties:
+       *   <ul>
+       *     <li>**width**: the width of the element</li>
+       *     <li>**height**: the height of the element</li>
+       *     <li>**top**: distance to top edge of viewport</li>
+       *     <li>**right**: distance to bottom edge of viewport</li>
+       *   </ul>
+       */
+      offset: function(elem) {
+        elem = this.getRawNode(elem);
+
+        var elemBCR = elem.getBoundingClientRect();
+        return {
+          width: Math.round(angular.isNumber(elemBCR.width) ? elemBCR.width : elem.offsetWidth),
+          height: Math.round(angular.isNumber(elemBCR.height) ? elemBCR.height : elem.offsetHeight),
+          top: Math.round(elemBCR.top + ($window.pageYOffset || $document[0].documentElement.scrollTop)),
+          left: Math.round(elemBCR.left + ($window.pageXOffset || $document[0].documentElement.scrollLeft))
+        };
+      },
+
+      /**
+       * Provides offset distance to the closest scrollable ancestor
+       * or viewport.  Accounts for border and scrollbar width.
+       *
+       * Right and bottom dimensions represent the distance to the
+       * respective edge of the viewport element.  If the element
+       * edge extends beyond the viewport, a negative value will be
+       * reported.
+       *
+       * @param {element} elem - The element to get the viewport offset for.
+       * @param {boolean=} [useDocument=false] - Should the viewport be the document element instead
+       * of the first scrollable element, default is false.
+       * @param {boolean=} [includePadding=true] - Should the padding on the offset parent element
+       * be accounted for, default is true.
+       *
+       * @returns {object} An object with the following properties:
+       *   <ul>
+       *     <li>**top**: distance to the top content edge of viewport element</li>
+       *     <li>**bottom**: distance to the bottom content edge of viewport element</li>
+       *     <li>**left**: distance to the left content edge of viewport element</li>
+       *     <li>**right**: distance to the right content edge of viewport element</li>
+       *   </ul>
+       */
+      viewportOffset: function(elem, useDocument, includePadding) {
+        elem = this.getRawNode(elem);
+        includePadding = includePadding !== false ? true : false;
+
+        var elemBCR = elem.getBoundingClientRect();
+        var offsetBCR = {top: 0, left: 0, bottom: 0, right: 0};
+
+        var offsetParent = useDocument ? $document[0].documentElement : this.scrollParent(elem);
+        var offsetParentBCR = offsetParent.getBoundingClientRect();
+
+        offsetBCR.top = offsetParentBCR.top + offsetParent.clientTop;
+        offsetBCR.left = offsetParentBCR.left + offsetParent.clientLeft;
+        if (offsetParent === $document[0].documentElement) {
+          offsetBCR.top += $window.pageYOffset;
+          offsetBCR.left += $window.pageXOffset;
+        }
+        offsetBCR.bottom = offsetBCR.top + offsetParent.clientHeight;
+        offsetBCR.right = offsetBCR.left + offsetParent.clientWidth;
+
+        if (includePadding) {
+          var offsetParentStyle = $window.getComputedStyle(offsetParent);
+          offsetBCR.top += this.parseStyle(offsetParentStyle.paddingTop);
+          offsetBCR.bottom -= this.parseStyle(offsetParentStyle.paddingBottom);
+          offsetBCR.left += this.parseStyle(offsetParentStyle.paddingLeft);
+          offsetBCR.right -= this.parseStyle(offsetParentStyle.paddingRight);
+        }
+
+        return {
+          top: Math.round(elemBCR.top - offsetBCR.top),
+          bottom: Math.round(offsetBCR.bottom - elemBCR.bottom),
+          left: Math.round(elemBCR.left - offsetBCR.left),
+          right: Math.round(offsetBCR.right - elemBCR.right)
+        };
+      },
+
+      /**
+       * Provides an array of placement values parsed from a placement string.
+       * Along with the 'auto' indicator, supported placement strings are:
+       *   <ul>
+       *     <li>top: element on top, horizontally centered on host element.</li>
+       *     <li>top-left: element on top, left edge aligned with host element left edge.</li>
+       *     <li>top-right: element on top, lerightft edge aligned with host element right edge.</li>
+       *     <li>bottom: element on bottom, horizontally centered on host element.</li>
+       *     <li>bottom-left: element on bottom, left edge aligned with host element left edge.</li>
+       *     <li>bottom-right: element on bottom, right edge aligned with host element right edge.</li>
+       *     <li>left: element on left, vertically centered on host element.</li>
+       *     <li>left-top: element on left, top edge aligned with host element top edge.</li>
+       *     <li>left-bottom: element on left, bottom edge aligned with host element bottom edge.</li>
+       *     <li>right: element on right, vertically centered on host element.</li>
+       *     <li>right-top: element on right, top edge aligned with host element top edge.</li>
+       *     <li>right-bottom: element on right, bottom edge aligned with host element bottom edge.</li>
+       *   </ul>
+       * A placement string with an 'auto' indicator is expected to be
+       * space separated from the placement, i.e: 'auto bottom-left'  If
+       * the primary and secondary placement values do not match 'top,
+       * bottom, left, right' then 'top' will be the primary placement and
+       * 'center' will be the secondary placement.  If 'auto' is passed, true
+       * will be returned as the 3rd value of the array.
+       *
+       * @param {string} placement - The placement string to parse.
+       *
+       * @returns {array} An array with the following values
+       * <ul>
+       *   <li>**[0]**: The primary placement.</li>
+       *   <li>**[1]**: The secondary placement.</li>
+       *   <li>**[2]**: If auto is passed: true, else undefined.</li>
+       * </ul>
+       */
+      parsePlacement: function(placement) {
+        var autoPlace = PLACEMENT_REGEX.auto.test(placement);
+        if (autoPlace) {
+          placement = placement.replace(PLACEMENT_REGEX.auto, '');
+        }
+
+        placement = placement.split('-');
+
+        placement[0] = placement[0] || 'top';
+        if (!PLACEMENT_REGEX.primary.test(placement[0])) {
+          placement[0] = 'top';
+        }
+
+        placement[1] = placement[1] || 'center';
+        if (!PLACEMENT_REGEX.secondary.test(placement[1])) {
+          placement[1] = 'center';
+        }
+
+        if (autoPlace) {
+          placement[2] = true;
+        } else {
+          placement[2] = false;
+        }
+
+        return placement;
+      },
+
+      /**
+       * Provides coordinates for an element to be positioned relative to
+       * another element.  Passing 'auto' as part of the placement parameter
+       * will enable smart placement - where the element fits. i.e:
+       * 'auto left-top' will check to see if there is enough space to the left
+       * of the hostElem to fit the targetElem, if not place right (same for secondary
+       * top placement).  Available space is calculated using the viewportOffset
+       * function.
+       *
+       * @param {element} hostElem - The element to position against.
+       * @param {element} targetElem - The element to position.
+       * @param {string=} [placement=top] - The placement for the targetElem,
+       *   default is 'top'. 'center' is assumed as secondary placement for
+       *   'top', 'left', 'right', and 'bottom' placements.  Available placements are:
+       *   <ul>
+       *     <li>top</li>
+       *     <li>top-right</li>
+       *     <li>top-left</li>
+       *     <li>bottom</li>
+       *     <li>bottom-left</li>
+       *     <li>bottom-right</li>
+       *     <li>left</li>
+       *     <li>left-top</li>
+       *     <li>left-bottom</li>
+       *     <li>right</li>
+       *     <li>right-top</li>
+       *     <li>right-bottom</li>
+       *   </ul>
+       * @param {boolean=} [appendToBody=false] - Should the top and left values returned
+       *   be calculated from the body element, default is false.
+       *
+       * @returns {object} An object with the following properties:
+       *   <ul>
+       *     <li>**top**: Value for targetElem top.</li>
+       *     <li>**left**: Value for targetElem left.</li>
+       *     <li>**placement**: The resolved placement.</li>
+       *   </ul>
+       */
+      positionElements: function(hostElem, targetElem, placement, appendToBody) {
+        hostElem = this.getRawNode(hostElem);
+        targetElem = this.getRawNode(targetElem);
+
+        // need to read from prop to support tests.
+        var targetWidth = angular.isDefined(targetElem.offsetWidth) ? targetElem.offsetWidth : targetElem.prop('offsetWidth');
+        var targetHeight = angular.isDefined(targetElem.offsetHeight) ? targetElem.offsetHeight : targetElem.prop('offsetHeight');
+
+        placement = this.parsePlacement(placement);
+
+        var hostElemPos = appendToBody ? this.offset(hostElem) : this.position(hostElem);
+        var targetElemPos = {top: 0, left: 0, placement: ''};
+
+        if (placement[2]) {
+          var viewportOffset = this.viewportOffset(hostElem, appendToBody);
+
+          var targetElemStyle = $window.getComputedStyle(targetElem);
+          var adjustedSize = {
+            width: targetWidth + Math.round(Math.abs(this.parseStyle(targetElemStyle.marginLeft) + this.parseStyle(targetElemStyle.marginRight))),
+            height: targetHeight + Math.round(Math.abs(this.parseStyle(targetElemStyle.marginTop) + this.parseStyle(targetElemStyle.marginBottom)))
+          };
+
+          placement[0] = placement[0] === 'top' && adjustedSize.height > viewportOffset.top && adjustedSize.height <= viewportOffset.bottom ? 'bottom' :
+                         placement[0] === 'bottom' && adjustedSize.height > viewportOffset.bottom && adjustedSize.height <= viewportOffset.top ? 'top' :
+                         placement[0] === 'left' && adjustedSize.width > viewportOffset.left && adjustedSize.width <= viewportOffset.right ? 'right' :
+                         placement[0] === 'right' && adjustedSize.width > viewportOffset.right && adjustedSize.width <= viewportOffset.left ? 'left' :
+                         placement[0];
+
+          placement[1] = placement[1] === 'top' && adjustedSize.height - hostElemPos.height > viewportOffset.bottom && adjustedSize.height - hostElemPos.height <= viewportOffset.top ? 'bottom' :
+                         placement[1] === 'bottom' && adjustedSize.height - hostElemPos.height > viewportOffset.top && adjustedSize.height - hostElemPos.height <= viewportOffset.bottom ? 'top' :
+                         placement[1] === 'left' && adjustedSize.width - hostElemPos.width > viewportOffset.right && adjustedSize.width - hostElemPos.width <= viewportOffset.left ? 'right' :
+                         placement[1] === 'right' && adjustedSize.width - hostElemPos.width > viewportOffset.left && adjustedSize.width - hostElemPos.width <= viewportOffset.right ? 'left' :
+                         placement[1];
+
+          if (placement[1] === 'center') {
+            if (PLACEMENT_REGEX.vertical.test(placement[0])) {
+              var xOverflow = hostElemPos.width / 2 - targetWidth / 2;
+              if (viewportOffset.left + xOverflow < 0 && adjustedSize.width - hostElemPos.width <= viewportOffset.right) {
+                placement[1] = 'left';
+              } else if (viewportOffset.right + xOverflow < 0 && adjustedSize.width - hostElemPos.width <= viewportOffset.left) {
+                placement[1] = 'right';
+              }
+            } else {
+              var yOverflow = hostElemPos.height / 2 - adjustedSize.height / 2;
+              if (viewportOffset.top + yOverflow < 0 && adjustedSize.height - hostElemPos.height <= viewportOffset.bottom) {
+                placement[1] = 'top';
+              } else if (viewportOffset.bottom + yOverflow < 0 && adjustedSize.height - hostElemPos.height <= viewportOffset.top) {
+                placement[1] = 'bottom';
+              }
+            }
+          }
+        }
+
+        switch (placement[0]) {
+          case 'top':
+            targetElemPos.top = hostElemPos.top - targetHeight;
+            break;
+          case 'bottom':
+            targetElemPos.top = hostElemPos.top + hostElemPos.height;
+            break;
+          case 'left':
+            targetElemPos.left = hostElemPos.left - targetWidth;
+            break;
+          case 'right':
+            targetElemPos.left = hostElemPos.left + hostElemPos.width;
+            break;
+        }
+
+        switch (placement[1]) {
+          case 'top':
+            targetElemPos.top = hostElemPos.top;
+            break;
+          case 'bottom':
+            targetElemPos.top = hostElemPos.top + hostElemPos.height - targetHeight;
+            break;
+          case 'left':
+            targetElemPos.left = hostElemPos.left;
+            break;
+          case 'right':
+            targetElemPos.left = hostElemPos.left + hostElemPos.width - targetWidth;
+            break;
+          case 'center':
+            if (PLACEMENT_REGEX.vertical.test(placement[0])) {
+              targetElemPos.left = hostElemPos.left + hostElemPos.width / 2 - targetWidth / 2;
+            } else {
+              targetElemPos.top = hostElemPos.top + hostElemPos.height / 2 - targetHeight / 2;
+            }
+            break;
+        }
+
+        targetElemPos.top = Math.round(targetElemPos.top);
+        targetElemPos.left = Math.round(targetElemPos.left);
+        targetElemPos.placement = placement[1] === 'center' ? placement[0] : placement[0] + '-' + placement[1];
+
+        return targetElemPos;
+      },
+
+      /**
+       * Provides a way to adjust the top positioning after first
+       * render to correctly align element to top after content
+       * rendering causes resized element height
+       *
+       * @param {array} placementClasses - The array of strings of classes
+       * element should have.
+       * @param {object} containerPosition - The object with container
+       * position information
+       * @param {number} initialHeight - The initial height for the elem.
+       * @param {number} currentHeight - The current height for the elem.
+       */
+      adjustTop: function(placementClasses, containerPosition, initialHeight, currentHeight) {
+        if (placementClasses.indexOf('top') !== -1 && initialHeight !== currentHeight) {
+          return {
+            top: containerPosition.top - currentHeight + 'px'
+          };
+        }
+      },
+
+      /**
+       * Provides a way for positioning tooltip & dropdown
+       * arrows when using placement options beyond the standard
+       * left, right, top, or bottom.
+       *
+       * @param {element} elem - The tooltip/dropdown element.
+       * @param {string} placement - The placement for the elem.
+       */
+      positionArrow: function(elem, placement) {
+        elem = this.getRawNode(elem);
+
+        var innerElem = elem.querySelector('.tooltip-inner, .popover-inner');
+        if (!innerElem) {
+          return;
+        }
+
+        var isTooltip = angular.element(innerElem).hasClass('tooltip-inner');
+
+        var arrowElem = isTooltip ? elem.querySelector('.tooltip-arrow') : elem.querySelector('.arrow');
+        if (!arrowElem) {
+          return;
+        }
+
+        var arrowCss = {
+          top: '',
+          bottom: '',
+          left: '',
+          right: ''
+        };
+
+        placement = this.parsePlacement(placement);
+        if (placement[1] === 'center') {
+          // no adjustment necessary - just reset styles
+          angular.element(arrowElem).css(arrowCss);
+          return;
+        }
+
+        var borderProp = 'border-' + placement[0] + '-width';
+        var borderWidth = $window.getComputedStyle(arrowElem)[borderProp];
+
+        var borderRadiusProp = 'border-';
+        if (PLACEMENT_REGEX.vertical.test(placement[0])) {
+          borderRadiusProp += placement[0] + '-' + placement[1];
+        } else {
+          borderRadiusProp += placement[1] + '-' + placement[0];
+        }
+        borderRadiusProp += '-radius';
+        var borderRadius = $window.getComputedStyle(isTooltip ? innerElem : elem)[borderRadiusProp];
+
+        switch (placement[0]) {
+          case 'top':
+            arrowCss.bottom = isTooltip ? '0' : '-' + borderWidth;
+            break;
+          case 'bottom':
+            arrowCss.top = isTooltip ? '0' : '-' + borderWidth;
+            break;
+          case 'left':
+            arrowCss.right = isTooltip ? '0' : '-' + borderWidth;
+            break;
+          case 'right':
+            arrowCss.left = isTooltip ? '0' : '-' + borderWidth;
+            break;
+        }
+
+        arrowCss[placement[1]] = borderRadius;
+
+        angular.element(arrowElem).css(arrowCss);
+      }
+    };
+  }]);
+
+angular.module('ui.bootstrap.datepickerPopup', ['ui.bootstrap.datepicker', 'ui.bootstrap.position'])
+
+.value('$datepickerPopupLiteralWarning', true)
+
+.constant('uibDatepickerPopupConfig', {
+  altInputFormats: [],
+  appendToBody: false,
+  clearText: 'Clear',
+  closeOnDateSelection: true,
+  closeText: 'Done',
+  currentText: 'Today',
+  datepickerPopup: 'yyyy-MM-dd',
+  datepickerPopupTemplateUrl: 'uib/template/datepickerPopup/popup.html',
+  datepickerTemplateUrl: 'uib/template/datepicker/datepicker.html',
+  html5Types: {
+    date: 'yyyy-MM-dd',
+    'datetime-local': 'yyyy-MM-ddTHH:mm:ss.sss',
+    'month': 'yyyy-MM'
+  },
+  onOpenFocus: true,
+  showButtonBar: true,
+  placement: 'auto bottom-left'
+})
+
+.controller('UibDatepickerPopupController', ['$scope', '$element', '$attrs', '$compile', '$log', '$parse', '$window', '$document', '$rootScope', '$uibPosition', 'dateFilter', 'uibDateParser', 'uibDatepickerPopupConfig', '$timeout', 'uibDatepickerConfig', '$datepickerPopupLiteralWarning',
+function($scope, $element, $attrs, $compile, $log, $parse, $window, $document, $rootScope, $position, dateFilter, dateParser, datepickerPopupConfig, $timeout, datepickerConfig, $datepickerPopupLiteralWarning) {
+  var cache = {},
+    isHtml5DateInput = false;
+  var dateFormat, closeOnDateSelection, appendToBody, onOpenFocus,
+    datepickerPopupTemplateUrl, datepickerTemplateUrl, popupEl, datepickerEl, scrollParentEl,
+    ngModel, ngModelOptions, $popup, altInputFormats, watchListeners = [];
+
+  this.init = function(_ngModel_) {
+    ngModel = _ngModel_;
+    ngModelOptions = extractOptions(ngModel);
+    closeOnDateSelection = angular.isDefined($attrs.closeOnDateSelection) ?
+      $scope.$parent.$eval($attrs.closeOnDateSelection) :
+      datepickerPopupConfig.closeOnDateSelection;
+    appendToBody = angular.isDefined($attrs.datepickerAppendToBody) ?
+      $scope.$parent.$eval($attrs.datepickerAppendToBody) :
+      datepickerPopupConfig.appendToBody;
+    onOpenFocus = angular.isDefined($attrs.onOpenFocus) ?
+      $scope.$parent.$eval($attrs.onOpenFocus) : datepickerPopupConfig.onOpenFocus;
+    datepickerPopupTemplateUrl = angular.isDefined($attrs.datepickerPopupTemplateUrl) ?
+      $attrs.datepickerPopupTemplateUrl :
+      datepickerPopupConfig.datepickerPopupTemplateUrl;
+    datepickerTemplateUrl = angular.isDefined($attrs.datepickerTemplateUrl) ?
+      $attrs.datepickerTemplateUrl : datepickerPopupConfig.datepickerTemplateUrl;
+    altInputFormats = angular.isDefined($attrs.altInputFormats) ?
+      $scope.$parent.$eval($attrs.altInputFormats) :
+      datepickerPopupConfig.altInputFormats;
+
+    $scope.showButtonBar = angular.isDefined($attrs.showButtonBar) ?
+      $scope.$parent.$eval($attrs.showButtonBar) :
+      datepickerPopupConfig.showButtonBar;
+
+    if (datepickerPopupConfig.html5Types[$attrs.type]) {
+      dateFormat = datepickerPopupConfig.html5Types[$attrs.type];
+      isHtml5DateInput = true;
+    } else {
+      dateFormat = $attrs.uibDatepickerPopup || datepickerPopupConfig.datepickerPopup;
+      $attrs.$observe('uibDatepickerPopup', function(value, oldValue) {
+        var newDateFormat = value || datepickerPopupConfig.datepickerPopup;
+        // Invalidate the $modelValue to ensure that formatters re-run
+        // FIXME: Refactor when PR is merged: https://github.com/angular/angular.js/pull/10764
+        if (newDateFormat !== dateFormat) {
+          dateFormat = newDateFormat;
+          ngModel.$modelValue = null;
+
+          if (!dateFormat) {
+            throw new Error('uibDatepickerPopup must have a date format specified.');
+          }
+        }
+      });
+    }
+
+    if (!dateFormat) {
+      throw new Error('uibDatepickerPopup must have a date format specified.');
+    }
+
+    if (isHtml5DateInput && $attrs.uibDatepickerPopup) {
+      throw new Error('HTML5 date input types do not support custom formats.');
+    }
+
+    // popup element used to display calendar
+    popupEl = angular.element('<div uib-datepicker-popup-wrap><div uib-datepicker></div></div>');
+
+    popupEl.attr({
+      'ng-model': 'date',
+      'ng-change': 'dateSelection(date)',
+      'template-url': datepickerPopupTemplateUrl
+    });
+
+    // datepicker element
+    datepickerEl = angular.element(popupEl.children()[0]);
+    datepickerEl.attr('template-url', datepickerTemplateUrl);
+
+    if (!$scope.datepickerOptions) {
+      $scope.datepickerOptions = {};
+    }
+
+    if (isHtml5DateInput) {
+      if ($attrs.type === 'month') {
+        $scope.datepickerOptions.datepickerMode = 'month';
+        $scope.datepickerOptions.minMode = 'month';
+      }
+    }
+
+    datepickerEl.attr('datepicker-options', 'datepickerOptions');
+
+    if (!isHtml5DateInput) {
+      // Internal API to maintain the correct ng-invalid-[key] class
+      ngModel.$$parserName = 'date';
+      ngModel.$validators.date = validator;
+      ngModel.$parsers.unshift(parseDate);
+      ngModel.$formatters.push(function(value) {
+        if (ngModel.$isEmpty(value)) {
+          $scope.date = value;
+          return value;
+        }
+
+        if (angular.isNumber(value)) {
+          value = new Date(value);
+        }
+
+        $scope.date = dateParser.fromTimezone(value, ngModelOptions.getOption('timezone'));
+
+        return dateParser.filter($scope.date, dateFormat);
+      });
+    } else {
+      ngModel.$formatters.push(function(value) {
+        $scope.date = dateParser.fromTimezone(value, ngModelOptions.getOption('timezone'));
+        return value;
+      });
+    }
+
+    // Detect changes in the view from the text box
+    ngModel.$viewChangeListeners.push(function() {
+      $scope.date = parseDateString(ngModel.$viewValue);
+    });
+
+    $element.on('keydown', inputKeydownBind);
+
+    $popup = $compile(popupEl)($scope);
+    // Prevent jQuery cache memory leak (template is now redundant after linking)
+    popupEl.remove();
+
+    if (appendToBody) {
+      $document.find('body').append($popup);
+    } else {
+      $element.after($popup);
+    }
+
+    $scope.$on('$destroy', function() {
+      if ($scope.isOpen === true) {
+        if (!$rootScope.$$phase) {
+          $scope.$apply(function() {
+            $scope.isOpen = false;
+          });
+        }
+      }
+
+      $popup.remove();
+      $element.off('keydown', inputKeydownBind);
+      $document.off('click', documentClickBind);
+      if (scrollParentEl) {
+        scrollParentEl.off('scroll', positionPopup);
+      }
+      angular.element($window).off('resize', positionPopup);
+
+      //Clear all watch listeners on destroy
+      while (watchListeners.length) {
+        watchListeners.shift()();
+      }
+    });
+  };
+
+  $scope.getText = function(key) {
+    return $scope[key + 'Text'] || datepickerPopupConfig[key + 'Text'];
+  };
+
+  $scope.isDisabled = function(date) {
+    if (date === 'today') {
+      date = dateParser.fromTimezone(new Date(), ngModelOptions.getOption('timezone'));
+    }
+
+    var dates = {};
+    angular.forEach(['minDate', 'maxDate'], function(key) {
+      if (!$scope.datepickerOptions[key]) {
+        dates[key] = null;
+      } else if (angular.isDate($scope.datepickerOptions[key])) {
+        dates[key] = new Date($scope.datepickerOptions[key]);
+      } else {
+        if ($datepickerPopupLiteralWarning) {
+          $log.warn('Literal date support has been deprecated, please switch to date object usage');
+        }
+
+        dates[key] = new Date(dateFilter($scope.datepickerOptions[key], 'medium'));
+      }
+    });
+
+    return $scope.datepickerOptions &&
+      dates.minDate && $scope.compare(date, dates.minDate) < 0 ||
+      dates.maxDate && $scope.compare(date, dates.maxDate) > 0;
+  };
+
+  $scope.compare = function(date1, date2) {
+    return new Date(date1.getFullYear(), date1.getMonth(), date1.getDate()) - new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());
+  };
+
+  // Inner change
+  $scope.dateSelection = function(dt) {
+    $scope.date = dt;
+    var date = $scope.date ? dateParser.filter($scope.date, dateFormat) : null; // Setting to NULL is necessary for form validators to function
+    $element.val(date);
+    ngModel.$setViewValue(date);
+
+    if (closeOnDateSelection) {
+      $scope.isOpen = false;
+      $element[0].focus();
+    }
+  };
+
+  $scope.keydown = function(evt) {
+    if (evt.which === 27) {
+      evt.stopPropagation();
+      $scope.isOpen = false;
+      $element[0].focus();
+    }
+  };
+
+  $scope.select = function(date, evt) {
+    evt.stopPropagation();
+
+    if (date === 'today') {
+      var today = new Date();
+      if (angular.isDate($scope.date)) {
+        date = new Date($scope.date);
+        date.setFullYear(today.getFullYear(), today.getMonth(), today.getDate());
+      } else {
+        date = dateParser.fromTimezone(today, ngModelOptions.getOption('timezone'));
+        date.setHours(0, 0, 0, 0);
+      }
+    }
+    $scope.dateSelection(date);
+  };
+
+  $scope.close = function(evt) {
+    evt.stopPropagation();
+
+    $scope.isOpen = false;
+    $element[0].focus();
+  };
+
+  $scope.disabled = angular.isDefined($attrs.disabled) || false;
+  if ($attrs.ngDisabled) {
+    watchListeners.push($scope.$parent.$watch($parse($attrs.ngDisabled), function(disabled) {
+      $scope.disabled = disabled;
+    }));
+  }
+
+  $scope.$watch('isOpen', function(value) {
+    if (value) {
+      if (!$scope.disabled) {
+        $timeout(function() {
+          positionPopup();
+
+          if (onOpenFocus) {
+            $scope.$broadcast('uib:datepicker.focus');
+          }
+
+          $document.on('click', documentClickBind);
+
+          var placement = $attrs.popupPlacement ? $attrs.popupPlacement : datepickerPopupConfig.placement;
+          if (appendToBody || $position.parsePlacement(placement)[2]) {
+            scrollParentEl = scrollParentEl || angular.element($position.scrollParent($element));
+            if (scrollParentEl) {
+              scrollParentEl.on('scroll', positionPopup);
+            }
+          } else {
+            scrollParentEl = null;
+          }
+
+          angular.element($window).on('resize', positionPopup);
+        }, 0, false);
+      } else {
+        $scope.isOpen = false;
+      }
+    } else {
+      $document.off('click', documentClickBind);
+      if (scrollParentEl) {
+        scrollParentEl.off('scroll', positionPopup);
+      }
+      angular.element($window).off('resize', positionPopup);
+    }
+  });
+
+  function cameltoDash(string) {
+    return string.replace(/([A-Z])/g, function($1) { return '-' + $1.toLowerCase(); });
+  }
+
+  function parseDateString(viewValue) {
+    var date = dateParser.parse(viewValue, dateFormat, $scope.date);
+    if (isNaN(date)) {
+      for (var i = 0; i < altInputFormats.length; i++) {
+        date = dateParser.parse(viewValue, altInputFormats[i], $scope.date);
+        if (!isNaN(date)) {
+          return date;
+        }
+      }
+    }
+    return date;
+  }
+
+  function parseDate(viewValue) {
+    if (angular.isNumber(viewValue)) {
+      // presumably timestamp to date object
+      viewValue = new Date(viewValue);
+    }
+
+    if (!viewValue) {
+      return null;
+    }
+
+    if (angular.isDate(viewValue) && !isNaN(viewValue)) {
+      return viewValue;
+    }
+
+    if (angular.isString(viewValue)) {
+      var date = parseDateString(viewValue);
+      if (!isNaN(date)) {
+        return dateParser.toTimezone(date, ngModelOptions.getOption('timezone'));
+      }
+    }
+
+    return ngModelOptions.getOption('allowInvalid') ? viewValue : undefined;
+  }
+
+  function validator(modelValue, viewValue) {
+    var value = modelValue || viewValue;
+
+    if (!$attrs.ngRequired && !value) {
+      return true;
+    }
+
+    if (angular.isNumber(value)) {
+      value = new Date(value);
+    }
+
+    if (!value) {
+      return true;
+    }
+
+    if (angular.isDate(value) && !isNaN(value)) {
+      return true;
+    }
+
+    if (angular.isString(value)) {
+      return !isNaN(parseDateString(value));
+    }
+
+    return false;
+  }
+
+  function documentClickBind(event) {
+    if (!$scope.isOpen && $scope.disabled) {
+      return;
+    }
+
+    var popup = $popup[0];
+    var dpContainsTarget = $element[0].contains(event.target);
+    // The popup node may not be an element node
+    // In some browsers (IE) only element nodes have the 'contains' function
+    var popupContainsTarget = popup.contains !== undefined && popup.contains(event.target);
+    if ($scope.isOpen && !(dpContainsTarget || popupContainsTarget)) {
+      $scope.$apply(function() {
+        $scope.isOpen = false;
+      });
+    }
+  }
+
+  function inputKeydownBind(evt) {
+    if (evt.which === 27 && $scope.isOpen) {
+      evt.preventDefault();
+      evt.stopPropagation();
+      $scope.$apply(function() {
+        $scope.isOpen = false;
+      });
+      $element[0].focus();
+    } else if (evt.which === 40 && !$scope.isOpen) {
+      evt.preventDefault();
+      evt.stopPropagation();
+      $scope.$apply(function() {
+        $scope.isOpen = true;
+      });
+    }
+  }
+
+  function positionPopup() {
+    if ($scope.isOpen) {
+      var dpElement = angular.element($popup[0].querySelector('.uib-datepicker-popup'));
+      var placement = $attrs.popupPlacement ? $attrs.popupPlacement : datepickerPopupConfig.placement;
+      var position = $position.positionElements($element, dpElement, placement, appendToBody);
+      dpElement.css({top: position.top + 'px', left: position.left + 'px'});
+      if (dpElement.hasClass('uib-position-measure')) {
+        dpElement.removeClass('uib-position-measure');
+      }
+    }
+  }
+
+  function extractOptions(ngModelCtrl) {
+    var ngModelOptions;
+
+    if (angular.version.minor < 6) { // in angular < 1.6 $options could be missing
+      // guarantee a value
+      ngModelOptions = angular.isObject(ngModelCtrl.$options) ?
+        ngModelCtrl.$options :
+        {
+          timezone: null
+        };
+
+      // mimic 1.6+ api
+      ngModelOptions.getOption = function (key) {
+        return ngModelOptions[key];
+      };
+    } else { // in angular >=1.6 $options is always present
+      ngModelOptions = ngModelCtrl.$options;
+    }
+
+    return ngModelOptions;
+  }
+
+  $scope.$on('uib:datepicker.mode', function() {
+    $timeout(positionPopup, 0, false);
+  });
+}])
+
+.directive('uibDatepickerPopup', function() {
+  return {
+    require: ['ngModel', 'uibDatepickerPopup'],
+    controller: 'UibDatepickerPopupController',
+    scope: {
+      datepickerOptions: '=?',
+      isOpen: '=?',
+      currentText: '@',
+      clearText: '@',
+      closeText: '@'
+    },
+    link: function(scope, element, attrs, ctrls) {
+      var ngModel = ctrls[0],
+        ctrl = ctrls[1];
+
+      ctrl.init(ngModel);
+    }
+  };
+})
+
+.directive('uibDatepickerPopupWrap', function() {
+  return {
+    restrict: 'A',
+    transclude: true,
+    templateUrl: function(element, attrs) {
+      return attrs.templateUrl || 'uib/template/datepickerPopup/popup.html';
+    }
+  };
+});
+
+angular.module('ui.bootstrap.debounce', [])
+/**
+ * A helper, internal service that debounces a function
+ */
+  .factory('$$debounce', ['$timeout', function($timeout) {
+    return function(callback, debounceTime) {
+      var timeoutPromise;
+
+      return function() {
+        var self = this;
+        var args = Array.prototype.slice.call(arguments);
+        if (timeoutPromise) {
+          $timeout.cancel(timeoutPromise);
+        }
+
+        timeoutPromise = $timeout(function() {
+          callback.apply(self, args);
+        }, debounceTime);
+      };
+    };
+  }]);
+
+angular.module('ui.bootstrap.multiMap', [])
+/**
+ * A helper, internal data structure that stores all references attached to key
+ */
+  .factory('$$multiMap', function() {
+    return {
+      createNew: function() {
+        var map = {};
+
+        return {
+          entries: function() {
+            return Object.keys(map).map(function(key) {
+              return {
+                key: key,
+                value: map[key]
+              };
+            });
+          },
+          get: function(key) {
+            return map[key];
+          },
+          hasKey: function(key) {
+            return !!map[key];
+          },
+          keys: function() {
+            return Object.keys(map);
+          },
+          put: function(key, value) {
+            if (!map[key]) {
+              map[key] = [];
+            }
+
+            map[key].push(value);
+          },
+          remove: function(key, value) {
+            var values = map[key];
+
+            if (!values) {
+              return;
+            }
+
+            var idx = values.indexOf(value);
+
+            if (idx !== -1) {
+              values.splice(idx, 1);
+            }
+
+            if (!values.length) {
+              delete map[key];
+            }
+          }
+        };
+      }
+    };
+  });
+
+angular.module('ui.bootstrap.dropdown', ['ui.bootstrap.multiMap', 'ui.bootstrap.position'])
+
+.constant('uibDropdownConfig', {
+  appendToOpenClass: 'uib-dropdown-open',
+  openClass: 'open'
+})
+
+.service('uibDropdownService', ['$document', '$rootScope', '$$multiMap', function($document, $rootScope, $$multiMap) {
+  var openScope = null;
+  var openedContainers = $$multiMap.createNew();
+
+  this.isOnlyOpen = function(dropdownScope, appendTo) {
+    var openedDropdowns = openedContainers.get(appendTo);
+    if (openedDropdowns) {
+      var openDropdown = openedDropdowns.reduce(function(toClose, dropdown) {
+        if (dropdown.scope === dropdownScope) {
+          return dropdown;
+        }
+
+        return toClose;
+      }, {});
+      if (openDropdown) {
+        return openedDropdowns.length === 1;
+      }
+    }
+
+    return false;
+  };
+
+  this.open = function(dropdownScope, element, appendTo) {
+    if (!openScope) {
+      $document.on('click', closeDropdown);
+    }
+
+    if (openScope && openScope !== dropdownScope) {
+      openScope.isOpen = false;
+    }
+
+    openScope = dropdownScope;
+
+    if (!appendTo) {
+      return;
+    }
+
+    var openedDropdowns = openedContainers.get(appendTo);
+    if (openedDropdowns) {
+      var openedScopes = openedDropdowns.map(function(dropdown) {
+        return dropdown.scope;
+      });
+      if (openedScopes.indexOf(dropdownScope) === -1) {
+        openedContainers.put(appendTo, {
+          scope: dropdownScope
+        });
+      }
+    } else {
+      openedContainers.put(appendTo, {
+        scope: dropdownScope
+      });
+    }
+  };
+
+  this.close = function(dropdownScope, element, appendTo) {
+    if (openScope === dropdownScope) {
+      $document.off('click', closeDropdown);
+      $document.off('keydown', this.keybindFilter);
+      openScope = null;
+    }
+
+    if (!appendTo) {
+      return;
+    }
+
+    var openedDropdowns = openedContainers.get(appendTo);
+    if (openedDropdowns) {
+      var dropdownToClose = openedDropdowns.reduce(function(toClose, dropdown) {
+        if (dropdown.scope === dropdownScope) {
+          return dropdown;
+        }
+
+        return toClose;
+      }, {});
+      if (dropdownToClose) {
+        openedContainers.remove(appendTo, dropdownToClose);
+      }
+    }
+  };
+
+  var closeDropdown = function(evt) {
+    // This method may still be called during the same mouse event that
+    // unbound this event handler. So check openScope before proceeding.
+    if (!openScope || !openScope.isOpen) { return; }
+
+    if (evt && openScope.getAutoClose() === 'disabled') { return; }
+
+    if (evt && evt.which === 3) { return; }
+
+    var toggleElement = openScope.getToggleElement();
+    if (evt && toggleElement && toggleElement[0].contains(evt.target)) {
+      return;
+    }
+
+    var dropdownElement = openScope.getDropdownElement();
+    if (evt && openScope.getAutoClose() === 'outsideClick' &&
+      dropdownElement && dropdownElement[0].contains(evt.target)) {
+      return;
+    }
+
+    openScope.focusToggleElement();
+    openScope.isOpen = false;
+
+    if (!$rootScope.$$phase) {
+      openScope.$apply();
+    }
+  };
+
+  this.keybindFilter = function(evt) {
+    if (!openScope) {
+      // see this.close as ESC could have been pressed which kills the scope so we can not proceed
+      return;
+    }
+
+    var dropdownElement = openScope.getDropdownElement();
+    var toggleElement = openScope.getToggleElement();
+    var dropdownElementTargeted = dropdownElement && dropdownElement[0].contains(evt.target);
+    var toggleElementTargeted = toggleElement && toggleElement[0].contains(evt.target);
+    if (evt.which === 27) {
+      evt.stopPropagation();
+      openScope.focusToggleElement();
+      closeDropdown();
+    } else if (openScope.isKeynavEnabled() && [38, 40].indexOf(evt.which) !== -1 && openScope.isOpen && (dropdownElementTargeted || toggleElementTargeted)) {
+      evt.preventDefault();
+      evt.stopPropagation();
+      openScope.focusDropdownEntry(evt.which);
+    }
+  };
+}])
+
+.controller('UibDropdownController', ['$scope', '$element', '$attrs', '$parse', 'uibDropdownConfig', 'uibDropdownService', '$animate', '$uibPosition', '$document', '$compile', '$templateRequest', function($scope, $element, $attrs, $parse, dropdownConfig, uibDropdownService, $animate, $position, $document, $compile, $templateRequest) {
+  var self = this,
+    scope = $scope.$new(), // create a child scope so we are not polluting original one
+    templateScope,
+    appendToOpenClass = dropdownConfig.appendToOpenClass,
+    openClass = dropdownConfig.openClass,
+    getIsOpen,
+    setIsOpen = angular.noop,
+    toggleInvoker = $attrs.onToggle ? $parse($attrs.onToggle) : angular.noop,
+    keynavEnabled = false,
+    selectedOption = null,
+    body = $document.find('body');
+
+  $element.addClass('dropdown');
+
+  this.init = function() {
+    if ($attrs.isOpen) {
+      getIsOpen = $parse($attrs.isOpen);
+      setIsOpen = getIsOpen.assign;
+
+      $scope.$watch(getIsOpen, function(value) {
+        scope.isOpen = !!value;
+      });
+    }
+
+    keynavEnabled = angular.isDefined($attrs.keyboardNav);
+  };
+
+  this.toggle = function(open) {
+    scope.isOpen = arguments.length ? !!open : !scope.isOpen;
+    if (angular.isFunction(setIsOpen)) {
+      setIsOpen(scope, scope.isOpen);
+    }
+
+    return scope.isOpen;
+  };
+
+  // Allow other directives to watch status
+  this.isOpen = function() {
+    return scope.isOpen;
+  };
+
+  scope.getToggleElement = function() {
+    return self.toggleElement;
+  };
+
+  scope.getAutoClose = function() {
+    return $attrs.autoClose || 'always'; //or 'outsideClick' or 'disabled'
+  };
+
+  scope.getElement = function() {
+    return $element;
+  };
+
+  scope.isKeynavEnabled = function() {
+    return keynavEnabled;
+  };
+
+  scope.focusDropdownEntry = function(keyCode) {
+    var elems = self.dropdownMenu ? //If append to body is used.
+      angular.element(self.dropdownMenu).find('a') :
+      $element.find('ul').eq(0).find('a');
+
+    switch (keyCode) {
+      case 40: {
+        if (!angular.isNumber(self.selectedOption)) {
+          self.selectedOption = 0;
+        } else {
+          self.selectedOption = self.selectedOption === elems.length - 1 ?
+            self.selectedOption :
+            self.selectedOption + 1;
+        }
+        break;
+      }
+      case 38: {
+        if (!angular.isNumber(self.selectedOption)) {
+          self.selectedOption = elems.length - 1;
+        } else {
+          self.selectedOption = self.selectedOption === 0 ?
+            0 : self.selectedOption - 1;
+        }
+        break;
+      }
+    }
+    elems[self.selectedOption].focus();
+  };
+
+  scope.getDropdownElement = function() {
+    return self.dropdownMenu;
+  };
+
+  scope.focusToggleElement = function() {
+    if (self.toggleElement) {
+      self.toggleElement[0].focus();
+    }
+  };
+
+  function removeDropdownMenu() {
+    $element.append(self.dropdownMenu);
+  }
+
+  scope.$watch('isOpen', function(isOpen, wasOpen) {
+    var appendTo = null,
+      appendToBody = false;
+
+    if (angular.isDefined($attrs.dropdownAppendTo)) {
+      var appendToEl = $parse($attrs.dropdownAppendTo)(scope);
+      if (appendToEl) {
+        appendTo = angular.element(appendToEl);
+      }
+    }
+
+    if (angular.isDefined($attrs.dropdownAppendToBody)) {
+      var appendToBodyValue = $parse($attrs.dropdownAppendToBody)(scope);
+      if (appendToBodyValue !== false) {
+        appendToBody = true;
+      }
+    }
+
+    if (appendToBody && !appendTo) {
+      appendTo = body;
+    }
+
+    if (appendTo && self.dropdownMenu) {
+      if (isOpen) {
+        appendTo.append(self.dropdownMenu);
+        $element.on('$destroy', removeDropdownMenu);
+      } else {
+        $element.off('$destroy', removeDropdownMenu);
+        removeDropdownMenu();
+      }
+    }
+
+    if (appendTo && self.dropdownMenu) {
+      var pos = $position.positionElements($element, self.dropdownMenu, 'bottom-left', true),
+        css,
+        rightalign,
+        scrollbarPadding,
+        scrollbarWidth = 0;
+
+      css = {
+        top: pos.top + 'px',
+        display: isOpen ? 'block' : 'none'
+      };
+
+      rightalign = self.dropdownMenu.hasClass('dropdown-menu-right');
+      if (!rightalign) {
+        css.left = pos.left + 'px';
+        css.right = 'auto';
+      } else {
+        css.left = 'auto';
+        scrollbarPadding = $position.scrollbarPadding(appendTo);
+
+        if (scrollbarPadding.heightOverflow && scrollbarPadding.scrollbarWidth) {
+          scrollbarWidth = scrollbarPadding.scrollbarWidth;
+        }
+
+        css.right = window.innerWidth - scrollbarWidth -
+          (pos.left + $element.prop('offsetWidth')) + 'px';
+      }
+
+      // Need to adjust our positioning to be relative to the appendTo container
+      // if it's not the body element
+      if (!appendToBody) {
+        var appendOffset = $position.offset(appendTo);
+
+        css.top = pos.top - appendOffset.top + 'px';
+
+        if (!rightalign) {
+          css.left = pos.left - appendOffset.left + 'px';
+        } else {
+          css.right = window.innerWidth -
+            (pos.left - appendOffset.left + $element.prop('offsetWidth')) + 'px';
+        }
+      }
+
+      self.dropdownMenu.css(css);
+    }
+
+    var openContainer = appendTo ? appendTo : $element;
+    var dropdownOpenClass = appendTo ? appendToOpenClass : openClass;
+    var hasOpenClass = openContainer.hasClass(dropdownOpenClass);
+    var isOnlyOpen = uibDropdownService.isOnlyOpen($scope, appendTo);
+
+    if (hasOpenClass === !isOpen) {
+      var toggleClass;
+      if (appendTo) {
+        toggleClass = !isOnlyOpen ? 'addClass' : 'removeClass';
+      } else {
+        toggleClass = isOpen ? 'addClass' : 'removeClass';
+      }
+      $animate[toggleClass](openContainer, dropdownOpenClass).then(function() {
+        if (angular.isDefined(isOpen) && isOpen !== wasOpen) {
+          toggleInvoker($scope, { open: !!isOpen });
+        }
+      });
+    }
+
+    if (isOpen) {
+      if (self.dropdownMenuTemplateUrl) {
+        $templateRequest(self.dropdownMenuTemplateUrl).then(function(tplContent) {
+          templateScope = scope.$new();
+          $compile(tplContent.trim())(templateScope, function(dropdownElement) {
+            var newEl = dropdownElement;
+            self.dropdownMenu.replaceWith(newEl);
+            self.dropdownMenu = newEl;
+            $document.on('keydown', uibDropdownService.keybindFilter);
+          });
+        });
+      } else {
+        $document.on('keydown', uibDropdownService.keybindFilter);
+      }
+
+      scope.focusToggleElement();
+      uibDropdownService.open(scope, $element, appendTo);
+    } else {
+      uibDropdownService.close(scope, $element, appendTo);
+      if (self.dropdownMenuTemplateUrl) {
+        if (templateScope) {
+          templateScope.$destroy();
+        }
+        var newEl = angular.element('<ul class="dropdown-menu"></ul>');
+        self.dropdownMenu.replaceWith(newEl);
+        self.dropdownMenu = newEl;
+      }
+
+      self.selectedOption = null;
+    }
+
+    if (angular.isFunction(setIsOpen)) {
+      setIsOpen($scope, isOpen);
+    }
+  });
+}])
+
+.directive('uibDropdown', function() {
+  return {
+    controller: 'UibDropdownController',
+    link: function(scope, element, attrs, dropdownCtrl) {
+      dropdownCtrl.init();
+    }
+  };
+})
+
+.directive('uibDropdownMenu', function() {
+  return {
+    restrict: 'A',
+    require: '?^uibDropdown',
+    link: function(scope, element, attrs, dropdownCtrl) {
+      if (!dropdownCtrl || angular.isDefined(attrs.dropdownNested)) {
+        return;
+      }
+
+      element.addClass('dropdown-menu');
+
+      var tplUrl = attrs.templateUrl;
+      if (tplUrl) {
+        dropdownCtrl.dropdownMenuTemplateUrl = tplUrl;
+      }
+
+      if (!dropdownCtrl.dropdownMenu) {
+        dropdownCtrl.dropdownMenu = element;
+      }
+    }
+  };
+})
+
+.directive('uibDropdownToggle', function() {
+  return {
+    require: '?^uibDropdown',
+    link: function(scope, element, attrs, dropdownCtrl) {
+      if (!dropdownCtrl) {
+        return;
+      }
+
+      element.addClass('dropdown-toggle');
+
+      dropdownCtrl.toggleElement = element;
+
+      var toggleDropdown = function(event) {
+        event.preventDefault();
+
+        if (!element.hasClass('disabled') && !attrs.disabled) {
+          scope.$apply(function() {
+            dropdownCtrl.toggle();
+          });
+        }
+      };
+
+      element.on('click', toggleDropdown);
+
+      // WAI-ARIA
+      element.attr({ 'aria-haspopup': true, 'aria-expanded': false });
+      scope.$watch(dropdownCtrl.isOpen, function(isOpen) {
+        element.attr('aria-expanded', !!isOpen);
+      });
+
+      scope.$on('$destroy', function() {
+        element.off('click', toggleDropdown);
+      });
+    }
+  };
+});
+
+angular.module('ui.bootstrap.stackedMap', [])
+/**
+ * A helper, internal data structure that acts as a map but also allows getting / removing
+ * elements in the LIFO order
+ */
+  .factory('$$stackedMap', function() {
+    return {
+      createNew: function() {
+        var stack = [];
+
+        return {
+          add: function(key, value) {
+            stack.push({
+              key: key,
+              value: value
+            });
+          },
+          get: function(key) {
+            for (var i = 0; i < stack.length; i++) {
+              if (key === stack[i].key) {
+                return stack[i];
+              }
+            }
+          },
+          keys: function() {
+            var keys = [];
+            for (var i = 0; i < stack.length; i++) {
+              keys.push(stack[i].key);
+            }
+            return keys;
+          },
+          top: function() {
+            return stack[stack.length - 1];
+          },
+          remove: function(key) {
+            var idx = -1;
+            for (var i = 0; i < stack.length; i++) {
+              if (key === stack[i].key) {
+                idx = i;
+                break;
+              }
+            }
+            return stack.splice(idx, 1)[0];
+          },
+          removeTop: function() {
+            return stack.pop();
+          },
+          length: function() {
+            return stack.length;
+          }
+        };
+      }
+    };
+  });
+angular.module('ui.bootstrap.modal', ['ui.bootstrap.multiMap', 'ui.bootstrap.stackedMap', 'ui.bootstrap.position'])
+/**
+ * Pluggable resolve mechanism for the modal resolve resolution
+ * Supports UI Router's $resolve service
+ */
+  .provider('$uibResolve', function() {
+    var resolve = this;
+    this.resolver = null;
+
+    this.setResolver = function(resolver) {
+      this.resolver = resolver;
+    };
+
+    this.$get = ['$injector', '$q', function($injector, $q) {
+      var resolver = resolve.resolver ? $injector.get(resolve.resolver) : null;
+      return {
+        resolve: function(invocables, locals, parent, self) {
+          if (resolver) {
+            return resolver.resolve(invocables, locals, parent, self);
+          }
+
+          var promises = [];
+
+          angular.forEach(invocables, function(value) {
+            if (angular.isFunction(value) || angular.isArray(value)) {
+              promises.push($q.resolve($injector.invoke(value)));
+            } else if (angular.isString(value)) {
+              promises.push($q.resolve($injector.get(value)));
+            } else {
+              promises.push($q.resolve(value));
+            }
+          });
+
+          return $q.all(promises).then(function(resolves) {
+            var resolveObj = {};
+            var resolveIter = 0;
+            angular.forEach(invocables, function(value, key) {
+              resolveObj[key] = resolves[resolveIter++];
+            });
+
+            return resolveObj;
+          });
+        }
+      };
+    }];
+  })
+
+/**
+ * A helper directive for the $modal service. It creates a backdrop element.
+ */
+  .directive('uibModalBackdrop', ['$animate', '$injector', '$uibModalStack',
+  function($animate, $injector, $modalStack) {
+    return {
+      restrict: 'A',
+      compile: function(tElement, tAttrs) {
+        tElement.addClass(tAttrs.backdropClass);
+        return linkFn;
+      }
+    };
+
+    function linkFn(scope, element, attrs) {
+      if (attrs.modalInClass) {
+        $animate.addClass(element, attrs.modalInClass);
+
+        scope.$on($modalStack.NOW_CLOSING_EVENT, function(e, setIsAsync) {
+          var done = setIsAsync();
+          if (scope.modalOptions.animation) {
+            $animate.removeClass(element, attrs.modalInClass).then(done);
+          } else {
+            done();
+          }
+        });
+      }
+    }
+  }])
+
+  .directive('uibModalWindow', ['$uibModalStack', '$q', '$animateCss', '$document',
+  function($modalStack, $q, $animateCss, $document) {
+    return {
+      scope: {
+        index: '@'
+      },
+      restrict: 'A',
+      transclude: true,
+      templateUrl: function(tElement, tAttrs) {
+        return tAttrs.templateUrl || 'uib/template/modal/window.html';
+      },
+      link: function(scope, element, attrs) {
+        element.addClass(attrs.windowTopClass || '');
+        scope.size = attrs.size;
+
+        scope.close = function(evt) {
+          var modal = $modalStack.getTop();
+          if (modal && modal.value.backdrop &&
+            modal.value.backdrop !== 'static' &&
+            evt.target === evt.currentTarget) {
+            evt.preventDefault();
+            evt.stopPropagation();
+            $modalStack.dismiss(modal.key, 'backdrop click');
+          }
+        };
+
+        // moved from template to fix issue #2280
+        element.on('click', scope.close);
+
+        // This property is only added to the scope for the purpose of detecting when this directive is rendered.
+        // We can detect that by using this property in the template associated with this directive and then use
+        // {@link Attribute#$observe} on it. For more details please see {@link TableColumnResize}.
+        scope.$isRendered = true;
+
+        // Deferred object that will be resolved when this modal is rendered.
+        var modalRenderDeferObj = $q.defer();
+        // Resolve render promise post-digest
+        scope.$$postDigest(function() {
+          modalRenderDeferObj.resolve();
+        });
+
+        modalRenderDeferObj.promise.then(function() {
+          var animationPromise = null;
+
+          if (attrs.modalInClass) {
+            animationPromise = $animateCss(element, {
+              addClass: attrs.modalInClass
+            }).start();
+
+            scope.$on($modalStack.NOW_CLOSING_EVENT, function(e, setIsAsync) {
+              var done = setIsAsync();
+              $animateCss(element, {
+                removeClass: attrs.modalInClass
+              }).start().then(done);
+            });
+          }
+
+
+          $q.when(animationPromise).then(function() {
+            // Notify {@link $modalStack} that modal is rendered.
+            var modal = $modalStack.getTop();
+            if (modal) {
+              $modalStack.modalRendered(modal.key);
+            }
+
+            /**
+             * If something within the freshly-opened modal already has focus (perhaps via a
+             * directive that causes focus) then there's no need to try to focus anything.
+             */
+            if (!($document[0].activeElement && element[0].contains($document[0].activeElement))) {
+              var inputWithAutofocus = element[0].querySelector('[autofocus]');
+              /**
+               * Auto-focusing of a freshly-opened modal element causes any child elements
+               * with the autofocus attribute to lose focus. This is an issue on touch
+               * based devices which will show and then hide the onscreen keyboard.
+               * Attempts to refocus the autofocus element via JavaScript will not reopen
+               * the onscreen keyboard. Fixed by updated the focusing logic to only autofocus
+               * the modal element if the modal does not contain an autofocus element.
+               */
+              if (inputWithAutofocus) {
+                inputWithAutofocus.focus();
+              } else {
+                element[0].focus();
+              }
+            }
+          });
+        });
+      }
+    };
+  }])
+
+  .directive('uibModalAnimationClass', function() {
+    return {
+      compile: function(tElement, tAttrs) {
+        if (tAttrs.modalAnimation) {
+          tElement.addClass(tAttrs.uibModalAnimationClass);
+        }
+      }
+    };
+  })
+
+  .directive('uibModalTransclude', ['$animate', function($animate) {
+    return {
+      link: function(scope, element, attrs, controller, transclude) {
+        transclude(scope.$parent, function(clone) {
+          element.empty();
+          $animate.enter(clone, element);
+        });
+      }
+    };
+  }])
+
+  .factory('$uibModalStack', ['$animate', '$animateCss', '$document',
+    '$compile', '$rootScope', '$q', '$$multiMap', '$$stackedMap', '$uibPosition',
+    function($animate, $animateCss, $document, $compile, $rootScope, $q, $$multiMap, $$stackedMap, $uibPosition) {
+      var OPENED_MODAL_CLASS = 'modal-open';
+
+      var backdropDomEl, backdropScope;
+      var openedWindows = $$stackedMap.createNew();
+      var openedClasses = $$multiMap.createNew();
+      var $modalStack = {
+        NOW_CLOSING_EVENT: 'modal.stack.now-closing'
+      };
+      var topModalIndex = 0;
+      var previousTopOpenedModal = null;
+      var ARIA_HIDDEN_ATTRIBUTE_NAME = 'data-bootstrap-modal-aria-hidden-count';
+
+      //Modal focus behavior
+      var tabbableSelector = 'a[href], area[href], input:not([disabled]):not([tabindex=\'-1\']), ' +
+        'button:not([disabled]):not([tabindex=\'-1\']),select:not([disabled]):not([tabindex=\'-1\']), textarea:not([disabled]):not([tabindex=\'-1\']), ' +
+        'iframe, object, embed, *[tabindex]:not([tabindex=\'-1\']), *[contenteditable=true]';
+      var scrollbarPadding;
+      var SNAKE_CASE_REGEXP = /[A-Z]/g;
+
+      // TODO: extract into common dependency with tooltip
+      function snake_case(name) {
+        var separator = '-';
+        return name.replace(SNAKE_CASE_REGEXP, function(letter, pos) {
+          return (pos ? separator : '') + letter.toLowerCase();
+        });
+      }
+
+      function isVisible(element) {
+        return !!(element.offsetWidth ||
+          element.offsetHeight ||
+          element.getClientRects().length);
+      }
+
+      function backdropIndex() {
+        var topBackdropIndex = -1;
+        var opened = openedWindows.keys();
+        for (var i = 0; i < opened.length; i++) {
+          if (openedWindows.get(opened[i]).value.backdrop) {
+            topBackdropIndex = i;
+          }
+        }
+
+        // If any backdrop exist, ensure that it's index is always
+        // right below the top modal
+        if (topBackdropIndex > -1 && topBackdropIndex < topModalIndex) {
+          topBackdropIndex = topModalIndex;
+        }
+        return topBackdropIndex;
+      }
+
+      $rootScope.$watch(backdropIndex, function(newBackdropIndex) {
+        if (backdropScope) {
+          backdropScope.index = newBackdropIndex;
+        }
+      });
+
+      function removeModalWindow(modalInstance, elementToReceiveFocus) {
+        var modalWindow = openedWindows.get(modalInstance).value;
+        var appendToElement = modalWindow.appendTo;
+
+        //clean up the stack
+        openedWindows.remove(modalInstance);
+        previousTopOpenedModal = openedWindows.top();
+        if (previousTopOpenedModal) {
+          topModalIndex = parseInt(previousTopOpenedModal.value.modalDomEl.attr('index'), 10);
+        }
+
+        removeAfterAnimate(modalWindow.modalDomEl, modalWindow.modalScope, function() {
+          var modalBodyClass = modalWindow.openedClass || OPENED_MODAL_CLASS;
+          openedClasses.remove(modalBodyClass, modalInstance);
+          var areAnyOpen = openedClasses.hasKey(modalBodyClass);
+          appendToElement.toggleClass(modalBodyClass, areAnyOpen);
+          if (!areAnyOpen && scrollbarPadding && scrollbarPadding.heightOverflow && scrollbarPadding.scrollbarWidth) {
+            if (scrollbarPadding.originalRight) {
+              appendToElement.css({paddingRight: scrollbarPadding.originalRight + 'px'});
+            } else {
+              appendToElement.css({paddingRight: ''});
+            }
+            scrollbarPadding = null;
+          }
+          toggleTopWindowClass(true);
+        }, modalWindow.closedDeferred);
+        checkRemoveBackdrop();
+
+        //move focus to specified element if available, or else to body
+        if (elementToReceiveFocus && elementToReceiveFocus.focus) {
+          elementToReceiveFocus.focus();
+        } else if (appendToElement.focus) {
+          appendToElement.focus();
+        }
+      }
+
+      // Add or remove "windowTopClass" from the top window in the stack
+      function toggleTopWindowClass(toggleSwitch) {
+        var modalWindow;
+
+        if (openedWindows.length() > 0) {
+          modalWindow = openedWindows.top().value;
+          modalWindow.modalDomEl.toggleClass(modalWindow.windowTopClass || '', toggleSwitch);
+        }
+      }
+
+      function checkRemoveBackdrop() {
+        //remove backdrop if no longer needed
+        if (backdropDomEl && backdropIndex() === -1) {
+          var backdropScopeRef = backdropScope;
+          removeAfterAnimate(backdropDomEl, backdropScope, function() {
+            backdropScopeRef = null;
+          });
+          backdropDomEl = undefined;
+          backdropScope = undefined;
+        }
+      }
+
+      function removeAfterAnimate(domEl, scope, done, closedDeferred) {
+        var asyncDeferred;
+        var asyncPromise = null;
+        var setIsAsync = function() {
+          if (!asyncDeferred) {
+            asyncDeferred = $q.defer();
+            asyncPromise = asyncDeferred.promise;
+          }
+
+          return function asyncDone() {
+            asyncDeferred.resolve();
+          };
+        };
+        scope.$broadcast($modalStack.NOW_CLOSING_EVENT, setIsAsync);
+
+        // Note that it's intentional that asyncPromise might be null.
+        // That's when setIsAsync has not been called during the
+        // NOW_CLOSING_EVENT broadcast.
+        return $q.when(asyncPromise).then(afterAnimating);
+
+        function afterAnimating() {
+          if (afterAnimating.done) {
+            return;
+          }
+          afterAnimating.done = true;
+
+          $animate.leave(domEl).then(function() {
+            if (done) {
+              done();
+            }
+
+            domEl.remove();
+            if (closedDeferred) {
+              closedDeferred.resolve();
+            }
+          });
+
+          scope.$destroy();
+        }
+      }
+
+      $document.on('keydown', keydownListener);
+
+      $rootScope.$on('$destroy', function() {
+        $document.off('keydown', keydownListener);
+      });
+
+      function keydownListener(evt) {
+        if (evt.isDefaultPrevented()) {
+          return evt;
+        }
+
+        var modal = openedWindows.top();
+        if (modal) {
+          switch (evt.which) {
+            case 27: {
+              if (modal.value.keyboard) {
+                evt.preventDefault();
+                $rootScope.$apply(function() {
+                  $modalStack.dismiss(modal.key, 'escape key press');
+                });
+              }
+              break;
+            }
+            case 9: {
+              var list = $modalStack.loadFocusElementList(modal);
+              var focusChanged = false;
+              if (evt.shiftKey) {
+                if ($modalStack.isFocusInFirstItem(evt, list) || $modalStack.isModalFocused(evt, modal)) {
+                  focusChanged = $modalStack.focusLastFocusableElement(list);
+                }
+              } else {
+                if ($modalStack.isFocusInLastItem(evt, list)) {
+                  focusChanged = $modalStack.focusFirstFocusableElement(list);
+                }
+              }
+
+              if (focusChanged) {
+                evt.preventDefault();
+                evt.stopPropagation();
+              }
+
+              break;
+            }
+          }
+        }
+      }
+
+      $modalStack.open = function(modalInstance, modal) {
+        var modalOpener = $document[0].activeElement,
+          modalBodyClass = modal.openedClass || OPENED_MODAL_CLASS;
+
+        toggleTopWindowClass(false);
+
+        // Store the current top first, to determine what index we ought to use
+        // for the current top modal
+        previousTopOpenedModal = openedWindows.top();
+
+        openedWindows.add(modalInstance, {
+          deferred: modal.deferred,
+          renderDeferred: modal.renderDeferred,
+          closedDeferred: modal.closedDeferred,
+          modalScope: modal.scope,
+          backdrop: modal.backdrop,
+          keyboard: modal.keyboard,
+          openedClass: modal.openedClass,
+          windowTopClass: modal.windowTopClass,
+          animation: modal.animation,
+          appendTo: modal.appendTo
+        });
+
+        openedClasses.put(modalBodyClass, modalInstance);
+
+        var appendToElement = modal.appendTo,
+            currBackdropIndex = backdropIndex();
+
+        if (currBackdropIndex >= 0 && !backdropDomEl) {
+          backdropScope = $rootScope.$new(true);
+          backdropScope.modalOptions = modal;
+          backdropScope.index = currBackdropIndex;
+          backdropDomEl = angular.element('<div uib-modal-backdrop="modal-backdrop"></div>');
+          backdropDomEl.attr({
+            'class': 'modal-backdrop',
+            'ng-style': '{\'z-index\': 1040 + (index && 1 || 0) + index*10}',
+            'uib-modal-animation-class': 'fade',
+            'modal-in-class': 'in'
+          });
+          if (modal.backdropClass) {
+            backdropDomEl.addClass(modal.backdropClass);
+          }
+
+          if (modal.animation) {
+            backdropDomEl.attr('modal-animation', 'true');
+          }
+          $compile(backdropDomEl)(backdropScope);
+          $animate.enter(backdropDomEl, appendToElement);
+          if ($uibPosition.isScrollable(appendToElement)) {
+            scrollbarPadding = $uibPosition.scrollbarPadding(appendToElement);
+            if (scrollbarPadding.heightOverflow && scrollbarPadding.scrollbarWidth) {
+              appendToElement.css({paddingRight: scrollbarPadding.right + 'px'});
+            }
+          }
+        }
+
+        var content;
+        if (modal.component) {
+          content = document.createElement(snake_case(modal.component.name));
+          content = angular.element(content);
+          content.attr({
+            resolve: '$resolve',
+            'modal-instance': '$uibModalInstance',
+            close: '$close($value)',
+            dismiss: '$dismiss($value)'
+          });
+        } else {
+          content = modal.content;
+        }
+
+        // Set the top modal index based on the index of the previous top modal
+        topModalIndex = previousTopOpenedModal ? parseInt(previousTopOpenedModal.value.modalDomEl.attr('index'), 10) + 1 : 0;
+        var angularDomEl = angular.element('<div uib-modal-window="modal-window"></div>');
+        angularDomEl.attr({
+          'class': 'modal',
+          'template-url': modal.windowTemplateUrl,
+          'window-top-class': modal.windowTopClass,
+          'role': 'dialog',
+          'aria-labelledby': modal.ariaLabelledBy,
+          'aria-describedby': modal.ariaDescribedBy,
+          'size': modal.size,
+          'index': topModalIndex,
+          'animate': 'animate',
+          'ng-style': '{\'z-index\': 1050 + $$topModalIndex*10, display: \'block\'}',
+          'tabindex': -1,
+          'uib-modal-animation-class': 'fade',
+          'modal-in-class': 'in'
+        }).append(content);
+        if (modal.windowClass) {
+          angularDomEl.addClass(modal.windowClass);
+        }
+
+        if (modal.animation) {
+          angularDomEl.attr('modal-animation', 'true');
+        }
+
+        appendToElement.addClass(modalBodyClass);
+        if (modal.scope) {
+          // we need to explicitly add the modal index to the modal scope
+          // because it is needed by ngStyle to compute the zIndex property.
+          modal.scope.$$topModalIndex = topModalIndex;
+        }
+        $animate.enter($compile(angularDomEl)(modal.scope), appendToElement);
+
+        openedWindows.top().value.modalDomEl = angularDomEl;
+        openedWindows.top().value.modalOpener = modalOpener;
+
+        applyAriaHidden(angularDomEl);
+
+        function applyAriaHidden(el) {
+          if (!el || el[0].tagName === 'BODY') {
+            return;
+          }
+
+          getSiblings(el).forEach(function(sibling) {
+            var elemIsAlreadyHidden = sibling.getAttribute('aria-hidden') === 'true',
+              ariaHiddenCount = parseInt(sibling.getAttribute(ARIA_HIDDEN_ATTRIBUTE_NAME), 10);
+
+            if (!ariaHiddenCount) {
+              ariaHiddenCount = elemIsAlreadyHidden ? 1 : 0;
+            }
+
+            sibling.setAttribute(ARIA_HIDDEN_ATTRIBUTE_NAME, ariaHiddenCount + 1);
+            sibling.setAttribute('aria-hidden', 'true');
+          });
+
+          return applyAriaHidden(el.parent());
+
+          function getSiblings(el) {
+            var children = el.parent() ? el.parent().children() : [];
+
+            return Array.prototype.filter.call(children, function(child) {
+              return child !== el[0];
+            });
+          }
+        }
+      };
+
+      function broadcastClosing(modalWindow, resultOrReason, closing) {
+        return !modalWindow.value.modalScope.$broadcast('modal.closing', resultOrReason, closing).defaultPrevented;
+      }
+
+      function unhideBackgroundElements() {
+        Array.prototype.forEach.call(
+          document.querySelectorAll('[' + ARIA_HIDDEN_ATTRIBUTE_NAME + ']'),
+          function(hiddenEl) {
+            var ariaHiddenCount = parseInt(hiddenEl.getAttribute(ARIA_HIDDEN_ATTRIBUTE_NAME), 10),
+              newHiddenCount = ariaHiddenCount - 1;
+            hiddenEl.setAttribute(ARIA_HIDDEN_ATTRIBUTE_NAME, newHiddenCount);
+
+            if (!newHiddenCount) {
+              hiddenEl.removeAttribute(ARIA_HIDDEN_ATTRIBUTE_NAME);
+              hiddenEl.removeAttribute('aria-hidden');
+            }
+          }
+        );
+      }
+
+      $modalStack.close = function(modalInstance, result) {
+        var modalWindow = openedWindows.get(modalInstance);
+        unhideBackgroundElements();
+        if (modalWindow && broadcastClosing(modalWindow, result, true)) {
+          modalWindow.value.modalScope.$$uibDestructionScheduled = true;
+          modalWindow.value.deferred.resolve(result);
+          removeModalWindow(modalInstance, modalWindow.value.modalOpener);
+          return true;
+        }
+
+        return !modalWindow;
+      };
+
+      $modalStack.dismiss = function(modalInstance, reason) {
+        var modalWindow = openedWindows.get(modalInstance);
+        unhideBackgroundElements();
+        if (modalWindow && broadcastClosing(modalWindow, reason, false)) {
+          modalWindow.value.modalScope.$$uibDestructionScheduled = true;
+          modalWindow.value.deferred.reject(reason);
+          removeModalWindow(modalInstance, modalWindow.value.modalOpener);
+          return true;
+        }
+        return !modalWindow;
+      };
+
+      $modalStack.dismissAll = function(reason) {
+        var topModal = this.getTop();
+        while (topModal && this.dismiss(topModal.key, reason)) {
+          topModal = this.getTop();
+        }
+      };
+
+      $modalStack.getTop = function() {
+        return openedWindows.top();
+      };
+
+      $modalStack.modalRendered = function(modalInstance) {
+        var modalWindow = openedWindows.get(modalInstance);
+        if (modalWindow) {
+          modalWindow.value.renderDeferred.resolve();
+        }
+      };
+
+      $modalStack.focusFirstFocusableElement = function(list) {
+        if (list.length > 0) {
+          list[0].focus();
+          return true;
+        }
+        return false;
+      };
+
+      $modalStack.focusLastFocusableElement = function(list) {
+        if (list.length > 0) {
+          list[list.length - 1].focus();
+          return true;
+        }
+        return false;
+      };
+
+      $modalStack.isModalFocused = function(evt, modalWindow) {
+        if (evt && modalWindow) {
+          var modalDomEl = modalWindow.value.modalDomEl;
+          if (modalDomEl && modalDomEl.length) {
+            return (evt.target || evt.srcElement) === modalDomEl[0];
+          }
+        }
+        return false;
+      };
+
+      $modalStack.isFocusInFirstItem = function(evt, list) {
+        if (list.length > 0) {
+          return (evt.target || evt.srcElement) === list[0];
+        }
+        return false;
+      };
+
+      $modalStack.isFocusInLastItem = function(evt, list) {
+        if (list.length > 0) {
+          return (evt.target || evt.srcElement) === list[list.length - 1];
+        }
+        return false;
+      };
+
+      $modalStack.loadFocusElementList = function(modalWindow) {
+        if (modalWindow) {
+          var modalDomE1 = modalWindow.value.modalDomEl;
+          if (modalDomE1 && modalDomE1.length) {
+            var elements = modalDomE1[0].querySelectorAll(tabbableSelector);
+            return elements ?
+              Array.prototype.filter.call(elements, function(element) {
+                return isVisible(element);
+              }) : elements;
+          }
+        }
+      };
+
+      return $modalStack;
+    }])
+
+  .provider('$uibModal', function() {
+    var $modalProvider = {
+      options: {
+        animation: true,
+        backdrop: true, //can also be false or 'static'
+        keyboard: true
+      },
+      $get: ['$rootScope', '$q', '$document', '$templateRequest', '$controller', '$uibResolve', '$uibModalStack',
+        function ($rootScope, $q, $document, $templateRequest, $controller, $uibResolve, $modalStack) {
+          var $modal = {};
+
+          function getTemplatePromise(options) {
+            return options.template ? $q.when(options.template) :
+              $templateRequest(angular.isFunction(options.templateUrl) ?
+                options.templateUrl() : options.templateUrl);
+          }
+
+          var promiseChain = null;
+          $modal.getPromiseChain = function() {
+            return promiseChain;
+          };
+
+          $modal.open = function(modalOptions) {
+            var modalResultDeferred = $q.defer();
+            var modalOpenedDeferred = $q.defer();
+            var modalClosedDeferred = $q.defer();
+            var modalRenderDeferred = $q.defer();
+
+            //prepare an instance of a modal to be injected into controllers and returned to a caller
+            var modalInstance = {
+              result: modalResultDeferred.promise,
+              opened: modalOpenedDeferred.promise,
+              closed: modalClosedDeferred.promise,
+              rendered: modalRenderDeferred.promise,
+              close: function (result) {
+                return $modalStack.close(modalInstance, result);
+              },
+              dismiss: function (reason) {
+                return $modalStack.dismiss(modalInstance, reason);
+              }
+            };
+
+            //merge and clean up options
+            modalOptions = angular.extend({}, $modalProvider.options, modalOptions);
+            modalOptions.resolve = modalOptions.resolve || {};
+            modalOptions.appendTo = modalOptions.appendTo || $document.find('body').eq(0);
+
+            if (!modalOptions.appendTo.length) {
+              throw new Error('appendTo element not found. Make sure that the element passed is in DOM.');
+            }
+
+            //verify options
+            if (!modalOptions.component && !modalOptions.template && !modalOptions.templateUrl) {
+              throw new Error('One of component or template or templateUrl options is required.');
+            }
+
+            var templateAndResolvePromise;
+            if (modalOptions.component) {
+              templateAndResolvePromise = $q.when($uibResolve.resolve(modalOptions.resolve, {}, null, null));
+            } else {
+              templateAndResolvePromise =
+                $q.all([getTemplatePromise(modalOptions), $uibResolve.resolve(modalOptions.resolve, {}, null, null)]);
+            }
+
+            function resolveWithTemplate() {
+              return templateAndResolvePromise;
+            }
+
+            // Wait for the resolution of the existing promise chain.
+            // Then switch to our own combined promise dependency (regardless of how the previous modal fared).
+            // Then add to $modalStack and resolve opened.
+            // Finally clean up the chain variable if no subsequent modal has overwritten it.
+            var samePromise;
+            samePromise = promiseChain = $q.all([promiseChain])
+              .then(resolveWithTemplate, resolveWithTemplate)
+              .then(function resolveSuccess(tplAndVars) {
+                var providedScope = modalOptions.scope || $rootScope;
+
+                var modalScope = providedScope.$new();
+                modalScope.$close = modalInstance.close;
+                modalScope.$dismiss = modalInstance.dismiss;
+
+                modalScope.$on('$destroy', function() {
+                  if (!modalScope.$$uibDestructionScheduled) {
+                    modalScope.$dismiss('$uibUnscheduledDestruction');
+                  }
+                });
+
+                var modal = {
+                  scope: modalScope,
+                  deferred: modalResultDeferred,
+                  renderDeferred: modalRenderDeferred,
+                  closedDeferred: modalClosedDeferred,
+                  animation: modalOptions.animation,
+                  backdrop: modalOptions.backdrop,
+                  keyboard: modalOptions.keyboard,
+                  backdropClass: modalOptions.backdropClass,
+                  windowTopClass: modalOptions.windowTopClass,
+                  windowClass: modalOptions.windowClass,
+                  windowTemplateUrl: modalOptions.windowTemplateUrl,
+                  ariaLabelledBy: modalOptions.ariaLabelledBy,
+                  ariaDescribedBy: modalOptions.ariaDescribedBy,
+                  size: modalOptions.size,
+                  openedClass: modalOptions.openedClass,
+                  appendTo: modalOptions.appendTo
+                };
+
+                var component = {};
+                var ctrlInstance, ctrlInstantiate, ctrlLocals = {};
+
+                if (modalOptions.component) {
+                  constructLocals(component, false, true, false);
+                  component.name = modalOptions.component;
+                  modal.component = component;
+                } else if (modalOptions.controller) {
+                  constructLocals(ctrlLocals, true, false, true);
+
+                  // the third param will make the controller instantiate later,private api
+                  // @see https://github.com/angular/angular.js/blob/master/src/ng/controller.js#L126
+                  ctrlInstantiate = $controller(modalOptions.controller, ctrlLocals, true, modalOptions.controllerAs);
+                  if (modalOptions.controllerAs && modalOptions.bindToController) {
+                    ctrlInstance = ctrlInstantiate.instance;
+                    ctrlInstance.$close = modalScope.$close;
+                    ctrlInstance.$dismiss = modalScope.$dismiss;
+                    angular.extend(ctrlInstance, {
+                      $resolve: ctrlLocals.$scope.$resolve
+                    }, providedScope);
+                  }
+
+                  ctrlInstance = ctrlInstantiate();
+
+                  if (angular.isFunction(ctrlInstance.$onInit)) {
+                    ctrlInstance.$onInit();
+                  }
+                }
+
+                if (!modalOptions.component) {
+                  modal.content = tplAndVars[0];
+                }
+
+                $modalStack.open(modalInstance, modal);
+                modalOpenedDeferred.resolve(true);
+
+                function constructLocals(obj, template, instanceOnScope, injectable) {
+                  obj.$scope = modalScope;
+                  obj.$scope.$resolve = {};
+                  if (instanceOnScope) {
+                    obj.$scope.$uibModalInstance = modalInstance;
+                  } else {
+                    obj.$uibModalInstance = modalInstance;
+                  }
+
+                  var resolves = template ? tplAndVars[1] : tplAndVars;
+                  angular.forEach(resolves, function(value, key) {
+                    if (injectable) {
+                      obj[key] = value;
+                    }
+
+                    obj.$scope.$resolve[key] = value;
+                  });
+                }
+            }, function resolveError(reason) {
+              modalOpenedDeferred.reject(reason);
+              modalResultDeferred.reject(reason);
+            })['finally'](function() {
+              if (promiseChain === samePromise) {
+                promiseChain = null;
+              }
+            });
+
+            return modalInstance;
+          };
+
+          return $modal;
+        }
+      ]
+    };
+
+    return $modalProvider;
+  });
+
+angular.module('ui.bootstrap.paging', [])
+/**
+ * Helper internal service for generating common controller code between the
+ * pager and pagination components
+ */
+.factory('uibPaging', ['$parse', function($parse) {
+  return {
+    create: function(ctrl, $scope, $attrs) {
+      ctrl.setNumPages = $attrs.numPages ? $parse($attrs.numPages).assign : angular.noop;
+      ctrl.ngModelCtrl = { $setViewValue: angular.noop }; // nullModelCtrl
+      ctrl._watchers = [];
+
+      ctrl.init = function(ngModelCtrl, config) {
+        ctrl.ngModelCtrl = ngModelCtrl;
+        ctrl.config = config;
+
+        ngModelCtrl.$render = function() {
+          ctrl.render();
+        };
+
+        if ($attrs.itemsPerPage) {
+          ctrl._watchers.push($scope.$parent.$watch($attrs.itemsPerPage, function(value) {
+            ctrl.itemsPerPage = parseInt(value, 10);
+            $scope.totalPages = ctrl.calculateTotalPages();
+            ctrl.updatePage();
+          }));
+        } else {
+          ctrl.itemsPerPage = config.itemsPerPage;
+        }
+
+        $scope.$watch('totalItems', function(newTotal, oldTotal) {
+          if (angular.isDefined(newTotal) || newTotal !== oldTotal) {
+            $scope.totalPages = ctrl.calculateTotalPages();
+            ctrl.updatePage();
+          }
+        });
+      };
+
+      ctrl.calculateTotalPages = function() {
+        var totalPages = ctrl.itemsPerPage < 1 ? 1 : Math.ceil($scope.totalItems / ctrl.itemsPerPage);
+        return Math.max(totalPages || 0, 1);
+      };
+
+      ctrl.render = function() {
+        $scope.page = parseInt(ctrl.ngModelCtrl.$viewValue, 10) || 1;
+      };
+
+      $scope.selectPage = function(page, evt) {
+        if (evt) {
+          evt.preventDefault();
+        }
+
+        var clickAllowed = !$scope.ngDisabled || !evt;
+        if (clickAllowed && $scope.page !== page && page > 0 && page <= $scope.totalPages) {
+          if (evt && evt.target) {
+            evt.target.blur();
+          }
+          ctrl.ngModelCtrl.$setViewValue(page);
+          ctrl.ngModelCtrl.$render();
+        }
+      };
+
+      $scope.getText = function(key) {
+        return $scope[key + 'Text'] || ctrl.config[key + 'Text'];
+      };
+
+      $scope.noPrevious = function() {
+        return $scope.page === 1;
+      };
+
+      $scope.noNext = function() {
+        return $scope.page === $scope.totalPages;
+      };
+
+      ctrl.updatePage = function() {
+        ctrl.setNumPages($scope.$parent, $scope.totalPages); // Readonly variable
+
+        if ($scope.page > $scope.totalPages) {
+          $scope.selectPage($scope.totalPages);
+        } else {
+          ctrl.ngModelCtrl.$render();
+        }
+      };
+
+      $scope.$on('$destroy', function() {
+        while (ctrl._watchers.length) {
+          ctrl._watchers.shift()();
+        }
+      });
+    }
+  };
+}]);
+
+angular.module('ui.bootstrap.pager', ['ui.bootstrap.paging', 'ui.bootstrap.tabindex'])
+
+.controller('UibPagerController', ['$scope', '$attrs', 'uibPaging', 'uibPagerConfig', function($scope, $attrs, uibPaging, uibPagerConfig) {
+  $scope.align = angular.isDefined($attrs.align) ? $scope.$parent.$eval($attrs.align) : uibPagerConfig.align;
+
+  uibPaging.create(this, $scope, $attrs);
+}])
+
+.constant('uibPagerConfig', {
+  itemsPerPage: 10,
+  previousText: '« Previous',
+  nextText: 'Next »',
+  align: true
+})
+
+.directive('uibPager', ['uibPagerConfig', function(uibPagerConfig) {
+  return {
+    scope: {
+      totalItems: '=',
+      previousText: '@',
+      nextText: '@',
+      ngDisabled: '='
+    },
+    require: ['uibPager', '?ngModel'],
+    restrict: 'A',
+    controller: 'UibPagerController',
+    controllerAs: 'pager',
+    templateUrl: function(element, attrs) {
+      return attrs.templateUrl || 'uib/template/pager/pager.html';
+    },
+    link: function(scope, element, attrs, ctrls) {
+      element.addClass('pager');
+      var paginationCtrl = ctrls[0], ngModelCtrl = ctrls[1];
+
+      if (!ngModelCtrl) {
+        return; // do nothing if no ng-model
+      }
+
+      paginationCtrl.init(ngModelCtrl, uibPagerConfig);
+    }
+  };
+}]);
+
+angular.module('ui.bootstrap.pagination', ['ui.bootstrap.paging', 'ui.bootstrap.tabindex'])
+.controller('UibPaginationController', ['$scope', '$attrs', '$parse', 'uibPaging', 'uibPaginationConfig', function($scope, $attrs, $parse, uibPaging, uibPaginationConfig) {
+  var ctrl = this;
+  // Setup configuration parameters
+  var maxSize = angular.isDefined($attrs.maxSize) ? $scope.$parent.$eval($attrs.maxSize) : uibPaginationConfig.maxSize,
+    rotate = angular.isDefined($attrs.rotate) ? $scope.$parent.$eval($attrs.rotate) : uibPaginationConfig.rotate,
+    forceEllipses = angular.isDefined($attrs.forceEllipses) ? $scope.$parent.$eval($attrs.forceEllipses) : uibPaginationConfig.forceEllipses,
+    boundaryLinkNumbers = angular.isDefined($attrs.boundaryLinkNumbers) ? $scope.$parent.$eval($attrs.boundaryLinkNumbers) : uibPaginationConfig.boundaryLinkNumbers,
+    pageLabel = angular.isDefined($attrs.pageLabel) ? function(idx) { return $scope.$parent.$eval($attrs.pageLabel, {$page: idx}); } : angular.identity;
+  $scope.boundaryLinks = angular.isDefined($attrs.boundaryLinks) ? $scope.$parent.$eval($attrs.boundaryLinks) : uibPaginationConfig.boundaryLinks;
+  $scope.directionLinks = angular.isDefined($attrs.directionLinks) ? $scope.$parent.$eval($attrs.directionLinks) : uibPaginationConfig.directionLinks;
+  $attrs.$set('role', 'menu');
+
+  uibPaging.create(this, $scope, $attrs);
+
+  if ($attrs.maxSize) {
+    ctrl._watchers.push($scope.$parent.$watch($parse($attrs.maxSize), function(value) {
+      maxSize = parseInt(value, 10);
+      ctrl.render();
+    }));
+  }
+
+  // Create page object used in template
+  function makePage(number, text, isActive) {
+    return {
+      number: number,
+      text: text,
+      active: isActive
+    };
+  }
+
+  function getPages(currentPage, totalPages) {
+    var pages = [];
+
+    // Default page limits
+    var startPage = 1, endPage = totalPages;
+    var isMaxSized = angular.isDefined(maxSize) && maxSize < totalPages;
+
+    // recompute if maxSize
+    if (isMaxSized) {
+      if (rotate) {
+        // Current page is displayed in the middle of the visible ones
+        startPage = Math.max(currentPage - Math.floor(maxSize / 2), 1);
+        endPage = startPage + maxSize - 1;
+
+        // Adjust if limit is exceeded
+        if (endPage > totalPages) {
+          endPage = totalPages;
+          startPage = endPage - maxSize + 1;
+        }
+      } else {
+        // Visible pages are paginated with maxSize
+        startPage = (Math.ceil(currentPage / maxSize) - 1) * maxSize + 1;
+
+        // Adjust last page if limit is exceeded
+        endPage = Math.min(startPage + maxSize - 1, totalPages);
+      }
+    }
+
+    // Add page number links
+    for (var number = startPage; number <= endPage; number++) {
+      var page = makePage(number, pageLabel(number), number === currentPage);
+      pages.push(page);
+    }
+
+    // Add links to move between page sets
+    if (isMaxSized && maxSize > 0 && (!rotate || forceEllipses || boundaryLinkNumbers)) {
+      if (startPage > 1) {
+        if (!boundaryLinkNumbers || startPage > 3) { //need ellipsis for all options unless range is too close to beginning
+        var previousPageSet = makePage(startPage - 1, '...', false);
+        pages.unshift(previousPageSet);
+      }
+        if (boundaryLinkNumbers) {
+          if (startPage === 3) { //need to replace ellipsis when the buttons would be sequential
+            var secondPageLink = makePage(2, '2', false);
+            pages.unshift(secondPageLink);
+          }
+          //add the first page
+          var firstPageLink = makePage(1, '1', false);
+          pages.unshift(firstPageLink);
+        }
+      }
+
+      if (endPage < totalPages) {
+        if (!boundaryLinkNumbers || endPage < totalPages - 2) { //need ellipsis for all options unless range is too close to end
+        var nextPageSet = makePage(endPage + 1, '...', false);
+        pages.push(nextPageSet);
+      }
+        if (boundaryLinkNumbers) {
+          if (endPage === totalPages - 2) { //need to replace ellipsis when the buttons would be sequential
+            var secondToLastPageLink = makePage(totalPages - 1, totalPages - 1, false);
+            pages.push(secondToLastPageLink);
+          }
+          //add the last page
+          var lastPageLink = makePage(totalPages, totalPages, false);
+          pages.push(lastPageLink);
+        }
+      }
+    }
+    return pages;
+  }
+
+  var originalRender = this.render;
+  this.render = function() {
+    originalRender();
+    if ($scope.page > 0 && $scope.page <= $scope.totalPages) {
+      $scope.pages = getPages($scope.page, $scope.totalPages);
+    }
+  };
+}])
+
+.constant('uibPaginationConfig', {
+  itemsPerPage: 10,
+  boundaryLinks: false,
+  boundaryLinkNumbers: false,
+  directionLinks: true,
+  firstText: 'First',
+  previousText: 'Previous',
+  nextText: 'Next',
+  lastText: 'Last',
+  rotate: true,
+  forceEllipses: false
+})
+
+.directive('uibPagination', ['$parse', 'uibPaginationConfig', function($parse, uibPaginationConfig) {
+  return {
+    scope: {
+      totalItems: '=',
+      firstText: '@',
+      previousText: '@',
+      nextText: '@',
+      lastText: '@',
+      ngDisabled:'='
+    },
+    require: ['uibPagination', '?ngModel'],
+    restrict: 'A',
+    controller: 'UibPaginationController',
+    controllerAs: 'pagination',
+    templateUrl: function(element, attrs) {
+      return attrs.templateUrl || 'uib/template/pagination/pagination.html';
+    },
+    link: function(scope, element, attrs, ctrls) {
+      element.addClass('pagination');
+      var paginationCtrl = ctrls[0], ngModelCtrl = ctrls[1];
+
+      if (!ngModelCtrl) {
+         return; // do nothing if no ng-model
+      }
+
+      paginationCtrl.init(ngModelCtrl, uibPaginationConfig);
+    }
+  };
+}]);
+
+/**
+ * The following features are still outstanding: animation as a
+ * function, placement as a function, inside, support for more triggers than
+ * just mouse enter/leave, html tooltips, and selector delegation.
+ */
+angular.module('ui.bootstrap.tooltip', ['ui.bootstrap.position', 'ui.bootstrap.stackedMap'])
+
+/**
+ * The $tooltip service creates tooltip- and popover-like directives as well as
+ * houses global options for them.
+ */
+.provider('$uibTooltip', function() {
+  // The default options tooltip and popover.
+  var defaultOptions = {
+    placement: 'top',
+    placementClassPrefix: '',
+    animation: true,
+    popupDelay: 0,
+    popupCloseDelay: 0,
+    useContentExp: false
+  };
+
+  // Default hide triggers for each show trigger
+  var triggerMap = {
+    'mouseenter': 'mouseleave',
+    'click': 'click',
+    'outsideClick': 'outsideClick',
+    'focus': 'blur',
+    'none': ''
+  };
+
+  // The options specified to the provider globally.
+  var globalOptions = {};
+
+  /**
+   * `options({})` allows global configuration of all tooltips in the
+   * application.
+   *
+   *   var app = angular.module( 'App', ['ui.bootstrap.tooltip'], function( $tooltipProvider ) {
+   *     // place tooltips left instead of top by default
+   *     $tooltipProvider.options( { placement: 'left' } );
+   *   });
+   */
+	this.options = function(value) {
+		angular.extend(globalOptions, value);
+	};
+
+  /**
+   * This allows you to extend the set of trigger mappings available. E.g.:
+   *
+   *   $tooltipProvider.setTriggers( { 'openTrigger': 'closeTrigger' } );
+   */
+  this.setTriggers = function setTriggers(triggers) {
+    angular.extend(triggerMap, triggers);
+  };
+
+  /**
+   * This is a helper function for translating camel-case to snake_case.
+   */
+  function snake_case(name) {
+    var regexp = /[A-Z]/g;
+    var separator = '-';
+    return name.replace(regexp, function(letter, pos) {
+      return (pos ? separator : '') + letter.toLowerCase();
+    });
+  }
+
+  /**
+   * Returns the actual instance of the $tooltip service.
+   * TODO support multiple triggers
+   */
+  this.$get = ['$window', '$compile', '$timeout', '$document', '$uibPosition', '$interpolate', '$rootScope', '$parse', '$$stackedMap', function($window, $compile, $timeout, $document, $position, $interpolate, $rootScope, $parse, $$stackedMap) {
+    var openedTooltips = $$stackedMap.createNew();
+    $document.on('keyup', keypressListener);
+
+    $rootScope.$on('$destroy', function() {
+      $document.off('keyup', keypressListener);
+    });
+
+    function keypressListener(e) {
+      if (e.which === 27) {
+        var last = openedTooltips.top();
+        if (last) {
+          last.value.close();
+          last = null;
+        }
+      }
+    }
+
+    return function $tooltip(ttType, prefix, defaultTriggerShow, options) {
+      options = angular.extend({}, defaultOptions, globalOptions, options);
+
+      /**
+       * Returns an object of show and hide triggers.
+       *
+       * If a trigger is supplied,
+       * it is used to show the tooltip; otherwise, it will use the `trigger`
+       * option passed to the `$tooltipProvider.options` method; else it will
+       * default to the trigger supplied to this directive factory.
+       *
+       * The hide trigger is based on the show trigger. If the `trigger` option
+       * was passed to the `$tooltipProvider.options` method, it will use the
+       * mapped trigger from `triggerMap` or the passed trigger if the map is
+       * undefined; otherwise, it uses the `triggerMap` value of the show
+       * trigger; else it will just use the show trigger.
+       */
+      function getTriggers(trigger) {
+        var show = (trigger || options.trigger || defaultTriggerShow).split(' ');
+        var hide = show.map(function(trigger) {
+          return triggerMap[trigger] || trigger;
+        });
+        return {
+          show: show,
+          hide: hide
+        };
+      }
+
+      var directiveName = snake_case(ttType);
+
+      var startSym = $interpolate.startSymbol();
+      var endSym = $interpolate.endSymbol();
+      var template =
+        '<div '+ directiveName + '-popup ' +
+          'uib-title="' + startSym + 'title' + endSym + '" ' +
+          (options.useContentExp ?
+            'content-exp="contentExp()" ' :
+            'content="' + startSym + 'content' + endSym + '" ') +
+          'origin-scope="origScope" ' +
+          'class="uib-position-measure ' + prefix + '" ' +
+          'tooltip-animation-class="fade"' +
+          'uib-tooltip-classes ' +
+          'ng-class="{ in: isOpen }" ' +
+          '>' +
+        '</div>';
+
+      return {
+        compile: function(tElem, tAttrs) {
+          var tooltipLinker = $compile(template);
+
+          return function link(scope, element, attrs, tooltipCtrl) {
+            var tooltip;
+            var tooltipLinkedScope;
+            var transitionTimeout;
+            var showTimeout;
+            var hideTimeout;
+            var positionTimeout;
+            var adjustmentTimeout;
+            var appendToBody = angular.isDefined(options.appendToBody) ? options.appendToBody : false;
+            var triggers = getTriggers(undefined);
+            var hasEnableExp = angular.isDefined(attrs[prefix + 'Enable']);
+            var ttScope = scope.$new(true);
+            var repositionScheduled = false;
+            var isOpenParse = angular.isDefined(attrs[prefix + 'IsOpen']) ? $parse(attrs[prefix + 'IsOpen']) : false;
+            var contentParse = options.useContentExp ? $parse(attrs[ttType]) : false;
+            var observers = [];
+            var lastPlacement;
+
+            var positionTooltip = function() {
+              // check if tooltip exists and is not empty
+              if (!tooltip || !tooltip.html()) { return; }
+
+              if (!positionTimeout) {
+                positionTimeout = $timeout(function() {
+                  var ttPosition = $position.positionElements(element, tooltip, ttScope.placement, appendToBody);
+                  var initialHeight = angular.isDefined(tooltip.offsetHeight) ? tooltip.offsetHeight : tooltip.prop('offsetHeight');
+                  var elementPos = appendToBody ? $position.offset(element) : $position.position(element);
+                  tooltip.css({ top: ttPosition.top + 'px', left: ttPosition.left + 'px' });
+                  var placementClasses = ttPosition.placement.split('-');
+
+                  if (!tooltip.hasClass(placementClasses[0])) {
+                    tooltip.removeClass(lastPlacement.split('-')[0]);
+                    tooltip.addClass(placementClasses[0]);
+                  }
+
+                  if (!tooltip.hasClass(options.placementClassPrefix + ttPosition.placement)) {
+                    tooltip.removeClass(options.placementClassPrefix + lastPlacement);
+                    tooltip.addClass(options.placementClassPrefix + ttPosition.placement);
+                  }
+
+                  adjustmentTimeout = $timeout(function() {
+                    var currentHeight = angular.isDefined(tooltip.offsetHeight) ? tooltip.offsetHeight : tooltip.prop('offsetHeight');
+                    var adjustment = $position.adjustTop(placementClasses, elementPos, initialHeight, currentHeight);
+                    if (adjustment) {
+                      tooltip.css(adjustment);
+                    }
+                    adjustmentTimeout = null;
+                  }, 0, false);
+
+                  // first time through tt element will have the
+                  // uib-position-measure class or if the placement
+                  // has changed we need to position the arrow.
+                  if (tooltip.hasClass('uib-position-measure')) {
+                    $position.positionArrow(tooltip, ttPosition.placement);
+                    tooltip.removeClass('uib-position-measure');
+                  } else if (lastPlacement !== ttPosition.placement) {
+                    $position.positionArrow(tooltip, ttPosition.placement);
+                  }
+                  lastPlacement = ttPosition.placement;
+
+                  positionTimeout = null;
+                }, 0, false);
+              }
+            };
+
+            // Set up the correct scope to allow transclusion later
+            ttScope.origScope = scope;
+
+            // By default, the tooltip is not open.
+            // TODO add ability to start tooltip opened
+            ttScope.isOpen = false;
+
+            function toggleTooltipBind() {
+              if (!ttScope.isOpen) {
+                showTooltipBind();
+              } else {
+                hideTooltipBind();
+              }
+            }
+
+            // Show the tooltip with delay if specified, otherwise show it immediately
+            function showTooltipBind() {
+              if (hasEnableExp && !scope.$eval(attrs[prefix + 'Enable'])) {
+                return;
+              }
+
+              cancelHide();
+              prepareTooltip();
+
+              if (ttScope.popupDelay) {
+                // Do nothing if the tooltip was already scheduled to pop-up.
+                // This happens if show is triggered multiple times before any hide is triggered.
+                if (!showTimeout) {
+                  showTimeout = $timeout(show, ttScope.popupDelay, false);
+                }
+              } else {
+                show();
+              }
+            }
+
+            function hideTooltipBind() {
+              cancelShow();
+
+              if (ttScope.popupCloseDelay) {
+                if (!hideTimeout) {
+                  hideTimeout = $timeout(hide, ttScope.popupCloseDelay, false);
+                }
+              } else {
+                hide();
+              }
+            }
+
+            // Show the tooltip popup element.
+            function show() {
+              cancelShow();
+              cancelHide();
+
+              // Don't show empty tooltips.
+              if (!ttScope.content) {
+                return angular.noop;
+              }
+
+              createTooltip();
+
+              // And show the tooltip.
+              ttScope.$evalAsync(function() {
+                ttScope.isOpen = true;
+                assignIsOpen(true);
+                positionTooltip();
+              });
+            }
+
+            function cancelShow() {
+              if (showTimeout) {
+                $timeout.cancel(showTimeout);
+                showTimeout = null;
+              }
+
+              if (positionTimeout) {
+                $timeout.cancel(positionTimeout);
+                positionTimeout = null;
+              }
+            }
+
+            // Hide the tooltip popup element.
+            function hide() {
+              if (!ttScope) {
+                return;
+              }
+
+              // First things first: we don't show it anymore.
+              ttScope.$evalAsync(function() {
+                if (ttScope) {
+                  ttScope.isOpen = false;
+                  assignIsOpen(false);
+                  // And now we remove it from the DOM. However, if we have animation, we
+                  // need to wait for it to expire beforehand.
+                  // FIXME: this is a placeholder for a port of the transitions library.
+                  // The fade transition in TWBS is 150ms.
+                  if (ttScope.animation) {
+                    if (!transitionTimeout) {
+                      transitionTimeout = $timeout(removeTooltip, 150, false);
+                    }
+                  } else {
+                    removeTooltip();
+                  }
+                }
+              });
+            }
+
+            function cancelHide() {
+              if (hideTimeout) {
+                $timeout.cancel(hideTimeout);
+                hideTimeout = null;
+              }
+
+              if (transitionTimeout) {
+                $timeout.cancel(transitionTimeout);
+                transitionTimeout = null;
+              }
+            }
+
+            function createTooltip() {
+              // There can only be one tooltip element per directive shown at once.
+              if (tooltip) {
+                return;
+              }
+
+              tooltipLinkedScope = ttScope.$new();
+              tooltip = tooltipLinker(tooltipLinkedScope, function(tooltip) {
+                if (appendToBody) {
+                  $document.find('body').append(tooltip);
+                } else {
+                  element.after(tooltip);
+                }
+              });
+
+              openedTooltips.add(ttScope, {
+                close: hide
+              });
+
+              prepObservers();
+            }
+
+            function removeTooltip() {
+              cancelShow();
+              cancelHide();
+              unregisterObservers();
+
+              if (tooltip) {
+                tooltip.remove();
+
+                tooltip = null;
+                if (adjustmentTimeout) {
+                  $timeout.cancel(adjustmentTimeout);
+                }
+              }
+
+              openedTooltips.remove(ttScope);
+
+              if (tooltipLinkedScope) {
+                tooltipLinkedScope.$destroy();
+                tooltipLinkedScope = null;
+              }
+            }
+
+            /**
+             * Set the initial scope values. Once
+             * the tooltip is created, the observers
+             * will be added to keep things in sync.
+             */
+            function prepareTooltip() {
+              ttScope.title = attrs[prefix + 'Title'];
+              if (contentParse) {
+                ttScope.content = contentParse(scope);
+              } else {
+                ttScope.content = attrs[ttType];
+              }
+
+              ttScope.popupClass = attrs[prefix + 'Class'];
+              ttScope.placement = angular.isDefined(attrs[prefix + 'Placement']) ? attrs[prefix + 'Placement'] : options.placement;
+              var placement = $position.parsePlacement(ttScope.placement);
+              lastPlacement = placement[1] ? placement[0] + '-' + placement[1] : placement[0];
+
+              var delay = parseInt(attrs[prefix + 'PopupDelay'], 10);
+              var closeDelay = parseInt(attrs[prefix + 'PopupCloseDelay'], 10);
+              ttScope.popupDelay = !isNaN(delay) ? delay : options.popupDelay;
+              ttScope.popupCloseDelay = !isNaN(closeDelay) ? closeDelay : options.popupCloseDelay;
+            }
+
+            function assignIsOpen(isOpen) {
+              if (isOpenParse && angular.isFunction(isOpenParse.assign)) {
+                isOpenParse.assign(scope, isOpen);
+              }
+            }
+
+            ttScope.contentExp = function() {
+              return ttScope.content;
+            };
+
+            /**
+             * Observe the relevant attributes.
+             */
+            attrs.$observe('disabled', function(val) {
+              if (val) {
+                cancelShow();
+              }
+
+              if (val && ttScope.isOpen) {
+                hide();
+              }
+            });
+
+            if (isOpenParse) {
+              scope.$watch(isOpenParse, function(val) {
+                if (ttScope && !val === ttScope.isOpen) {
+                  toggleTooltipBind();
+                }
+              });
+            }
+
+            function prepObservers() {
+              observers.length = 0;
+
+              if (contentParse) {
+                observers.push(
+                  scope.$watch(contentParse, function(val) {
+                    ttScope.content = val;
+                    if (!val && ttScope.isOpen) {
+                      hide();
+                    }
+                  })
+                );
+
+                observers.push(
+                  tooltipLinkedScope.$watch(function() {
+                    if (!repositionScheduled) {
+                      repositionScheduled = true;
+                      tooltipLinkedScope.$$postDigest(function() {
+                        repositionScheduled = false;
+                        if (ttScope && ttScope.isOpen) {
+                          positionTooltip();
+                        }
+                      });
+                    }
+                  })
+                );
+              } else {
+                observers.push(
+                  attrs.$observe(ttType, function(val) {
+                    ttScope.content = val;
+                    if (!val && ttScope.isOpen) {
+                      hide();
+                    } else {
+                      positionTooltip();
+                    }
+                  })
+                );
+              }
+
+              observers.push(
+                attrs.$observe(prefix + 'Title', function(val) {
+                  ttScope.title = val;
+                  if (ttScope.isOpen) {
+                    positionTooltip();
+                  }
+                })
+              );
+
+              observers.push(
+                attrs.$observe(prefix + 'Placement', function(val) {
+                  ttScope.placement = val ? val : options.placement;
+                  if (ttScope.isOpen) {
+                    positionTooltip();
+                  }
+                })
+              );
+            }
+
+            function unregisterObservers() {
+              if (observers.length) {
+                angular.forEach(observers, function(observer) {
+                  observer();
+                });
+                observers.length = 0;
+              }
+            }
+
+            // hide tooltips/popovers for outsideClick trigger
+            function bodyHideTooltipBind(e) {
+              if (!ttScope || !ttScope.isOpen || !tooltip) {
+                return;
+              }
+              // make sure the tooltip/popover link or tool tooltip/popover itself were not clicked
+              if (!element[0].contains(e.target) && !tooltip[0].contains(e.target)) {
+                hideTooltipBind();
+              }
+            }
+
+            // KeyboardEvent handler to hide the tooltip on Escape key press
+            function hideOnEscapeKey(e) {
+              if (e.which === 27) {
+                hideTooltipBind();
+              }
+            }
+
+            var unregisterTriggers = function() {
+              triggers.show.forEach(function(trigger) {
+                if (trigger === 'outsideClick') {
+                  element.off('click', toggleTooltipBind);
+                } else {
+                  element.off(trigger, showTooltipBind);
+                  element.off(trigger, toggleTooltipBind);
+                }
+                element.off('keypress', hideOnEscapeKey);
+              });
+              triggers.hide.forEach(function(trigger) {
+                if (trigger === 'outsideClick') {
+                  $document.off('click', bodyHideTooltipBind);
+                } else {
+                  element.off(trigger, hideTooltipBind);
+                }
+              });
+            };
+
+            function prepTriggers() {
+              var showTriggers = [], hideTriggers = [];
+              var val = scope.$eval(attrs[prefix + 'Trigger']);
+              unregisterTriggers();
+
+              if (angular.isObject(val)) {
+                Object.keys(val).forEach(function(key) {
+                  showTriggers.push(key);
+                  hideTriggers.push(val[key]);
+                });
+                triggers = {
+                  show: showTriggers,
+                  hide: hideTriggers
+                };
+              } else {
+                triggers = getTriggers(val);
+              }
+
+              if (triggers.show !== 'none') {
+                triggers.show.forEach(function(trigger, idx) {
+                  if (trigger === 'outsideClick') {
+                    element.on('click', toggleTooltipBind);
+                    $document.on('click', bodyHideTooltipBind);
+                  } else if (trigger === triggers.hide[idx]) {
+                    element.on(trigger, toggleTooltipBind);
+                  } else if (trigger) {
+                    element.on(trigger, showTooltipBind);
+                    element.on(triggers.hide[idx], hideTooltipBind);
+                  }
+                  element.on('keypress', hideOnEscapeKey);
+                });
+              }
+            }
+
+            prepTriggers();
+
+            var animation = scope.$eval(attrs[prefix + 'Animation']);
+            ttScope.animation = angular.isDefined(animation) ? !!animation : options.animation;
+
+            var appendToBodyVal;
+            var appendKey = prefix + 'AppendToBody';
+            if (appendKey in attrs && attrs[appendKey] === undefined) {
+              appendToBodyVal = true;
+            } else {
+              appendToBodyVal = scope.$eval(attrs[appendKey]);
+            }
+
+            appendToBody = angular.isDefined(appendToBodyVal) ? appendToBodyVal : appendToBody;
+
+            // Make sure tooltip is destroyed and removed.
+            scope.$on('$destroy', function onDestroyTooltip() {
+              unregisterTriggers();
+              removeTooltip();
+              ttScope = null;
+            });
+          };
+        }
+      };
+    };
+  }];
+})
+
+// This is mostly ngInclude code but with a custom scope
+.directive('uibTooltipTemplateTransclude', [
+         '$animate', '$sce', '$compile', '$templateRequest',
+function ($animate, $sce, $compile, $templateRequest) {
+  return {
+    link: function(scope, elem, attrs) {
+      var origScope = scope.$eval(attrs.tooltipTemplateTranscludeScope);
+
+      var changeCounter = 0,
+        currentScope,
+        previousElement,
+        currentElement;
+
+      var cleanupLastIncludeContent = function() {
+        if (previousElement) {
+          previousElement.remove();
+          previousElement = null;
+        }
+
+        if (currentScope) {
+          currentScope.$destroy();
+          currentScope = null;
+        }
+
+        if (currentElement) {
+          $animate.leave(currentElement).then(function() {
+            previousElement = null;
+          });
+          previousElement = currentElement;
+          currentElement = null;
+        }
+      };
+
+      scope.$watch($sce.parseAsResourceUrl(attrs.uibTooltipTemplateTransclude), function(src) {
+        var thisChangeId = ++changeCounter;
+
+        if (src) {
+          //set the 2nd param to true to ignore the template request error so that the inner
+          //contents and scope can be cleaned up.
+          $templateRequest(src, true).then(function(response) {
+            if (thisChangeId !== changeCounter) { return; }
+            var newScope = origScope.$new();
+            var template = response;
+
+            var clone = $compile(template)(newScope, function(clone) {
+              cleanupLastIncludeContent();
+              $animate.enter(clone, elem);
+            });
+
+            currentScope = newScope;
+            currentElement = clone;
+
+            currentScope.$emit('$includeContentLoaded', src);
+          }, function() {
+            if (thisChangeId === changeCounter) {
+              cleanupLastIncludeContent();
+              scope.$emit('$includeContentError', src);
+            }
+          });
+          scope.$emit('$includeContentRequested', src);
+        } else {
+          cleanupLastIncludeContent();
+        }
+      });
+
+      scope.$on('$destroy', cleanupLastIncludeContent);
+    }
+  };
+}])
+
+/**
+ * Note that it's intentional that these classes are *not* applied through $animate.
+ * They must not be animated as they're expected to be present on the tooltip on
+ * initialization.
+ */
+.directive('uibTooltipClasses', ['$uibPosition', function($uibPosition) {
+  return {
+    restrict: 'A',
+    link: function(scope, element, attrs) {
+      // need to set the primary position so the
+      // arrow has space during position measure.
+      // tooltip.positionTooltip()
+      if (scope.placement) {
+        // // There are no top-left etc... classes
+        // // in TWBS, so we need the primary position.
+        var position = $uibPosition.parsePlacement(scope.placement);
+        element.addClass(position[0]);
+      }
+
+      if (scope.popupClass) {
+        element.addClass(scope.popupClass);
+      }
+
+      if (scope.animation) {
+        element.addClass(attrs.tooltipAnimationClass);
+      }
+    }
+  };
+}])
+
+.directive('uibTooltipPopup', function() {
+  return {
+    restrict: 'A',
+    scope: { content: '@' },
+    templateUrl: 'uib/template/tooltip/tooltip-popup.html'
+  };
+})
+
+.directive('uibTooltip', [ '$uibTooltip', function($uibTooltip) {
+  return $uibTooltip('uibTooltip', 'tooltip', 'mouseenter');
+}])
+
+.directive('uibTooltipTemplatePopup', function() {
+  return {
+    restrict: 'A',
+    scope: { contentExp: '&', originScope: '&' },
+    templateUrl: 'uib/template/tooltip/tooltip-template-popup.html'
+  };
+})
+
+.directive('uibTooltipTemplate', ['$uibTooltip', function($uibTooltip) {
+  return $uibTooltip('uibTooltipTemplate', 'tooltip', 'mouseenter', {
+    useContentExp: true
+  });
+}])
+
+.directive('uibTooltipHtmlPopup', function() {
+  return {
+    restrict: 'A',
+    scope: { contentExp: '&' },
+    templateUrl: 'uib/template/tooltip/tooltip-html-popup.html'
+  };
+})
+
+.directive('uibTooltipHtml', ['$uibTooltip', function($uibTooltip) {
+  return $uibTooltip('uibTooltipHtml', 'tooltip', 'mouseenter', {
+    useContentExp: true
+  });
+}]);
+
+/**
+ * The following features are still outstanding: popup delay, animation as a
+ * function, placement as a function, inside, support for more triggers than
+ * just mouse enter/leave, and selector delegatation.
+ */
+angular.module('ui.bootstrap.popover', ['ui.bootstrap.tooltip'])
+
+.directive('uibPopoverTemplatePopup', function() {
+  return {
+    restrict: 'A',
+    scope: { uibTitle: '@', contentExp: '&', originScope: '&' },
+    templateUrl: 'uib/template/popover/popover-template.html'
+  };
+})
+
+.directive('uibPopoverTemplate', ['$uibTooltip', function($uibTooltip) {
+  return $uibTooltip('uibPopoverTemplate', 'popover', 'click', {
+    useContentExp: true
+  });
+}])
+
+.directive('uibPopoverHtmlPopup', function() {
+  return {
+    restrict: 'A',
+    scope: { contentExp: '&', uibTitle: '@' },
+    templateUrl: 'uib/template/popover/popover-html.html'
+  };
+})
+
+.directive('uibPopoverHtml', ['$uibTooltip', function($uibTooltip) {
+  return $uibTooltip('uibPopoverHtml', 'popover', 'click', {
+    useContentExp: true
+  });
+}])
+
+.directive('uibPopoverPopup', function() {
+  return {
+    restrict: 'A',
+    scope: { uibTitle: '@', content: '@' },
+    templateUrl: 'uib/template/popover/popover.html'
+  };
+})
+
+.directive('uibPopover', ['$uibTooltip', function($uibTooltip) {
+  return $uibTooltip('uibPopover', 'popover', 'click');
+}]);
+
+angular.module('ui.bootstrap.progressbar', [])
+
+.constant('uibProgressConfig', {
+  animate: true,
+  max: 100
+})
+
+.controller('UibProgressController', ['$scope', '$attrs', 'uibProgressConfig', function($scope, $attrs, progressConfig) {
+  var self = this,
+      animate = angular.isDefined($attrs.animate) ? $scope.$parent.$eval($attrs.animate) : progressConfig.animate;
+
+  this.bars = [];
+  $scope.max = getMaxOrDefault();
+
+  this.addBar = function(bar, element, attrs) {
+    if (!animate) {
+      element.css({'transition': 'none'});
+    }
+
+    this.bars.push(bar);
+
+    bar.max = getMaxOrDefault();
+    bar.title = attrs && angular.isDefined(attrs.title) ? attrs.title : 'progressbar';
+
+    bar.$watch('value', function(value) {
+      bar.recalculatePercentage();
+    });
+
+    bar.recalculatePercentage = function() {
+      var totalPercentage = self.bars.reduce(function(total, bar) {
+        bar.percent = +(100 * bar.value / bar.max).toFixed(2);
+        return total + bar.percent;
+      }, 0);
+
+      if (totalPercentage > 100) {
+        bar.percent -= totalPercentage - 100;
+      }
+    };
+
+    bar.$on('$destroy', function() {
+      element = null;
+      self.removeBar(bar);
+    });
+  };
+
+  this.removeBar = function(bar) {
+    this.bars.splice(this.bars.indexOf(bar), 1);
+    this.bars.forEach(function (bar) {
+      bar.recalculatePercentage();
+    });
+  };
+
+  //$attrs.$observe('maxParam', function(maxParam) {
+  $scope.$watch('maxParam', function(maxParam) {
+    self.bars.forEach(function(bar) {
+      bar.max = getMaxOrDefault();
+      bar.recalculatePercentage();
+    });
+  });
+
+  function getMaxOrDefault () {
+    return angular.isDefined($scope.maxParam) ? $scope.maxParam : progressConfig.max;
+  }
+}])
+
+.directive('uibProgress', function() {
+  return {
+    replace: true,
+    transclude: true,
+    controller: 'UibProgressController',
+    require: 'uibProgress',
+    scope: {
+      maxParam: '=?max'
+    },
+    templateUrl: 'uib/template/progressbar/progress.html'
+  };
+})
+
+.directive('uibBar', function() {
+  return {
+    replace: true,
+    transclude: true,
+    require: '^uibProgress',
+    scope: {
+      value: '=',
+      type: '@'
+    },
+    templateUrl: 'uib/template/progressbar/bar.html',
+    link: function(scope, element, attrs, progressCtrl) {
+      progressCtrl.addBar(scope, element, attrs);
+    }
+  };
+})
+
+.directive('uibProgressbar', function() {
+  return {
+    replace: true,
+    transclude: true,
+    controller: 'UibProgressController',
+    scope: {
+      value: '=',
+      maxParam: '=?max',
+      type: '@'
+    },
+    templateUrl: 'uib/template/progressbar/progressbar.html',
+    link: function(scope, element, attrs, progressCtrl) {
+      progressCtrl.addBar(scope, angular.element(element.children()[0]), {title: attrs.title});
+    }
+  };
+});
+
+angular.module('ui.bootstrap.rating', [])
+
+.constant('uibRatingConfig', {
+  max: 5,
+  stateOn: null,
+  stateOff: null,
+  enableReset: true,
+  titles: ['one', 'two', 'three', 'four', 'five']
+})
+
+.controller('UibRatingController', ['$scope', '$attrs', 'uibRatingConfig', function($scope, $attrs, ratingConfig) {
+  var ngModelCtrl = { $setViewValue: angular.noop },
+    self = this;
+
+  this.init = function(ngModelCtrl_) {
+    ngModelCtrl = ngModelCtrl_;
+    ngModelCtrl.$render = this.render;
+
+    ngModelCtrl.$formatters.push(function(value) {
+      if (angular.isNumber(value) && value << 0 !== value) {
+        value = Math.round(value);
+      }
+
+      return value;
+    });
+
+    this.stateOn = angular.isDefined($attrs.stateOn) ? $scope.$parent.$eval($attrs.stateOn) : ratingConfig.stateOn;
+    this.stateOff = angular.isDefined($attrs.stateOff) ? $scope.$parent.$eval($attrs.stateOff) : ratingConfig.stateOff;
+    this.enableReset = angular.isDefined($attrs.enableReset) ?
+      $scope.$parent.$eval($attrs.enableReset) : ratingConfig.enableReset;
+    var tmpTitles = angular.isDefined($attrs.titles) ? $scope.$parent.$eval($attrs.titles) : ratingConfig.titles;
+    this.titles = angular.isArray(tmpTitles) && tmpTitles.length > 0 ?
+      tmpTitles : ratingConfig.titles;
+
+    var ratingStates = angular.isDefined($attrs.ratingStates) ?
+      $scope.$parent.$eval($attrs.ratingStates) :
+      new Array(angular.isDefined($attrs.max) ? $scope.$parent.$eval($attrs.max) : ratingConfig.max);
+    $scope.range = this.buildTemplateObjects(ratingStates);
+  };
+
+  this.buildTemplateObjects = function(states) {
+    for (var i = 0, n = states.length; i < n; i++) {
+      states[i] = angular.extend({ index: i }, { stateOn: this.stateOn, stateOff: this.stateOff, title: this.getTitle(i) }, states[i]);
+    }
+    return states;
+  };
+
+  this.getTitle = function(index) {
+    if (index >= this.titles.length) {
+      return index + 1;
+    }
+
+    return this.titles[index];
+  };
+
+  $scope.rate = function(value) {
+    if (!$scope.readonly && value >= 0 && value <= $scope.range.length) {
+      var newViewValue = self.enableReset && ngModelCtrl.$viewValue === value ? 0 : value;
+      ngModelCtrl.$setViewValue(newViewValue);
+      ngModelCtrl.$render();
+    }
+  };
+
+  $scope.enter = function(value) {
+    if (!$scope.readonly) {
+      $scope.value = value;
+    }
+    $scope.onHover({value: value});
+  };
+
+  $scope.reset = function() {
+    $scope.value = ngModelCtrl.$viewValue;
+    $scope.onLeave();
+  };
+
+  $scope.onKeydown = function(evt) {
+    if (/(37|38|39|40)/.test(evt.which)) {
+      evt.preventDefault();
+      evt.stopPropagation();
+      $scope.rate($scope.value + (evt.which === 38 || evt.which === 39 ? 1 : -1));
+    }
+  };
+
+  this.render = function() {
+    $scope.value = ngModelCtrl.$viewValue;
+    $scope.title = self.getTitle($scope.value - 1);
+  };
+}])
+
+.directive('uibRating', function() {
+  return {
+    require: ['uibRating', 'ngModel'],
+    restrict: 'A',
+    scope: {
+      readonly: '=?readOnly',
+      onHover: '&',
+      onLeave: '&'
+    },
+    controller: 'UibRatingController',
+    templateUrl: 'uib/template/rating/rating.html',
+    link: function(scope, element, attrs, ctrls) {
+      var ratingCtrl = ctrls[0], ngModelCtrl = ctrls[1];
+      ratingCtrl.init(ngModelCtrl);
+    }
+  };
+});
+
+angular.module('ui.bootstrap.tabs', [])
+
+.controller('UibTabsetController', ['$scope', function ($scope) {
+  var ctrl = this,
+    oldIndex;
+  ctrl.tabs = [];
+
+  ctrl.select = function(index, evt) {
+    if (!destroyed) {
+      var previousIndex = findTabIndex(oldIndex);
+      var previousSelected = ctrl.tabs[previousIndex];
+      if (previousSelected) {
+        previousSelected.tab.onDeselect({
+          $event: evt,
+          $selectedIndex: index
+        });
+        if (evt && evt.isDefaultPrevented()) {
+          return;
+        }
+        previousSelected.tab.active = false;
+      }
+
+      var selected = ctrl.tabs[index];
+      if (selected) {
+        selected.tab.onSelect({
+          $event: evt
+        });
+        selected.tab.active = true;
+        ctrl.active = selected.index;
+        oldIndex = selected.index;
+      } else if (!selected && angular.isDefined(oldIndex)) {
+        ctrl.active = null;
+        oldIndex = null;
+      }
+    }
+  };
+
+  ctrl.addTab = function addTab(tab) {
+    ctrl.tabs.push({
+      tab: tab,
+      index: tab.index
+    });
+    ctrl.tabs.sort(function(t1, t2) {
+      if (t1.index > t2.index) {
+        return 1;
+      }
+
+      if (t1.index < t2.index) {
+        return -1;
+      }
+
+      return 0;
+    });
+
+    if (tab.index === ctrl.active || !angular.isDefined(ctrl.active) && ctrl.tabs.length === 1) {
+      var newActiveIndex = findTabIndex(tab.index);
+      ctrl.select(newActiveIndex);
+    }
+  };
+
+  ctrl.removeTab = function removeTab(tab) {
+    var index;
+    for (var i = 0; i < ctrl.tabs.length; i++) {
+      if (ctrl.tabs[i].tab === tab) {
+        index = i;
+        break;
+      }
+    }
+
+    if (ctrl.tabs[index].index === ctrl.active) {
+      var newActiveTabIndex = index === ctrl.tabs.length - 1 ?
+        index - 1 : index + 1 % ctrl.tabs.length;
+      ctrl.select(newActiveTabIndex);
+    }
+
+    ctrl.tabs.splice(index, 1);
+  };
+
+  $scope.$watch('tabset.active', function(val) {
+    if (angular.isDefined(val) && val !== oldIndex) {
+      ctrl.select(findTabIndex(val));
+    }
+  });
+
+  var destroyed;
+  $scope.$on('$destroy', function() {
+    destroyed = true;
+  });
+
+  function findTabIndex(index) {
+    for (var i = 0; i < ctrl.tabs.length; i++) {
+      if (ctrl.tabs[i].index === index) {
+        return i;
+      }
+    }
+  }
+}])
+
+.directive('uibTabset', function() {
+  return {
+    transclude: true,
+    replace: true,
+    scope: {},
+    bindToController: {
+      active: '=?',
+      type: '@'
+    },
+    controller: 'UibTabsetController',
+    controllerAs: 'tabset',
+    templateUrl: function(element, attrs) {
+      return attrs.templateUrl || 'uib/template/tabs/tabset.html';
+    },
+    link: function(scope, element, attrs) {
+      scope.vertical = angular.isDefined(attrs.vertical) ?
+        scope.$parent.$eval(attrs.vertical) : false;
+      scope.justified = angular.isDefined(attrs.justified) ?
+        scope.$parent.$eval(attrs.justified) : false;
+    }
+  };
+})
+
+.directive('uibTab', ['$parse', function($parse) {
+  return {
+    require: '^uibTabset',
+    replace: true,
+    templateUrl: function(element, attrs) {
+      return attrs.templateUrl || 'uib/template/tabs/tab.html';
+    },
+    transclude: true,
+    scope: {
+      heading: '@',
+      index: '=?',
+      classes: '@?',
+      onSelect: '&select', //This callback is called in contentHeadingTransclude
+                          //once it inserts the tab's content into the dom
+      onDeselect: '&deselect'
+    },
+    controller: function() {
+      //Empty controller so other directives can require being 'under' a tab
+    },
+    controllerAs: 'tab',
+    link: function(scope, elm, attrs, tabsetCtrl, transclude) {
+      scope.disabled = false;
+      if (attrs.disable) {
+        scope.$parent.$watch($parse(attrs.disable), function(value) {
+          scope.disabled = !! value;
+        });
+      }
+
+      if (angular.isUndefined(attrs.index)) {
+        if (tabsetCtrl.tabs && tabsetCtrl.tabs.length) {
+          scope.index = Math.max.apply(null, tabsetCtrl.tabs.map(function(t) { return t.index; })) + 1;
+        } else {
+          scope.index = 0;
+        }
+      }
+
+      if (angular.isUndefined(attrs.classes)) {
+        scope.classes = '';
+      }
+
+      scope.select = function(evt) {
+        if (!scope.disabled) {
+          var index;
+          for (var i = 0; i < tabsetCtrl.tabs.length; i++) {
+            if (tabsetCtrl.tabs[i].tab === scope) {
+              index = i;
+              break;
+            }
+          }
+
+          tabsetCtrl.select(index, evt);
+        }
+      };
+
+      tabsetCtrl.addTab(scope);
+      scope.$on('$destroy', function() {
+        tabsetCtrl.removeTab(scope);
+      });
+
+      //We need to transclude later, once the content container is ready.
+      //when this link happens, we're inside a tab heading.
+      scope.$transcludeFn = transclude;
+    }
+  };
+}])
+
+.directive('uibTabHeadingTransclude', function() {
+  return {
+    restrict: 'A',
+    require: '^uibTab',
+    link: function(scope, elm) {
+      scope.$watch('headingElement', function updateHeadingElement(heading) {
+        if (heading) {
+          elm.html('');
+          elm.append(heading);
+        }
+      });
+    }
+  };
+})
+
+.directive('uibTabContentTransclude', function() {
+  return {
+    restrict: 'A',
+    require: '^uibTabset',
+    link: function(scope, elm, attrs) {
+      var tab = scope.$eval(attrs.uibTabContentTransclude).tab;
+
+      //Now our tab is ready to be transcluded: both the tab heading area
+      //and the tab content area are loaded.  Transclude 'em both.
+      tab.$transcludeFn(tab.$parent, function(contents) {
+        angular.forEach(contents, function(node) {
+          if (isTabHeading(node)) {
+            //Let tabHeadingTransclude know.
+            tab.headingElement = node;
+          } else {
+            elm.append(node);
+          }
+        });
+      });
+    }
+  };
+
+  function isTabHeading(node) {
+    return node.tagName && (
+      node.hasAttribute('uib-tab-heading') ||
+      node.hasAttribute('data-uib-tab-heading') ||
+      node.hasAttribute('x-uib-tab-heading') ||
+      node.tagName.toLowerCase() === 'uib-tab-heading' ||
+      node.tagName.toLowerCase() === 'data-uib-tab-heading' ||
+      node.tagName.toLowerCase() === 'x-uib-tab-heading' ||
+      node.tagName.toLowerCase() === 'uib:tab-heading'
+    );
+  }
+});
+
+angular.module('ui.bootstrap.timepicker', [])
+
+.constant('uibTimepickerConfig', {
+  hourStep: 1,
+  minuteStep: 1,
+  secondStep: 1,
+  showMeridian: true,
+  showSeconds: false,
+  meridians: null,
+  readonlyInput: false,
+  mousewheel: true,
+  arrowkeys: true,
+  showSpinners: true,
+  templateUrl: 'uib/template/timepicker/timepicker.html'
+})
+
+.controller('UibTimepickerController', ['$scope', '$element', '$attrs', '$parse', '$log', '$locale', 'uibTimepickerConfig', function($scope, $element, $attrs, $parse, $log, $locale, timepickerConfig) {
+  var hoursModelCtrl, minutesModelCtrl, secondsModelCtrl;
+  var selected = new Date(),
+    watchers = [],
+    ngModelCtrl = { $setViewValue: angular.noop }, // nullModelCtrl
+    meridians = angular.isDefined($attrs.meridians) ? $scope.$parent.$eval($attrs.meridians) : timepickerConfig.meridians || $locale.DATETIME_FORMATS.AMPMS,
+    padHours = angular.isDefined($attrs.padHours) ? $scope.$parent.$eval($attrs.padHours) : true;
+
+  $scope.tabindex = angular.isDefined($attrs.tabindex) ? $attrs.tabindex : 0;
+  $element.removeAttr('tabindex');
+
+  this.init = function(ngModelCtrl_, inputs) {
+    ngModelCtrl = ngModelCtrl_;
+    ngModelCtrl.$render = this.render;
+
+    ngModelCtrl.$formatters.unshift(function(modelValue) {
+      return modelValue ? new Date(modelValue) : null;
+    });
+
+    var hoursInputEl = inputs.eq(0),
+        minutesInputEl = inputs.eq(1),
+        secondsInputEl = inputs.eq(2);
+
+    hoursModelCtrl = hoursInputEl.controller('ngModel');
+    minutesModelCtrl = minutesInputEl.controller('ngModel');
+    secondsModelCtrl = secondsInputEl.controller('ngModel');
+
+    var mousewheel = angular.isDefined($attrs.mousewheel) ? $scope.$parent.$eval($attrs.mousewheel) : timepickerConfig.mousewheel;
+
+    if (mousewheel) {
+      this.setupMousewheelEvents(hoursInputEl, minutesInputEl, secondsInputEl);
+    }
+
+    var arrowkeys = angular.isDefined($attrs.arrowkeys) ? $scope.$parent.$eval($attrs.arrowkeys) : timepickerConfig.arrowkeys;
+    if (arrowkeys) {
+      this.setupArrowkeyEvents(hoursInputEl, minutesInputEl, secondsInputEl);
+    }
+
+    $scope.readonlyInput = angular.isDefined($attrs.readonlyInput) ? $scope.$parent.$eval($attrs.readonlyInput) : timepickerConfig.readonlyInput;
+    this.setupInputEvents(hoursInputEl, minutesInputEl, secondsInputEl);
+  };
+
+  var hourStep = timepickerConfig.hourStep;
+  if ($attrs.hourStep) {
+    watchers.push($scope.$parent.$watch($parse($attrs.hourStep), function(value) {
+      hourStep = +value;
+    }));
+  }
+
+  var minuteStep = timepickerConfig.minuteStep;
+  if ($attrs.minuteStep) {
+    watchers.push($scope.$parent.$watch($parse($attrs.minuteStep), function(value) {
+      minuteStep = +value;
+    }));
+  }
+
+  var min;
+  watchers.push($scope.$parent.$watch($parse($attrs.min), function(value) {
+    var dt = new Date(value);
+    min = isNaN(dt) ? undefined : dt;
+  }));
+
+  var max;
+  watchers.push($scope.$parent.$watch($parse($attrs.max), function(value) {
+    var dt = new Date(value);
+    max = isNaN(dt) ? undefined : dt;
+  }));
+
+  var disabled = false;
+  if ($attrs.ngDisabled) {
+    watchers.push($scope.$parent.$watch($parse($attrs.ngDisabled), function(value) {
+      disabled = value;
+    }));
+  }
+
+  $scope.noIncrementHours = function() {
+    var incrementedSelected = addMinutes(selected, hourStep * 60);
+    return disabled || incrementedSelected > max ||
+      incrementedSelected < selected && incrementedSelected < min;
+  };
+
+  $scope.noDecrementHours = function() {
+    var decrementedSelected = addMinutes(selected, -hourStep * 60);
+    return disabled || decrementedSelected < min ||
+      decrementedSelected > selected && decrementedSelected > max;
+  };
+
+  $scope.noIncrementMinutes = function() {
+    var incrementedSelected = addMinutes(selected, minuteStep);
+    return disabled || incrementedSelected > max ||
+      incrementedSelected < selected && incrementedSelected < min;
+  };
+
+  $scope.noDecrementMinutes = function() {
+    var decrementedSelected = addMinutes(selected, -minuteStep);
+    return disabled || decrementedSelected < min ||
+      decrementedSelected > selected && decrementedSelected > max;
+  };
+
+  $scope.noIncrementSeconds = function() {
+    var incrementedSelected = addSeconds(selected, secondStep);
+    return disabled || incrementedSelected > max ||
+      incrementedSelected < selected && incrementedSelected < min;
+  };
+
+  $scope.noDecrementSeconds = function() {
+    var decrementedSelected = addSeconds(selected, -secondStep);
+    return disabled || decrementedSelected < min ||
+      decrementedSelected > selected && decrementedSelected > max;
+  };
+
+  $scope.noToggleMeridian = function() {
+    if (selected.getHours() < 12) {
+      return disabled || addMinutes(selected, 12 * 60) > max;
+    }
+
+    return disabled || addMinutes(selected, -12 * 60) < min;
+  };
+
+  var secondStep = timepickerConfig.secondStep;
+  if ($attrs.secondStep) {
+    watchers.push($scope.$parent.$watch($parse($attrs.secondStep), function(value) {
+      secondStep = +value;
+    }));
+  }
+
+  $scope.showSeconds = timepickerConfig.showSeconds;
+  if ($attrs.showSeconds) {
+    watchers.push($scope.$parent.$watch($parse($attrs.showSeconds), function(value) {
+      $scope.showSeconds = !!value;
+    }));
+  }
+
+  // 12H / 24H mode
+  $scope.showMeridian = timepickerConfig.showMeridian;
+  if ($attrs.showMeridian) {
+    watchers.push($scope.$parent.$watch($parse($attrs.showMeridian), function(value) {
+      $scope.showMeridian = !!value;
+
+      if (ngModelCtrl.$error.time) {
+        // Evaluate from template
+        var hours = getHoursFromTemplate(), minutes = getMinutesFromTemplate();
+        if (angular.isDefined(hours) && angular.isDefined(minutes)) {
+          selected.setHours(hours);
+          refresh();
+        }
+      } else {
+        updateTemplate();
+      }
+    }));
+  }
+
+  // Get $scope.hours in 24H mode if valid
+  function getHoursFromTemplate() {
+    var hours = +$scope.hours;
+    var valid = $scope.showMeridian ? hours > 0 && hours < 13 :
+      hours >= 0 && hours < 24;
+    if (!valid || $scope.hours === '') {
+      return undefined;
+    }
... 75637 lines suppressed ...