From fb0f9d56bc811e8aea02697fd426eca181251596 Mon Sep 17 00:00:00 2001 From: Matt Date: Thu, 16 Feb 2017 22:20:42 -0500 Subject: [PATCH 01/30] Update run.md Minor grammar cleanup. --- compose/reference/run.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/compose/reference/run.md b/compose/reference/run.md index 5717694f66..260a6319e2 100644 --- a/compose/reference/run.md +++ b/compose/reference/run.md @@ -1,6 +1,6 @@ --- description: Runs a one-off command on a service. -keywords: fig, composition, compose, docker, orchestration, cli, run +keywords: fig, composition, compose, docker, orchestration, cli, run title: docker-compose run --- @@ -26,24 +26,24 @@ Runs a one-time command against a service. For example, the following command st docker-compose run web bash -Commands you use with `run` start in new containers with the same configuration as defined by the service' configuration. This means the container has the same volumes, links, as defined in the configuration file. There are two differences though. +Commands you use with `run` start in new containers with the configuration defined by the service's configuration. This means that the resulting container has the same volumes, links, etc., as defined in the configuration file. However, there are two important differences. First, the command passed by `run` overrides the command defined in the service configuration. For example, if the `web` service configuration is started with `bash`, then `docker-compose run web python app.py` overrides it with `python app.py`. -The second difference is the `docker-compose run` command does not create any of the ports specified in the service configuration. This prevents the port collisions with already open ports. If you *do want* the service's ports created and mapped to the host, specify the `--service-ports` flag: +The second difference is that the `docker-compose run` command does not create any of the ports specified in the service configuration. This prevents port collisions with already-open ports. If you *do want* the service's ports to be created and mapped to the host, specify the `--service-ports` flag: docker-compose run --service-ports web python manage.py shell -Alternatively manual port mapping can be specified. Same as when running Docker's `run` command - using `--publish` or `-p` options: +Alternatively, manual port mapping can be specified with the `--publish` or `-p` options, just as when using `docker run`: docker-compose run --publish 8080:80 -p 2022:22 -p 127.0.0.1:2021:21 web python manage.py shell -If you start a service configured with links, the `run` command first checks to see if the linked service is running and starts the service if it is stopped. Once all the linked services are running, the `run` executes the command you passed it. So, for example, you could run: +If you start a service configured with links, the `run` command first checks to see if the linked service is running and starts the service if it is stopped. Once all the linked services are running, the `run` executes the command you passed it. For example, you could run: docker-compose run db psql -h db -U docker -This would open up an interactive PostgreSQL shell for the linked `db` container. +This will open an interactive PostgreSQL shell for the linked `db` container. -If you do not want the `run` command to start linked containers, specify the `--no-deps` flag: +If you do not want the `run` command to start linked containers, use the `--no-deps` flag: docker-compose run --no-deps web python manage.py shell From 3f293f1060919d8da2555f29a2a57f6dfb233956 Mon Sep 17 00:00:00 2001 From: scjane Date: Tue, 21 Feb 2017 15:24:40 +0800 Subject: [PATCH 02/30] Update apparmor.md I'm a little confused about which one is better to be used here, a period (.) or a colon (:), as a command is given below. Or both are OK, and we only have to keep consistency in a single page. --- engine/security/apparmor.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/security/apparmor.md b/engine/security/apparmor.md index 202a7702ca..a2b36acc33 100644 --- a/engine/security/apparmor.md +++ b/engine/security/apparmor.md @@ -173,7 +173,7 @@ profile docker-nginx flags=(attach_disconnected,mediate_deleted) { -p 80:80 -d --name apparmor-nginx nginx ``` -4. Exec into the running container +4. Exec into the running container. ```bash $ docker exec -it apparmor-nginx bash From 39eb8edf8a87f403a69f73a45d8bfd035bb27966 Mon Sep 17 00:00:00 2001 From: scjane Date: Thu, 23 Feb 2017 14:03:06 +0800 Subject: [PATCH 03/30] Update apparmor.md Fixed the indentation for the codeblock (indented by 4 spaces). Thank you for your careful review. --- engine/security/apparmor.md | 48 ++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/engine/security/apparmor.md b/engine/security/apparmor.md index a2b36acc33..d5bdb8dd2d 100644 --- a/engine/security/apparmor.md +++ b/engine/security/apparmor.md @@ -155,48 +155,48 @@ profile docker-nginx flags=(attach_disconnected,mediate_deleted) { 1. Save the custom profile to disk in the `/etc/apparmor.d/containers/docker-nginx` file. - The file path in this example is not a requirement. In production, you could - use another. + The file path in this example is not a requirement. In production, you could + use another. 2. Load the profile. - ```bash - $ sudo apparmor_parser -r -W /etc/apparmor.d/containers/docker-nginx - ``` + ```bash + $ sudo apparmor_parser -r -W /etc/apparmor.d/containers/docker-nginx + ``` 3. Run a container with the profile. - To run nginx in detached mode: + To run nginx in detached mode: - ```bash - $ docker run --security-opt "apparmor=docker-nginx" \ + ```bash + $ docker run --security-opt "apparmor=docker-nginx" \ -p 80:80 -d --name apparmor-nginx nginx - ``` + ``` 4. Exec into the running container. - ```bash - $ docker exec -it apparmor-nginx bash - ``` + ```bash + $ docker exec -it apparmor-nginx bash + ``` 5. Try some operations to test the profile. - ```bash - root@6da5a2a930b9:~# ping 8.8.8.8 - ping: Lacking privilege for raw socket. + ```bash + root@6da5a2a930b9:~# ping 8.8.8.8 + ping: Lacking privilege for raw socket. - root@6da5a2a930b9:/# top - bash: /usr/bin/top: Permission denied + root@6da5a2a930b9:/# top + bash: /usr/bin/top: Permission denied - root@6da5a2a930b9:~# touch ~/thing - touch: cannot touch 'thing': Permission denied + root@6da5a2a930b9:~# touch ~/thing + touch: cannot touch 'thing': Permission denied - root@6da5a2a930b9:/# sh - bash: /bin/sh: Permission denied + root@6da5a2a930b9:/# sh + bash: /bin/sh: Permission denied - root@6da5a2a930b9:/# dash - bash: /bin/dash: Permission denied - ``` + root@6da5a2a930b9:/# dash + bash: /bin/dash: Permission denied + ``` Congrats! You just deployed a container secured with a custom apparmor profile! From 5d83182b6582ac96738e4b89425c01816ec471b4 Mon Sep 17 00:00:00 2001 From: Michael Kalish Date: Sun, 26 Feb 2017 18:04:55 -0500 Subject: [PATCH 04/30] Replacing service with secret --- engine/swarm/secrets.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/swarm/secrets.md b/engine/swarm/secrets.md index 29d50817ea..12e2a966d9 100644 --- a/engine/swarm/secrets.md +++ b/engine/swarm/secrets.md @@ -82,7 +82,7 @@ Use these links to read about specific commands, or continue to the - [`docker secret create`](../reference/commandline/secret_create.md) - [`docker secret inspect`](../reference/commandline/secret_inspect.md) -- [`docker service ls`](../reference/commandline/secret_ls.md) +- [`docker secret ls`](../reference/commandline/secret_ls.md) - [`docker secret rm`](../reference/commandline/secret_rm.md) - [`--secret`](../reference/commandline/service_create.md#create-a-service-with-secrets) flag for `docker service create` - [`--secret-add` and `--secret-rm`](../reference/commandline/service_update.md#adding-and-removing-secrets) flags for `docker service update` From 94cdaba893d932e7db38bacf97751a74462de6f1 Mon Sep 17 00:00:00 2001 From: Olexandr Shalakhin Date: Tue, 28 Feb 2017 20:58:25 +0200 Subject: [PATCH 05/30] Update networking.md fix typo with triple "m" for command word --- docker-for-mac/networking.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-for-mac/networking.md b/docker-for-mac/networking.md index 2bdd57f0d5..466541cb94 100644 --- a/docker-for-mac/networking.md +++ b/docker-for-mac/networking.md @@ -112,7 +112,7 @@ container to random ports on the host. docker run -d -P --name webserver nginx -See the [run commmand](/engine/reference/commandline/run.md) for more details on +See the [run command](/engine/reference/commandline/run.md) for more details on publish options used with `docker run`. #### A view into implementation From d53941fa43089f0feda6b8f8fa5dc5f0f59f42c5 Mon Sep 17 00:00:00 2001 From: Matt Date: Tue, 28 Feb 2017 21:30:53 -0500 Subject: [PATCH 06/30] Update run.md Address PR feedback. --- compose/reference/run.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compose/reference/run.md b/compose/reference/run.md index 260a6319e2..aeb72b07d1 100644 --- a/compose/reference/run.md +++ b/compose/reference/run.md @@ -26,7 +26,7 @@ Runs a one-time command against a service. For example, the following command st docker-compose run web bash -Commands you use with `run` start in new containers with the configuration defined by the service's configuration. This means that the resulting container has the same volumes, links, etc., as defined in the configuration file. However, there are two important differences. +Commands you use with `run` start in new containers with configuration defined by that of the service, including volumes, links, and other details. However, there are two important differences. First, the command passed by `run` overrides the command defined in the service configuration. For example, if the `web` service configuration is started with `bash`, then `docker-compose run web python app.py` overrides it with `python app.py`. From 9c37a9772103a441fbbcf2df85f77f51e98ad0e9 Mon Sep 17 00:00:00 2001 From: Ralf Lang Date: Wed, 1 Mar 2017 15:07:20 +0100 Subject: [PATCH 07/30] There is no OpenSuSE and there never was though we had SuSE and S.u.S.E. --- engine/installation/linux/suse.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/installation/linux/suse.md b/engine/installation/linux/suse.md index 1c0fd4d0ef..ddc6190370 100644 --- a/engine/installation/linux/suse.md +++ b/engine/installation/linux/suse.md @@ -17,7 +17,7 @@ To get started with Docker on OpenSUSE or SLES, make sure you To install Docker, you need the 64-bit version one of the following: -- OpenSuSE Leap 42.x +- OpenSUSE Leap 42.x - SLES 12.x ### Remove unofficial Docker packages From e70ef7c2f2f3f633f3f070004f95eabde075dfdf Mon Sep 17 00:00:00 2001 From: Luke Waite Date: Wed, 1 Mar 2017 10:01:41 -0500 Subject: [PATCH 08/30] Update install instructions to latest version --- machine/install-machine.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/machine/install-machine.md b/machine/install-machine.md index cce40ce10a..5be9bdc8c4 100644 --- a/machine/install-machine.md +++ b/machine/install-machine.md @@ -25,14 +25,14 @@ docker/machine release page on GitHub. If you are running on **macOS**: ```console - $ curl -L https://github.com/docker/machine/releases/download/v0.9.0/docker-machine-`uname -s`-`uname -m` >/usr/local/bin/docker-machine && \ + $ curl -L https://github.com/docker/machine/releases/download/v0.10.0/docker-machine-`uname -s`-`uname -m` >/usr/local/bin/docker-machine && \ chmod +x /usr/local/bin/docker-machine ``` If you are running on **Linux**: ```console - $ curl -L https://github.com/docker/machine/releases/download/v0.9.0/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine && + $ curl -L https://github.com/docker/machine/releases/download/v0.10.0/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine && chmod +x /tmp/docker-machine && sudo cp /tmp/docker-machine /usr/local/bin/docker-machine ``` @@ -41,7 +41,7 @@ docker/machine release page on GitHub. ```console $ if [[ ! -d "$HOME/bin" ]]; then mkdir -p "$HOME/bin"; fi && \ - curl -L https://github.com/docker/machine/releases/download/v0.9.0/docker-machine-Windows-x86_64.exe > "$HOME/bin/docker-machine.exe" && \ + curl -L https://github.com/docker/machine/releases/download/v0.10.0/docker-machine-Windows-x86_64.exe > "$HOME/bin/docker-machine.exe" && \ chmod +x "$HOME/bin/docker-machine.exe" ``` @@ -50,7 +50,7 @@ docker/machine release page on GitHub. 3. Check the installation by displaying the Machine version: $ docker-machine version - docker-machine version 0.8.2, build e18a919 + docker-machine version 0.10.0, build 76ed2a6 ## Installing bash completion scripts From 713699ccaa12db830c23f6e94c0d8213dbf7dd88 Mon Sep 17 00:00:00 2001 From: Wang Jie Date: Thu, 2 Mar 2017 04:25:59 +0800 Subject: [PATCH 09/30] Update work_issue.md (#2030) Change "re-start" to "restart". Though not included in "Prefered usages" in the documentation guide, but I think "restart" is better and used more frequently. Besides, some other docs here, such as "Keep containers alive during daemon downtime" of "Admin Guide", also use "restart". --- opensource/kitematic/work_issue.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/opensource/kitematic/work_issue.md b/opensource/kitematic/work_issue.md index 21acad2fca..e5d308ecf0 100644 --- a/opensource/kitematic/work_issue.md +++ b/opensource/kitematic/work_issue.md @@ -47,7 +47,7 @@ To do this, edit the container `General Settings` layout. ![Javascript to display container id in kitematic](images/settings-code-example.png) -5. Save the code changes, re-start Kitematic. +5. Save the code changes, restart Kitematic. ``` $ npm start @@ -77,4 +77,4 @@ To do this, edit the container `General Settings` layout. ## Where to go next -At this point, you are ready to [Review your branch and create a pull request](create_pr.md) to merge your new feature into Kitematic. \ No newline at end of file +At this point, you are ready to [Review your branch and create a pull request](create_pr.md) to merge your new feature into Kitematic. From 766f10be098016b628c3967ead947f4e0332875e Mon Sep 17 00:00:00 2001 From: Wang Jie Date: Thu, 2 Mar 2017 04:26:18 +0800 Subject: [PATCH 10/30] Update create_pr.md (#2015) --- opensource/kitematic/create_pr.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/opensource/kitematic/create_pr.md b/opensource/kitematic/create_pr.md index e9e0ccce78..1c784b0f7c 100644 --- a/opensource/kitematic/create_pr.md +++ b/opensource/kitematic/create_pr.md @@ -53,8 +53,8 @@ Once you've cleaned up your commits: Congratulations! You've created your first pull request to Kitematic! -The next step in this process is to participate your PR's review. To learn more, and try another development exercise, see [where to learn more](next_steps.md) . +The next step in this process is to participate in your PR's review. To learn more, and try another development exercise, see [where to learn more](next_steps.md) . \ No newline at end of file +review . --> From 6f2d40001111621a8a0a02a3b9ad935ab74dd10f Mon Sep 17 00:00:00 2001 From: Wang Jie Date: Thu, 2 Mar 2017 04:26:38 +0800 Subject: [PATCH 11/30] Update work_issue.md (#2013) Change "id" to "ID" except for those in code. --- opensource/kitematic/work_issue.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/opensource/kitematic/work_issue.md b/opensource/kitematic/work_issue.md index e5d308ecf0..ff1f8e7070 100644 --- a/opensource/kitematic/work_issue.md +++ b/opensource/kitematic/work_issue.md @@ -4,7 +4,7 @@ keywords: Kitematic, open source, contribute, contributor, tour, development title: Develop in Kitematic (work on an issue) --- -For this tutorial, we will work on issue #1191 which is a request to display the container id in Kitematic for easy identification. (Currently, Kitematic shows the container name but not the id.) +For this tutorial, we will work on issue #1191 which is a request to display the container ID in Kitematic for easy identification. (Currently, Kitematic shows the container name but not the ID.) To do this, edit the container `General Settings` layout. @@ -19,7 +19,7 @@ To do this, edit the container `General Settings` layout. ``` -3. Above this code we will create a javascript variable that will allow us to display our container id: +3. Above this code we will create a javascript variable that will allow us to display our container ID: ``` let shortId = ( From e3b2e032ac6dcf4f131dee9b0a7afa28440b9133 Mon Sep 17 00:00:00 2001 From: Wang Jie Date: Thu, 2 Mar 2017 04:27:12 +0800 Subject: [PATCH 12/30] Update set_up_dev.md (#2011) Add periods (.) in some steps. --- opensource/kitematic/set_up_dev.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/opensource/kitematic/set_up_dev.md b/opensource/kitematic/set_up_dev.md index 97d11f8cbc..2e5bc82afa 100644 --- a/opensource/kitematic/set_up_dev.md +++ b/opensource/kitematic/set_up_dev.md @@ -19,7 +19,7 @@ To get started, you will need to install Node.js v4.2.1. Using Node Version Mana ### Windows: 1. Download latest release +target="_blank">latest release. 2. Follow the installer steps to get NVM installed. Please note, you need to uninstall any existing versions of node.js before installing NVM for Windows; @@ -29,7 +29,7 @@ the above installer link will have an uninstaller available. ### macOS/Linux: -1. Open a terminal window +1. Open a terminal window. 2. Copy and paste the following install script: @@ -39,9 +39,9 @@ the above installer link will have an uninstaller available. 3. To activate nvm, close the terminal window and re-open a new one. - (Alternatively, you can source nvm from your current shell with the command `. ~/.nvm/nvm.sh` ) + (Alternatively, you can source nvm from your current shell with the command `. ~/.nvm/nvm.sh`.) -(To learn more about working with NVM, see macOS/Linux official nvm repo, Windows official nvm repo, and How To Install Node.js with NVM ON A VPS) +(To learn more about working with NVM, see macOS/Linux official nvm repo, Windows official nvm repo, and How To Install Node.js with NVM ON A VPS.) ## Install Node.js @@ -178,4 +178,4 @@ The `components` folder is where the layout files are, the `stores` represent th ## Where to go next You are ready to start working on the issue. Go to [Develop in Kitematic (work -on an issue)](work_issue.md). \ No newline at end of file +on an issue)](work_issue.md). From 8209346256ca02f2898200cc1a0e384c2ce28178 Mon Sep 17 00:00:00 2001 From: Wang Jie Date: Thu, 2 Mar 2017 04:27:53 +0800 Subject: [PATCH 13/30] Update set_up_dev.md (#2010) Apply Oxford Comma as described in the documentation guide. --- opensource/kitematic/set_up_dev.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opensource/kitematic/set_up_dev.md b/opensource/kitematic/set_up_dev.md index 2e5bc82afa..0ac8fb75fe 100644 --- a/opensource/kitematic/set_up_dev.md +++ b/opensource/kitematic/set_up_dev.md @@ -173,7 +173,7 @@ kitematic/ | |--MyComponent.react.js ``` -The `components` folder is where the layout files are, the `stores` represent the application logic and `actions` are the dispatcher for actions taken within the `components`. +The `components` folder is where the layout files are, the `stores` represent the application logic, and `actions` are the dispatcher for actions taken within the `components`. ## Where to go next From 8eb744df136e4eafe5d343cb8a315c345da908db Mon Sep 17 00:00:00 2001 From: Wang Jie Date: Thu, 2 Mar 2017 04:28:53 +0800 Subject: [PATCH 14/30] Update create_pr.md (#2014) Delete an extra space. --- opensource/kitematic/create_pr.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/opensource/kitematic/create_pr.md b/opensource/kitematic/create_pr.md index 1c784b0f7c..6c12a8b955 100644 --- a/opensource/kitematic/create_pr.md +++ b/opensource/kitematic/create_pr.md @@ -53,8 +53,4 @@ Once you've cleaned up your commits: Congratulations! You've created your first pull request to Kitematic! -The next step in this process is to participate in your PR's review. To learn more, and try another development exercise, see [where to learn more](next_steps.md) . - - +The next step in this process is to participate in your PR's review. To learn more, and try another development exercise, see [where to learn more](next_steps.md). From 927f1c5c346a80027e41f29087e950f2b19971e0 Mon Sep 17 00:00:00 2001 From: Brian Goff Date: Wed, 1 Mar 2017 15:53:41 -0500 Subject: [PATCH 15/30] Add release notes for 1.12.6-cs9 (#2028) Signed-off-by: Brian Goff --- cs-engine/1.12/release-notes/release-notes.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cs-engine/1.12/release-notes/release-notes.md b/cs-engine/1.12/release-notes/release-notes.md index b24320bca2..3354422a07 100644 --- a/cs-engine/1.12/release-notes/release-notes.md +++ b/cs-engine/1.12/release-notes/release-notes.md @@ -22,6 +22,12 @@ cannot be adopted as quickly for consistency and compatibility reasons. These notes refer to the current and immediately prior releases of the CS Engine. For notes on older versions, see the [CS Engine prior release notes archive](prior-release-notes.md). +## CS Engine 1.12.6-cs9 +(28 Feb 2017) + +* Fixes an issue causing containerd to deadlock [#336](github.com/docker/containerd/pull/336) +* Fixes an issue where encrypted overlay networks stop working [#30727](github.com/docker/docker/issues/30727) + ## CS Engine 1.12.6-cs8 (8 Feb 2017) From 1b05f61663c957a1ef0224834abd6e3de4f47e90 Mon Sep 17 00:00:00 2001 From: Victoria Bialas Date: Wed, 1 Mar 2017 13:47:13 -0800 Subject: [PATCH 16/30] Added "related topics" section --- compose/bundles.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/compose/bundles.md b/compose/bundles.md index fdb11e6793..0c3b4c05e0 100644 --- a/compose/bundles.md +++ b/compose/bundles.md @@ -16,7 +16,7 @@ introduced in Docker 1.12 and Docker Compose 1.8, alongside the concept of swarm mode, and Nodes and Services in the Engine API. A Dockerfile can be built into an image, and containers can be created from -that image. Similarly, a docker-compose.yml can be built into a **distributed +that image. Similarly, a `docker-compose.yml` can be built into a **distributed application bundle**, and **stacks** can be created from that bundle. In that sense, the bundle is a multi-services distributable image format. @@ -199,4 +199,10 @@ A service has the following fields: > **Note:** Some configuration options are not yet supported in the DAB format, -> including volume mounts. \ No newline at end of file +> including volume mounts. + +## Related topics + +* [docker stack deploy] (/engine/reference/commandline/stack_deploy/) command + +* [deploy](/compose/compose-file/index.md#deploy) option in [Compose files](/compose/compose-file/index.md]] From 63bd8f6d41cf88176ad5b068487fd10b81ae6e8b Mon Sep 17 00:00:00 2001 From: Wang Jie Date: Thu, 2 Mar 2017 06:27:47 +0800 Subject: [PATCH 17/30] Update trust_key_mng.md (#1883) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update trust_key_mng.md * Update trust_key_mng.md I don‘t know how the whitespace appears, and it seems that it appears because something happened related to its original format (right-aligned pipe characters) and my change. Still unknown. Now I've deleted some redundant whitespace. * Update I don‘t know how the whitespace appears, and it seems that it appears because something happened related to its original format (right-aligned pipe characters) and my change. Still unknown. Now I've deleted some redundant whitespace. --- engine/security/trust/trust_key_mng.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/engine/security/trust/trust_key_mng.md b/engine/security/trust/trust_key_mng.md index 825c925f3b..f8da67b5a7 100644 --- a/engine/security/trust/trust_key_mng.md +++ b/engine/security/trust/trust_key_mng.md @@ -7,13 +7,13 @@ title: Manage keys for content trust Trust for an image tag is managed through the use of keys. Docker's content trust makes use of five different types of keys: -| Key | Description | -|---------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| root key | Root of content trust for an image tag. When content trust is enabled, you create the root key once. Also known as the offline key, because it should be kept offline. | -| targets | This key allows you to sign image tags, to manage delegations including delegated keys or permitted delegation paths. Also known as the repository key, since this key determines what tags can be signed into an image repository. | -| snapshot | This key signs the current collection of image tags, preventing mix and match attacks. -| timestamp | This key allows Docker image repositories to have freshness security guarantees without requiring periodic content refreshes on the client's side. | -| delegation | Delegation keys are optional tagging keys and allow you to delegate signing image tags to other publishers without having to share your targets key. | +| Key | Description | +|:-----------|:----------- | +| root key | Root of content trust for an image tag. When content trust is enabled, you create the root key once. Also known as the offline key, because it should be kept offline. | +| targets | This key allows you to sign image tags, to manage delegations including delegated keys or permitted delegation paths. Also known as the repository key, since this key determines what tags can be signed into an image repository. | +| snapshot | This key signs the current collection of image tags, preventing mix and match attacks. | +| timestamp | This key allows Docker image repositories to have freshness security guarantees without requiring periodic content refreshes on the client's side. | +| delegation | Delegation keys are optional tagging keys and allow you to delegate signing image tags to other publishers without having to share your targets key. | When doing a `docker push` with Content Trust enabled for the first time, the root, targets, snapshot, and timestamp keys are generated automatically for @@ -37,9 +37,9 @@ repositories created with newer versions of Docker. ## Choosing a passphrase The passphrases you chose for both the root key and your repository key should -be randomly generated and stored in a password manager. Having the repository key +be randomly generated and stored in a password manager. Having the repository key allows users to sign image tags on a repository. Passphrases are used to encrypt -your keys at rest and ensures that a lost laptop or an unintended backup doesn't +your keys at rest and ensure that a lost laptop or an unintended backup doesn't put the private key material at risk. ## Back up your keys From 670a2d580aef0bcc869900618147c1eb501c45e2 Mon Sep 17 00:00:00 2001 From: Wang Jie Date: Thu, 2 Mar 2017 06:30:00 +0800 Subject: [PATCH 18/30] Update content_trust.md (#1912) * Update content_trust.md --- engine/security/trust/content_trust.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/engine/security/trust/content_trust.md b/engine/security/trust/content_trust.md index 0118af0db1..2faac5dc91 100644 --- a/engine/security/trust/content_trust.md +++ b/engine/security/trust/content_trust.md @@ -19,8 +19,8 @@ ability to use digital signatures for data sent to and received from remote Docker registries. These signatures allow client-side verification of the integrity and publisher of specific image tags. -Currently, content trust is disabled by default. You must enable it by setting -the `DOCKER_CONTENT_TRUST` environment variable. Refer to the +Currently, content trust is disabled by default. To enable it, set +the `DOCKER_CONTENT_TRUST` environment variable to `1`. Refer to the [environment variables](../../reference/commandline/cli.md#environment-variables) and [Notary](../../reference/commandline/cli.md#notary) configuration for the docker client for more options. From 25781d61d5db5500c1178bd6ead1dd07d6a306fa Mon Sep 17 00:00:00 2001 From: Eli Flanagan Date: Wed, 1 Mar 2017 17:31:49 -0500 Subject: [PATCH 19/30] need sudo to access key cache (#1931) * need sudo to access key cache --- engine/installation/linux/debian.md | 2 +- engine/installation/linux/ubuntu.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/engine/installation/linux/debian.md b/engine/installation/linux/debian.md index a9a1de2d98..7c8f7d9dc3 100644 --- a/engine/installation/linux/debian.md +++ b/engine/installation/linux/debian.md @@ -92,7 +92,7 @@ Docker from the repository. Verify that the key ID is `58118E89F3A912897C070ADBF76221572C52609D`. ```bash - $ apt-key fingerprint 58118E89F3A912897C070ADBF76221572C52609D + $ sudo apt-key fingerprint 58118E89F3A912897C070ADBF76221572C52609D pub 4096R/2C52609D 2015-07-14 Key fingerprint = 5811 8E89 F3A9 1289 7C07 0ADB F762 2157 2C52 609D diff --git a/engine/installation/linux/ubuntu.md b/engine/installation/linux/ubuntu.md index 8593187401..a5d6a4ee04 100644 --- a/engine/installation/linux/ubuntu.md +++ b/engine/installation/linux/ubuntu.md @@ -80,7 +80,7 @@ Docker from the repository. Verify that the key ID is `58118E89F3A912897C070ADBF76221572C52609D`. ```bash - $ apt-key fingerprint 58118E89F3A912897C070ADBF76221572C52609D + $ sudo apt-key fingerprint 58118E89F3A912897C070ADBF76221572C52609D pub 4096R/2C52609D 2015-07-14 Key fingerprint = 5811 8E89 F3A9 1289 7C07 0ADB F762 2157 2C52 609D From 5c87ba40091b1249c1f7ec0a50c3bbdaf8150b35 Mon Sep 17 00:00:00 2001 From: Joe Meissler Date: Wed, 1 Mar 2017 14:48:19 -0800 Subject: [PATCH 20/30] Add documentation for mem_swappiness --- compose/compose-file/compose-file-v2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compose/compose-file/compose-file-v2.md b/compose/compose-file/compose-file-v2.md index 81303fe9a7..142c95461a 100644 --- a/compose/compose-file/compose-file-v2.md +++ b/compose/compose-file/compose-file-v2.md @@ -883,7 +883,7 @@ then read-write will be used. > - container_name > - container_name:rw -### cpu\_shares, cpu\_quota, cpuset, domainname, hostname, ipc, mac\_address, mem\_limit, memswap\_limit, oom_score_adj, privileged, read\_only, restart, shm\_size, stdin\_open, tty, user, working\_dir +### cpu\_shares, cpu\_quota, cpuset, domainname, hostname, ipc, mac\_address, mem\_limit, memswap\_limit, mem_swappiness\_, oom_score_adj, privileged, read\_only, restart, shm\_size, stdin\_open, tty, user, working\_dir Each of these is a single value, analogous to its [docker run](/engine/reference/run.md) counterpart. From d105d415bd41c157a09aecd1eb32f86c16fb6c8b Mon Sep 17 00:00:00 2001 From: Brian Goff Date: Wed, 1 Mar 2017 17:49:04 -0500 Subject: [PATCH 21/30] List other keyservers to try for cs-engine install (#2033) * List other keyservers to try for cs-engine install Sometimes ha.pool.sks-keyservers.net goes down, so let's provide some other keyservers to try in such cases. Signed-off-by: Brian Goff --- cs-engine/1.12/index.md | 13 +++++++++++++ cs-engine/1.12/upgrade.md | 8 ++++++++ cs-engine/1.13/index.md | 12 ++++++++++++ cs-engine/1.13/upgrade.md | 8 ++++++++ 4 files changed, 41 insertions(+) diff --git a/cs-engine/1.12/index.md b/cs-engine/1.12/index.md index da4965f1e5..e96ea8880e 100644 --- a/cs-engine/1.12/index.md +++ b/cs-engine/1.12/index.md @@ -45,6 +45,11 @@ to update its RHEL kernel. $ sudo rpm --import "https://sks-keyservers.net/pks/lookup?op=get&search=0xee6d536cf7dc86e2d7d56f59a178ac6c6238f52e" ``` + > **Note**: If the key server above does not respond, you can try one of these: + > + > - pgp.mit.edu + > - keyserver.ubuntu.com + 2. Install yum-utils if necessary: ```bash @@ -148,6 +153,10 @@ to update its RHEL kernel. $ curl -fsSL 'https://sks-keyservers.net/pks/lookup?op=get&search=0xee6d536cf7dc86e2d7d56f59a178ac6c6238f52e' | sudo apt-key add - ``` + Note: if the key server above does not respond, you can try one of these: + - pgp.mit.edu + - keyserver.ubuntu.com + 3. Add the repository. In the command below, the `lsb_release -cs` sub-command returns the name of your Ubuntu version, like `xenial` or `trusty`. @@ -224,6 +233,10 @@ to update its RHEL kernel. This adds the repository of the latest version of CS Docker Engine. You can customize the URL to install an older version. + Note: if the key server above does not respond, you can try one of these: + - pgp.mit.edu + - keyserver.ubuntu.com + 3. Install CS Docker Engine. - **Latest version**: diff --git a/cs-engine/1.12/upgrade.md b/cs-engine/1.12/upgrade.md index fbdb29b31a..a1025da4e4 100644 --- a/cs-engine/1.12/upgrade.md +++ b/cs-engine/1.12/upgrade.md @@ -180,6 +180,10 @@ Use these instructions to upgrade YUM-based systems. $ sudo rpm --import "https://sks-keyservers.net/pks/lookup?op=get&search=0xee6d536cf7dc86e2d7d56f59a178ac6c6238f52e" ``` + Note: if the key server above does not respond, you can try one of these: + - pgp.mit.edu + - keyserver.ubuntu.com + 3. Install yum-utils if necessary: ```bash @@ -225,6 +229,10 @@ Use these instructions to update APT-based systems. $ curl -s 'https://sks-keyservers.net/pks/lookup?op=get&search=0xee6d536cf7dc86e2d7d56f59a178ac6c6238f52e' | sudo apt-key add --import ``` + Note: if the key server above does not respond, you can try one of these: + - pgp.mit.edu + - keyserver.ubuntu.com + 3. Install the HTTPS helper for apt (your system may already have it): ```bash diff --git a/cs-engine/1.13/index.md b/cs-engine/1.13/index.md index 2a7f50efed..8e96a810ea 100644 --- a/cs-engine/1.13/index.md +++ b/cs-engine/1.13/index.md @@ -48,6 +48,10 @@ to update its RHEL kernel. $ sudo rpm --import "https://sks-keyservers.net/pks/lookup?op=get&search=0xee6d536cf7dc86e2d7d56f59a178ac6c6238f52e" ``` + Note: if the key server above does not respond, you can try one of these: + - pgp.mit.edu + - keyserver.ubuntu.com + 2. Install yum-utils if necessary: ```bash @@ -151,6 +155,10 @@ to update its RHEL kernel. $ curl -fsSL 'https://sks-keyservers.net/pks/lookup?op=get&search=0xee6d536cf7dc86e2d7d56f59a178ac6c6238f52e' | sudo apt-key add - ``` + Note: if the key server above does not respond, you can try one of these: + - pgp.mit.edu + - keyserver.ubuntu.com + 3. Add the repository. In the command below, the `lsb_release -cs` sub-command returns the name of your Ubuntu version, like `xenial` or `trusty`. @@ -227,6 +235,10 @@ to update its RHEL kernel. This adds the repository of the latest version of CS Docker Engine. You can customize the URL to install an older version. + Note: if the key server above does not respond, you can try one of these: + - pgp.mit.edu + - keyserver.ubuntu.com + 3. Install CS Docker Engine. - **Latest version**: diff --git a/cs-engine/1.13/upgrade.md b/cs-engine/1.13/upgrade.md index ac55e3abc4..9153f17770 100644 --- a/cs-engine/1.13/upgrade.md +++ b/cs-engine/1.13/upgrade.md @@ -175,6 +175,10 @@ Use these instructions to upgrade YUM-based systems. $ sudo rpm --import "https://sks-keyservers.net/pks/lookup?op=get&search=0xee6d536cf7dc86e2d7d56f59a178ac6c6238f52e" ``` + Note: if the key server above does not respond, you can try one of these: + - pgp.mit.edu + - keyserver.ubuntu.com + 3. Install yum-utils if necessary: ```bash @@ -220,6 +224,10 @@ Use these instructions to update APT-based systems. $ curl -s 'https://sks-keyservers.net/pks/lookup?op=get&search=0xee6d536cf7dc86e2d7d56f59a178ac6c6238f52e' | sudo apt-key add --import ``` + Note: if the key server above does not respond, you can try one of these: + - pgp.mit.edu + - keyserver.ubuntu.com + 3. Install the HTTPS helper for apt (your system may already have it): ```bash From fc343a81fc8c0eb4d96909ee64df93a980f14368 Mon Sep 17 00:00:00 2001 From: Misty Stanley-Jones Date: Wed, 1 Mar 2017 14:52:34 -0800 Subject: [PATCH 22/30] Update to new Docker version scheme (#1926) --- Dockerfile | 2 +- _data/not_edited_here.yaml | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 23101d974e..7d002db844 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,7 +15,7 @@ COPY . md_source # then nuke the md_source directory. ## Branch to pull from, per ref doc -ENV ENGINE_BRANCH="1.13.x" +ENV ENGINE_BRANCH="17.03.x" ENV DISTRIBUTION_BRANCH="release/2.5" RUN svn co https://github.com/docker/docker/branches/$ENGINE_BRANCH/docs/extend md_source/engine/extend \ diff --git a/_data/not_edited_here.yaml b/_data/not_edited_here.yaml index a59ffdb8b8..c5859ffac9 100644 --- a/_data/not_edited_here.yaml +++ b/_data/not_edited_here.yaml @@ -16,15 +16,15 @@ overrides: - path: /engine/deprecated.md description: Docker Engine deprecation reference - source: https://github.com/docker/docker/tree/1.13.x/docs/deprecated.md + source: https://github.com/docker/docker/tree/17.03.x/docs/deprecated.md - path: /engine/extend/ description: References for Docker Engine plugin system - source: https://github.com/docker/docker/tree/1.13.x/docs/extend/ + source: https://github.com/docker/docker/tree/17.03.x/docs/extend/ - path: /engine/reference/ description: Docker Engine CLI and API references - source: https://github.com/docker/docker/tree/1.13.x/docs/reference/ + source: https://github.com/docker/docker/tree/17.03.x/docs/reference/ - path: /notary/reference/ description: Reference docs for Docker Notary From 963e6b5e6c426b2a54a0d58af6c5286065a3a896 Mon Sep 17 00:00:00 2001 From: Joe Meissler Date: Wed, 1 Mar 2017 14:56:18 -0800 Subject: [PATCH 23/30] mem_swappiness for current version and v1 --- compose/compose-file/compose-file-v1.md | 2 +- compose/compose-file/index.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/compose/compose-file/compose-file-v1.md b/compose/compose-file/compose-file-v1.md index ba49a46a8c..1610a2e50c 100644 --- a/compose/compose-file/compose-file-v1.md +++ b/compose/compose-file/compose-file-v1.md @@ -475,7 +475,7 @@ is specified, then read-write will be used. - service_name - service_name:ro -### cpu\_shares, cpu\_quota, cpuset, domainname, hostname, ipc, mac\_address, mem\_limit, memswap\_limit, privileged, read\_only, restart, shm\_size, stdin\_open, tty, user, working\_dir +### cpu\_shares, cpu\_quota, cpuset, domainname, hostname, ipc, mac\_address, mem\_limit, memswap\_limit, mem\_swappiness, privileged, read\_only, restart, shm\_size, stdin\_open, tty, user, working\_dir Each of these is a single value, analogous to its [docker run](/engine/reference/run.md) counterpart. diff --git a/compose/compose-file/index.md b/compose/compose-file/index.md index 81db83243f..da0b631f54 100644 --- a/compose/compose-file/index.md +++ b/compose/compose-file/index.md @@ -247,7 +247,7 @@ updates. Configures resource constraints. This replaces the older resource constraint options in Compose files prior to version 3 (`cpu_shares`, `cpu_quota`, -`cpuset`, `mem_limit`, `memswap_limit`). +`cpuset`, `mem_limit`, `memswap_limit`, `mem_swappiness`). Each of these is a single value, analogous to its [docker run](/engine/reference/run.md) counterpart. From b93760bea560e2361b6865dd70d994bb3641364d Mon Sep 17 00:00:00 2001 From: Joe Meissler Date: Wed, 1 Mar 2017 15:01:26 -0800 Subject: [PATCH 24/30] merge other changes, fix typo --- compose/compose-file/compose-file-v2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compose/compose-file/compose-file-v2.md b/compose/compose-file/compose-file-v2.md index 142c95461a..32664c7898 100644 --- a/compose/compose-file/compose-file-v2.md +++ b/compose/compose-file/compose-file-v2.md @@ -883,7 +883,7 @@ then read-write will be used. > - container_name > - container_name:rw -### cpu\_shares, cpu\_quota, cpuset, domainname, hostname, ipc, mac\_address, mem\_limit, memswap\_limit, mem_swappiness\_, oom_score_adj, privileged, read\_only, restart, shm\_size, stdin\_open, tty, user, working\_dir +### cpu\_shares, cpu\_quota, cpuset, domainname, hostname, ipc, mac\_address, mem\_limit, memswap\_limit, mem\_swappiness, oom_score_adj, privileged, read\_only, restart, shm\_size, stdin\_open, tty, user, working\_dir Each of these is a single value, analogous to its [docker run](/engine/reference/run.md) counterpart. From 4edeba1d45e9a3c7ebb70c1bbd37fba1c040fb78 Mon Sep 17 00:00:00 2001 From: Misty Stanley-Jones Date: Wed, 1 Mar 2017 15:05:57 -0800 Subject: [PATCH 25/30] Update info about how to check whether Docker is running --- engine/admin/index.md | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/engine/admin/index.md b/engine/admin/index.md index 48eb7ed146..5a475a0148 100644 --- a/engine/admin/index.md +++ b/engine/admin/index.md @@ -82,20 +82,21 @@ the state of all goroutines and threads within the daemon. ## Ubuntu -As of `14.04`, Ubuntu uses Upstart as a process manager. By default, Upstart -jobs are located in `/etc/init` and the `docker` Upstart job can be found at -`/etc/init/docker.conf`. +Ubuntu 16.04 and newer use `systemd` as the init system. Ubuntu 14.04 uses `upstart`. +Use the appropriate command below to check whether Docker is running: -After successfully [installing Docker for -Ubuntu](../installation/linux/ubuntulinux.md), you can check the running status -using Upstart in this way: +| Init system | Command | +|--------------|-----------------------------| +| `systemd` | `sudo systemctl is-active ` | +| `upstart` | `sudo status docker` | + +You can also use Docker itself to check whether Docker is running: ```bash -$ sudo status docker - -docker start/running, process 989 +$ docker info ``` + ### Running Docker You can start/stop/restart the `docker` daemon using @@ -299,4 +300,4 @@ May 06 00:22:06 localhost.localdomain docker[2495]: time="2015-05-06T00:22:06Z" May 06 00:22:06 localhost.localdomain docker[2495]: time="2015-05-06T00:22:06Z" level="info" msg="-job acceptconnections() = OK (0)" ``` -> Note: Using and configuring journal is an advanced topic and is beyond the scope of this article. \ No newline at end of file +> Note: Using and configuring journal is an advanced topic and is beyond the scope of this article. From ee33fb65a0aab2f7d1b89fad1323abec7dd495ff Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Mon, 27 Feb 2017 16:45:08 -0800 Subject: [PATCH 26/30] update deprecation policy Signed-off-by: Victor Vieux --- engine/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/engine/index.md b/engine/index.md index 760fea258c..34bc767bf6 100644 --- a/engine/index.md +++ b/engine/index.md @@ -98,8 +98,8 @@ on the separate [Release Notes page](/release-notes) As changes are made to Docker there may be times when existing features will need to be removed or replaced with newer features. Before an existing feature is removed it will be labeled as "deprecated" within the documentation -and will remain in Docker for, usually, at least 3 releases. After that time -it may be removed. +and will remain in Docker for at least 3 stable releases (roughly 9 months). +After that time it may be removed. Users are expected to take note of the list of deprecated features each release and plan their migration away from those features, and (if applicable) From 2f4c941590d93fe2f869dce65c7f6c4a2075463d Mon Sep 17 00:00:00 2001 From: Victoria Bialas Date: Wed, 1 Mar 2017 17:42:56 -0800 Subject: [PATCH 27/30] Distinguish between cloud stack file and stack file --- reference.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reference.md b/reference.md index 93fbed009f..ac4c69d313 100644 --- a/reference.md +++ b/reference.md @@ -12,7 +12,7 @@ various APIs, CLIs, and file formats. |:-------------------------------------------------------|:----------------------------------------------------------------| | [Dockerfile](/engine/reference/builder/) | Defines the contents and startup behavior of a single container | | [Compose file](/compose/compose-file/) | Defines a multi-container application | -| [Stack file](/docker-cloud/apps/stack-yaml-reference/) | Defines a multi-container application for Docker Cloud | +| [Docker Cloud Stack file](/docker-cloud/apps/stack-yaml-reference/) | Defines a multi-container application for Docker Cloud | ## Command-line interfaces (CLIs) From 09c432495f239619c4d5f53b43ed831d11b2a01f Mon Sep 17 00:00:00 2001 From: Victoria Bialas Date: Wed, 1 Mar 2017 18:30:48 -0800 Subject: [PATCH 28/30] clarified docker stack deploy and bundles Signed-off-by: Victoria Bialas --- compose/bundles.md | 32 +++++++++++++++------- engine/getstarted-voting-app/deploy-app.md | 9 ++++-- engine/getstarted-voting-app/index.md | 13 +++++---- 3 files changed, 36 insertions(+), 18 deletions(-) diff --git a/compose/bundles.md b/compose/bundles.md index 0c3b4c05e0..a79ec7a708 100644 --- a/compose/bundles.md +++ b/compose/bundles.md @@ -5,23 +5,33 @@ keywords: documentation, docs, docker, compose, bundles, stacks title: Docker stacks and distributed application bundles (experimental) --- -> **Note**: This is a copy of the [Docker Stacks and Distributed Application +> **Note**: This is a modified copy of the [Docker Stacks and Distributed Application > Bundles](https://github.com/docker/docker/blob/v1.12.0-rc4/experimental/docker-stacks-and-bundles.md) -> document in the [docker/docker repo](https://github.com/docker/docker). +> document in the [docker/docker repo](https://github.com/docker/docker). It's been updated to accurately reflect newer releases. ## Overview -Docker Stacks and Distributed Application Bundles are experimental features -introduced in Docker 1.12 and Docker Compose 1.8, alongside the concept of -swarm mode, and Nodes and Services in the Engine API. - A Dockerfile can be built into an image, and containers can be created from that image. Similarly, a `docker-compose.yml` can be built into a **distributed application bundle**, and **stacks** can be created from that bundle. In that sense, the bundle is a multi-services distributable image format. -As of Docker 1.12 and Compose 1.8, the features are experimental. Neither -Docker Engine nor the Docker Registry support distribution of bundles. +Docker Stacks and Distributed Application Bundles started as experimental +features introduced in Docker 1.12 and Docker Compose 1.8, alongside the concept +of swarm mode, and nodes and services in the Engine API. Neither Docker Engine +nor the Docker Registry support distribution of bundles, and the concept of a +`bundle` is not the emphasis for new releases going forward. + +However, [swarm mode](/engine/swarm/index.md), multi-service applications, and +stack files now are fully supported. A stack file is a particular type of +[version 3 Compose file](/compose/compose-file/index.md). + +If you are just getting started with Docker and want to learn the best way to +deploy multi-service applications, a good place to start is the [Sample app +tutorial](/engine/getstarted-voting-app/index.md). This shows you how to define +a service configuration in a `docker-stack.yml` file, deploy the app, and use +the relevant tools and commands. + ## Producing a bundle @@ -203,6 +213,8 @@ A service has the following fields: ## Related topics -* [docker stack deploy] (/engine/reference/commandline/stack_deploy/) command +* [Sample app tutorial](/engine/getstarted-voting-app/index.md) -* [deploy](/compose/compose-file/index.md#deploy) option in [Compose files](/compose/compose-file/index.md]] +* [docker stack deploy](/engine/reference/commandline/stack_deploy/) command + +* [deploy](/compose/compose-file/index.md#deploy) option in [Compose files](/compose/compose-file/index.md) diff --git a/engine/getstarted-voting-app/deploy-app.md b/engine/getstarted-voting-app/deploy-app.md index 297a05d1de..de2d4278a3 100644 --- a/engine/getstarted-voting-app/deploy-app.md +++ b/engine/getstarted-voting-app/deploy-app.md @@ -53,13 +53,18 @@ The `docker-stack.yml` file must be located on a manager for the swarm where you We'll deploy the application from the manager. -1. Deploy the application stack based on the `.yml` using the command `docker stack deploy` as follows. +1. Deploy the application stack based on the `.yml` using the command +[`docker stack deploy`](/engine/reference/commandline/stack_deploy.md) as follows. ``` docker stack deploy --compose-file docker-stack.yml vote ``` - Here is an example of the command and the output. + * The `--compose-file` option specifies the path to our stack file. In this case, we assume it's in the current directory so we simply name the stack file: `docker-stack.yml`. + + * For the example, we name this app `vote`, but we could name it anything we want. + + Here is an example of the command and the output. ``` docker@manager:~$ docker stack deploy --compose-file docker-stack.yml vote diff --git a/engine/getstarted-voting-app/index.md b/engine/getstarted-voting-app/index.md index cfdddafe13..57d1a34018 100644 --- a/engine/getstarted-voting-app/index.md +++ b/engine/getstarted-voting-app/index.md @@ -219,12 +219,13 @@ volumes: ## Docker stacks and services -To deploy the voting app, we will run the `docker stack deploy` command with -this `docker-stack.yml` file to pull the referenced images and launch the -services in a swarm. This allows us to run the application across multiple -servers, and use swarm mode for load balancing and performance. Rather than -thinking about running individual containers, we can start to model deployments -as application stacks and services. +To deploy the voting app, we will run the [`docker stack +deploy`](/engine/reference/commandline/stack_deploy.md) command with appropriate +options using this `docker-stack.yml` file to pull the referenced images and +launch the services in a swarm. This allows us to run the application across +multiple servers, and use swarm mode for load balancing and performance. Rather +than thinking about running individual containers, we can start to model +deployments as application stacks and services. If you are interested in learning more about new Compose version 3.x features, Docker Engine 1.13.x, and swarm mode integration, check out the [list of resources](customize-app.md#resources) at the end of this tutorial. From 85ada8850d8caf04e4fa882387aa2243782cefa7 Mon Sep 17 00:00:00 2001 From: Michael Pereira Date: Wed, 1 Mar 2017 22:54:22 -0500 Subject: [PATCH 29/30] Replace deprecated MAINTAINER with LABEL (#1445) Replace MAINTAINER instruction with LABEL as MAINTAINER was deprecated in https://github.com/docker/docker/pull/25466 --- docker-hub/webhooks.md | 2 +- engine/admin/ambassador_pattern_linking.md | 1 - engine/admin/using_supervisord.md | 2 -- engine/examples/apt-cacher-ng.Dockerfile | 1 - engine/examples/apt-cacher-ng.md | 1 - engine/examples/mongodb.md | 7 ------- engine/examples/mongodb/Dockerfile | 1 - engine/examples/postgresql_service.Dockerfile | 1 - engine/examples/postgresql_service.md | 1 - engine/examples/running_riak_service.Dockerfile | 1 - engine/examples/running_riak_service.md | 1 - engine/examples/running_ssh_service.Dockerfile | 1 - engine/examples/running_ssh_service.md | 1 - engine/reference/commandline/image_pull.md | 1 + engine/understanding-docker.md | 2 +- swarm/scheduler/filter.md | 9 ++------- test.md | 1 - tests/Dockerfile | 1 - 18 files changed, 5 insertions(+), 30 deletions(-) diff --git a/docker-hub/webhooks.md b/docker-hub/webhooks.md index 2ca3e1c802..19d3b7aa79 100644 --- a/docker-hub/webhooks.md +++ b/docker-hub/webhooks.md @@ -28,7 +28,7 @@ example webhook below generates an HTTP POST that delivers a JSON payload: "comment_count": "0", "date_created": 1.417494799e+09, "description": "", - "dockerfile": "#\n# BUILD\u0009\u0009docker build -t svendowideit/apt-cacher .\n# RUN\u0009\u0009docker run -d -p 3142:3142 -name apt-cacher-run apt-cacher\n#\n# and then you can run containers with:\n# \u0009\u0009docker run -t -i -rm -e http_proxy http://192.168.1.2:3142/ debian bash\n#\nFROM\u0009\u0009ubuntu\nMAINTAINER\u0009SvenDowideit@home.org.au\n\n\nVOLUME\u0009\u0009[\/var/cache/apt-cacher-ng\]\nRUN\u0009\u0009apt-get update ; apt-get install -yq apt-cacher-ng\n\nEXPOSE \u0009\u00093142\nCMD\u0009\u0009chmod 777 /var/cache/apt-cacher-ng ; /etc/init.d/apt-cacher-ng start ; tail -f /var/log/apt-cacher-ng/*\n", + "dockerfile": "#\n# BUILD\u0009\u0009docker build -t svendowideit/apt-cacher .\n# RUN\u0009\u0009docker run -d -p 3142:3142 -name apt-cacher-run apt-cacher\n#\n# and then you can run containers with:\n# \u0009\u0009docker run -t -i -rm -e http_proxy http://192.168.1.2:3142/ debian bash\n#\nFROM\u0009\u0009ubuntu\n\n\nVOLUME\u0009\u0009[\/var/cache/apt-cacher-ng\]\nRUN\u0009\u0009apt-get update ; apt-get install -yq apt-cacher-ng\n\nEXPOSE \u0009\u00093142\nCMD\u0009\u0009chmod 777 /var/cache/apt-cacher-ng ; /etc/init.d/apt-cacher-ng start ; tail -f /var/log/apt-cacher-ng/*\n", "full_description": "Docker Hub based automated build from a GitHub repo", "is_official": false, "is_private": true, diff --git a/engine/admin/ambassador_pattern_linking.md b/engine/admin/ambassador_pattern_linking.md index 72b55bdeb0..55b1366dc6 100644 --- a/engine/admin/ambassador_pattern_linking.md +++ b/engine/admin/ambassador_pattern_linking.md @@ -144,7 +144,6 @@ case `192.168.1.52:6379`. # use alpine because its a minimal image with a package manager. # prettymuch all that is needed is a container that has a functioning env and socat (or equivalent) FROM alpine:3.2 - MAINTAINER SvenDowideit@home.org.au RUN apk update && \ apk add socat && \ diff --git a/engine/admin/using_supervisord.md b/engine/admin/using_supervisord.md index 3102790d24..42bd956258 100644 --- a/engine/admin/using_supervisord.md +++ b/engine/admin/using_supervisord.md @@ -28,7 +28,6 @@ Let's start by creating a basic `Dockerfile` for our new image. ```Dockerfile FROM ubuntu:16.04 -MAINTAINER examples@docker.com ``` ## Installing Supervisor @@ -98,7 +97,6 @@ Your completed Dockerfile now looks like this: ```Dockerfile FROM ubuntu:16.04 -MAINTAINER examples@docker.com RUN apt-get update && apt-get install -y openssh-server apache2 supervisor RUN mkdir -p /var/lock/apache2 /var/run/apache2 /var/run/sshd /var/log/supervisor diff --git a/engine/examples/apt-cacher-ng.Dockerfile b/engine/examples/apt-cacher-ng.Dockerfile index d1f76572b9..af9d885d24 100644 --- a/engine/examples/apt-cacher-ng.Dockerfile +++ b/engine/examples/apt-cacher-ng.Dockerfile @@ -6,7 +6,6 @@ # docker run -t -i --rm -e http_proxy http://dockerhost:3142/ debian bash # FROM ubuntu -MAINTAINER SvenDowideit@docker.com VOLUME ["/var/cache/apt-cacher-ng"] RUN apt-get update && apt-get install -y apt-cacher-ng diff --git a/engine/examples/apt-cacher-ng.md b/engine/examples/apt-cacher-ng.md index d2ec75ffd4..ec186133b8 100644 --- a/engine/examples/apt-cacher-ng.md +++ b/engine/examples/apt-cacher-ng.md @@ -27,7 +27,6 @@ Use the following Dockerfile: # Here, `dockerhost` is the IP address or FQDN of a host running the Docker daemon # which acts as an APT proxy server. FROM ubuntu - MAINTAINER SvenDowideit@docker.com VOLUME ["/var/cache/apt-cacher-ng"] RUN apt-get update && apt-get install -y apt-cacher-ng diff --git a/engine/examples/mongodb.md b/engine/examples/mongodb.md index eb007e3788..d6ac426cf3 100644 --- a/engine/examples/mongodb.md +++ b/engine/examples/mongodb.md @@ -52,13 +52,6 @@ We will build our image using the latest version of Ubuntu from the FROM ubuntu:latest ``` -Continuing, we will declare the `MAINTAINER` of the `Dockerfile`: - -```dockerfile -# Format: MAINTAINER Name -MAINTAINER M.Y. Name -``` - > **Note:** Although Ubuntu systems have MongoDB packages, they are likely to > be outdated. Therefore in this example, we will use the official MongoDB > packages. diff --git a/engine/examples/mongodb/Dockerfile b/engine/examples/mongodb/Dockerfile index aea59c155f..eb020979f0 100644 --- a/engine/examples/mongodb/Dockerfile +++ b/engine/examples/mongodb/Dockerfile @@ -3,7 +3,6 @@ # http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/ FROM ubuntu:16.04 -MAINTAINER Docker # Installation: # Import MongoDB public GPG key AND create a MongoDB list file diff --git a/engine/examples/postgresql_service.Dockerfile b/engine/examples/postgresql_service.Dockerfile index d5767c9384..9ee667eb92 100644 --- a/engine/examples/postgresql_service.Dockerfile +++ b/engine/examples/postgresql_service.Dockerfile @@ -3,7 +3,6 @@ # FROM ubuntu -MAINTAINER SvenDowideit@docker.com # Add the PostgreSQL PGP key to verify their Debian packages. # It should be the same key as https://www.postgresql.org/media/keys/ACCC4CF8.asc diff --git a/engine/examples/postgresql_service.md b/engine/examples/postgresql_service.md index 68b51f71ee..e864ef22c0 100644 --- a/engine/examples/postgresql_service.md +++ b/engine/examples/postgresql_service.md @@ -26,7 +26,6 @@ suitably secure. # FROM ubuntu -MAINTAINER SvenDowideit@docker.com # Add the PostgreSQL PGP key to verify their Debian packages. # It should be the same key as https://www.postgresql.org/media/keys/ACCC4CF8.asc diff --git a/engine/examples/running_riak_service.Dockerfile b/engine/examples/running_riak_service.Dockerfile index 9b82cb023a..72738ade44 100644 --- a/engine/examples/running_riak_service.Dockerfile +++ b/engine/examples/running_riak_service.Dockerfile @@ -4,7 +4,6 @@ # Use the Ubuntu base image provided by dotCloud FROM ubuntu:trusty -MAINTAINER Hector Castro hector@basho.com # Install Riak repository before we do apt-get update, so that update happens # in a single step diff --git a/engine/examples/running_riak_service.md b/engine/examples/running_riak_service.md index 5a68a3ea8a..1fe601b934 100644 --- a/engine/examples/running_riak_service.md +++ b/engine/examples/running_riak_service.md @@ -23,7 +23,6 @@ of. We'll use [Ubuntu](https://hub.docker.com/_/ubuntu/) (tag: # Use the Ubuntu base image provided by dotCloud FROM ubuntu:trusty - MAINTAINER Hector Castro hector@basho.com After that, we install the curl which is used to download the repository setup script and we download the setup script and run it. diff --git a/engine/examples/running_ssh_service.Dockerfile b/engine/examples/running_ssh_service.Dockerfile index 68023dbb3a..886b38a36b 100644 --- a/engine/examples/running_ssh_service.Dockerfile +++ b/engine/examples/running_ssh_service.Dockerfile @@ -1,5 +1,4 @@ FROM ubuntu:16.04 -MAINTAINER Sven Dowideit RUN apt-get update && apt-get install -y openssh-server RUN mkdir /var/run/sshd diff --git a/engine/examples/running_ssh_service.md b/engine/examples/running_ssh_service.md index 9e60160cdb..4b6541a651 100644 --- a/engine/examples/running_ssh_service.md +++ b/engine/examples/running_ssh_service.md @@ -12,7 +12,6 @@ quick access to a test container. ```Dockerfile FROM ubuntu:16.04 -MAINTAINER Sven Dowideit RUN apt-get update && apt-get install -y openssh-server RUN mkdir /var/run/sshd diff --git a/engine/reference/commandline/image_pull.md b/engine/reference/commandline/image_pull.md index 3a2cad8f4b..4ecd9d5f01 100644 --- a/engine/reference/commandline/image_pull.md +++ b/engine/reference/commandline/image_pull.md @@ -13,3 +13,4 @@ https://www.github.com/docker/docker --> {% include cli.md %} + diff --git a/engine/understanding-docker.md b/engine/understanding-docker.md index 6d75d88e87..0ffbbfb309 100644 --- a/engine/understanding-docker.md +++ b/engine/understanding-docker.md @@ -183,7 +183,7 @@ instruction creates a new layer in the image. Some examples of Dockerfile instructions are: * Specify the base image (`FROM`) -* Specify the maintainer (`MAINTAINER`) +* Specify image metadata (`LABEL`) * Run a command (`RUN`) * Add a file or directory (`ADD`) * Create an environment variable (`ENV`) diff --git a/swarm/scheduler/filter.md b/swarm/scheduler/filter.md index 29646cafb5..a3028bb55b 100644 --- a/swarm/scheduler/filter.md +++ b/swarm/scheduler/filter.md @@ -138,22 +138,17 @@ Again, you'll avoid flash drives. $ mkdir sinatra $ cd sinatra $ echo "FROM ubuntu:14.04" > Dockerfile -$ echo "MAINTAINER Kate Smith " >> Dockerfile $ echo "RUN apt-get update && apt-get install -y ruby ruby-dev" >> Dockerfile $ echo "RUN gem install sinatra" >> Dockerfile $ docker build --build-arg=constraint:storage==disk -t ouruser/sinatra:v2 . Sending build context to Docker daemon 2.048 kB Step 1 : FROM ubuntu:14.04 ---> a5a467fddcb8 -Step 2 : MAINTAINER Kate Smith - ---> Running in 49e97019dcb8 - ---> de8670dcf80e -Removing intermediate container 49e97019dcb8 -Step 3 : RUN apt-get update && apt-get install -y ruby ruby-dev +Step 2 : RUN apt-get update && apt-get install -y ruby ruby-dev ---> Running in 26c9fbc55aeb ---> 30681ef95fff Removing intermediate container 26c9fbc55aeb -Step 4 : RUN gem install sinatra +Step 3 : RUN gem install sinatra ---> Running in 68671d4a17b0 ---> cd70495a1514 Removing intermediate container 68671d4a17b0 diff --git a/test.md b/test.md index 1c6a12e966..ae1d0a8cd4 100644 --- a/test.md +++ b/test.md @@ -297,7 +297,6 @@ command=/bin/bash -c "source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFO # FROM ubuntu -MAINTAINER SvenDowideit@docker.com # Add the PostgreSQL PGP key to verify their Debian packages. # It should be the same key as https://www.postgresql.org/media/keys/ACCC4CF8.asc diff --git a/tests/Dockerfile b/tests/Dockerfile index 948eec7094..7e2b18ec0e 100644 --- a/tests/Dockerfile +++ b/tests/Dockerfile @@ -1,5 +1,4 @@ FROM golang:1.7.3-alpine -MAINTAINER Adrien Duermael COPY src /go/src WORKDIR /go/src/validator From 3108d86b6dc29cbe658c7eaae7ddd5ff6e046e41 Mon Sep 17 00:00:00 2001 From: Misty Stanley-Jones Date: Thu, 2 Mar 2017 05:54:49 -0800 Subject: [PATCH 30/30] Docker 17.03 release (#2050) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * First pass of tabs-based organization * Improvements * Second pass at tabs org * Move tab highlighting to Liquid instead of JS * Adding forwarding links for in-product TOCs * Move to pre-rendered left-navs instead of post-load JS for TOC sync * Optimizations and nosync-ing the Reference section * Optimizations, fix Cloud YAML * Make a "Sample applications" node * Update index.md * Tabs CSS fixes and 12-factor reposition * Theme Start (#1709) * Hooking up nav to real TOC data, formatting fixes * Fixing JS error * Layout updates, dark themes, tons o stuff (#1971) * Add cookie saving for day/night mode * Newsite tabs (#2004) * Layout updates, dark themes, tons o stuff * Update themes Theme updates + scaffolding * Update style.css * Update style-alt.css * Missing font fixes * Import Open Sans from Google * Font fix, archive removal in TOC, favicon, Feedback img fix * Oops, returning -webkit-font-smoothing: antialiased; * Add old favicon.ico * Make archives a non-tiered link * Reorder docs archive to newest-first, add local instructions * Commenting out day/night switch for now * Fix 'rate this page' * Rate this page fixes * Autocomplete and Docker Cloud fixes * Open tree to current page * Adding indentation for nav collapse in * Ensure left nav visibly displays the current topic * Update flex layout - adjust rescale - code block styles * add focus to search - force code block color (for now) - increase section max-width * increase content padding - add padding to toc for wrapping long strings. * grid adjustment - grid - content and wrapper adjustments for mobile * left/right sidebar adjustments - refine position on scroll for toc on landing - add default height to compensate for upcoming position absolute onScroll * side bar overflow - hidden on X-scroll * fix version button - override bstrap defaults * tabs + buttons * update landing svgs * fix sidebar height set to 100% on landing pre-affix * Update blurb about engine/editions on front page * add side menu to mobile collapse menu * update classnames * overall mobile tweaks * Right-nav highlighting and auto-scroll * Slightly slower right-nav highlighting, correct version * add toggle menus for small devices * Fixing JS error/Docker 1.13>17.03 * header updates * re-add fan to header * update transition time * Add first 20 words to Twitter card * fixed width of components - lockdown elements on rescale (wil need more TLC) * set max-width of content * Left and right nav resizing w/footer scroll and window resize * update links on landing page * Fix for overzealous resizing, JS redundancies * Fix for JS error on homepage * JS error fixes * toggle adjustments - wrap toggle button * add tab width * version button type * version button both headers * tabs - fix typo * landing page grid * components * Share images, JS fixes, Marketo removal * Anchor links fix * Fix for black space on mobile * Restore hamburger (partial) * Update run.md Minor grammar cleanup. * Update apparmor.md I'm a little confused about which one is better to be used here, a period (.) or a colon (:), as a command is given below. Or both are OK, and we only have to keep consistency in a single page. * Update apparmor.md Fixed the indentation for the codeblock (indented by 4 spaces). Thank you for your careful review. * Replacing service with secret * Update networking.md fix typo with triple "m" for command word * Update run.md Address PR feedback. * Update install instructions to latest version * Added "related topics" section * Add documentation for mem_swappiness * Update to new Docker version scheme (#1926) * mem_swappiness for current version and v1 * merge other changes, fix typo * There is no OpenSuSE and there never was though we had SuSE and S.u.S.E. * Add release notes for 1.12.6-cs9 (#2028) Signed-off-by: Brian Goff * need sudo to access key cache (#1931) * need sudo to access key cache * List other keyservers to try for cs-engine install (#2033) * List other keyservers to try for cs-engine install Sometimes ha.pool.sks-keyservers.net goes down, so let's provide some other keyservers to try in such cases. Signed-off-by: Brian Goff * Update work_issue.md (#2030) Change "re-start" to "restart". Though not included in "Prefered usages" in the documentation guide, but I think "restart" is better and used more frequently. Besides, some other docs here, such as "Keep containers alive during daemon downtime" of "Admin Guide", also use "restart". * Update create_pr.md (#2015) * Update work_issue.md (#2013) Change "id" to "ID" except for those in code. * Update set_up_dev.md (#2011) Add periods (.) in some steps. * Update set_up_dev.md (#2010) Apply Oxford Comma as described in the documentation guide. * Update create_pr.md (#2014) Delete an extra space. * Update trust_key_mng.md (#1883) * Update trust_key_mng.md * Update trust_key_mng.md I don‘t know how the whitespace appears, and it seems that it appears because something happened related to its original format (right-aligned pipe characters) and my change. Still unknown. Now I've deleted some redundant whitespace. * Update I don‘t know how the whitespace appears, and it seems that it appears because something happened related to its original format (right-aligned pipe characters) and my change. Still unknown. Now I've deleted some redundant whitespace. * Update content_trust.md (#1912) * Update content_trust.md * update deprecation policy Signed-off-by: Victor Vieux * Update info about how to check whether Docker is running * Updated docs to reflect edge channel Signed-off-by: French Ben * Updated wording for SP creation Signed-off-by: French Ben * beta to edge, cloud features first draft added cloud images Signed-off-by: Victoria Bialas * Distinguish between cloud stack file and stack file * Added EE links Signed-off-by: French Ben * Use variables Signed-off-by: French Ben * Replace deprecated MAINTAINER with LABEL (#1445) Replace MAINTAINER instruction with LABEL as MAINTAINER was deprecated in https://github.com/docker/docker/pull/25466 * Updates for Docker CE and Docker EE * Updated DDC launch button Signed-off-by: French Ben * added Docker Cloud topics for Mac and Windows Signed-off-by: Victoria Bialas * d4mac, d4win stable and beta release notes for 17.03.0 Signed-off-by: Victoria Bialas --- _data/docsarchive/docker-compose.yml | 64 +- _data/toc.yaml | 37 +- _includes/d4a_buttons.md | 30 +- _includes/docker_platform_matrix.md | 17 + _includes/footer.html | 111 + _includes/global-header.html | 105 + _includes/header.html | 49 + _includes/noindex.html | 1 - _includes/side-menu.html | 5 + _includes/tree.html | 10 +- _layouts/docs.html | 568 ++--- allpagelinks.md | 14 - css/bootstrap.min.css | 6 +- css/bootstrap.min.css.map | 1 + css/documentation.css | 4 +- css/font-awesome.min.css | 4 + css/main.css | 1338 ++++++++++++ css/style-alt.css | 1741 +++++++++++++++ css/style.css | 1910 +++++++++++++++++ css/temp.css | 92 + datacenter/install/aws.md | 54 +- docker-cloud/index.md | 33 +- docker-for-aws/faqs.md | 8 +- docker-for-aws/index.md | 72 +- docker-for-aws/persistent-data-volumes.md | 10 +- docker-for-aws/release-notes.md | 28 +- docker-for-azure/faqs.md | 8 +- docker-for-azure/index.md | 44 +- docker-for-azure/persistent-data-volumes.md | 8 +- docker-for-azure/release-notes.md | 24 +- docker-for-mac/faqs.md | 80 +- .../images/docker-cloud-create-swarm.png | Bin 0 -> 77349 bytes docker-for-mac/images/docker-cloud.png | Bin 0 -> 108136 bytes docker-for-mac/images/docker-store.png | Bin 0 -> 350963 bytes .../mac-install-success-docker-cloud.png | Bin 238658 -> 251843 bytes .../mac-install-success-docker-wait.png | Bin 34159 -> 0 bytes docker-for-mac/images/menu-cloud-sign-in.png | Bin 0 -> 91610 bytes docker-for-mac/images/menu-prefs-selected.png | Bin 0 -> 41414 bytes docker-for-mac/images/menu.png | Bin 14732 -> 43101 bytes docker-for-mac/images/whale-in-menu-bar.png | Bin 9952 -> 10528 bytes docker-for-mac/images/whale-x.png | Bin 6623 -> 566 bytes docker-for-mac/index.md | 30 +- docker-for-mac/install.md | 32 +- docker-for-mac/release-notes.md | 48 +- docker-for-windows/faqs.md | 62 +- docker-for-windows/images/Start-Authorize.png | Bin 48798 -> 0 bytes docker-for-windows/images/Start-init.png | Bin 37324 -> 0 bytes docker-for-windows/images/chat.png | Bin 148 -> 0 bytes .../images/config-popup-menu-win.png | Bin 345419 -> 400965 bytes .../images/config-popup-win-linux-switch.png | Bin 324246 -> 416121 bytes .../images/d4win-download-error.png | Bin 43151 -> 0 bytes .../images/diagnose-feedback-id-win.png | Bin 128087 -> 179036 bytes .../images/docker-cloud-menu.png | Bin 0 -> 89774 bytes docker-for-windows/images/docker-cloud.png | Bin 0 -> 108136 bytes .../images/docker-daemon_advanced.png | Bin 63176 -> 93757 bytes .../images/docker-daemon_basic.png | Bin 43232 -> 70181 bytes docker-for-windows/images/docker-store.png | Bin 271514 -> 350963 bytes docker-for-windows/images/download.png | Bin 2735 -> 0 bytes docker-for-windows/images/proxies.png | Bin 67267 -> 96123 bytes .../images/settings-general.png | Bin 82400 -> 110068 bytes docker-for-windows/images/settings-kernel.png | Bin 61674 -> 0 bytes .../images/settings-network.png | Bin 70335 -> 96728 bytes docker-for-windows/images/submit-token.png | Bin 15069 -> 0 bytes docker-for-windows/images/whale-x.png | Bin 6623 -> 566 bytes docker-for-windows/index.md | 22 + docker-for-windows/install.md | 32 +- docker-for-windows/release-notes.md | 50 +- docsarchive.md | 23 +- engine/installation/images/green-check.svg | 14 + engine/installation/index.md | 89 +- engine/installation/linux/centos.md | 183 +- engine/installation/linux/debian.md | 160 +- engine/installation/linux/fedora.md | 125 +- .../installation/linux/linux-postinstall.md | 3 +- engine/installation/linux/oracle.md | 269 +-- .../linux/repo_files/centos/docker.repo | 27 - .../linux/repo_files/fedora/docker.repo | 27 - .../linux/repo_files/oracle/docker-ol6.repo | 27 - .../linux/repo_files/oracle/docker-ol7.repo | 27 - engine/installation/linux/rhel.md | 186 +- engine/installation/linux/suse.md | 213 +- engine/installation/linux/ubuntu.md | 214 +- enterprise/index.md | 20 + favicon.ico | Bin 0 -> 4286 bytes images/UCP_48.svg | 18 + images/UCPn_48.svg | 18 + images/apple_48.svg | 17 + images/applen_48.svg | 16 + images/cloud_48.svg | 17 + images/cloudn_48.svg | 17 + images/compose_48.svg | 18 + images/composen_48.svg | 18 + images/docs.png | Bin 0 -> 11135 bytes images/docs@2x.png | Bin 0 -> 27740 bytes images/dtr_48.svg | 17 + images/dtrn_48.svg | 17 + images/engine_48.svg | 17 + images/enginen_48.svg | 17 + images/fan.svg | 1 + images/linux_48.svg | 17 + images/linuxn_48.svg | 17 + images/machine_48.svg | 18 + images/machinen_48.svg | 18 + images/seach.png | Bin 0 -> 1233 bytes images/search.png | Bin 0 -> 1196 bytes images/windows_48.svg | 17 + images/windowsn_48.svg | 17 + index.md | 261 +-- js/bootstrap.min.js | 8 +- js/docs.js | 299 +++ js/jquery.js | 4 + js/menu.js | 4 +- landing.md | 152 ++ learn.md | 4 +- registry/insecure.md | 13 +- toolbox/toolbox_install_windows.md | 2 +- 116 files changed, 7694 insertions(+), 1724 deletions(-) create mode 100644 _includes/docker_platform_matrix.md create mode 100644 _includes/footer.html create mode 100644 _includes/global-header.html create mode 100644 _includes/header.html delete mode 100644 _includes/noindex.html create mode 100644 _includes/side-menu.html delete mode 100644 allpagelinks.md mode change 100644 => 100755 css/bootstrap.min.css create mode 100755 css/bootstrap.min.css.map create mode 100644 css/font-awesome.min.css create mode 100644 css/main.css create mode 100644 css/style-alt.css create mode 100644 css/style.css create mode 100644 css/temp.css create mode 100644 docker-for-mac/images/docker-cloud-create-swarm.png create mode 100644 docker-for-mac/images/docker-cloud.png create mode 100644 docker-for-mac/images/docker-store.png delete mode 100644 docker-for-mac/images/mac-install-success-docker-wait.png create mode 100644 docker-for-mac/images/menu-cloud-sign-in.png create mode 100644 docker-for-mac/images/menu-prefs-selected.png delete mode 100644 docker-for-windows/images/Start-Authorize.png delete mode 100644 docker-for-windows/images/Start-init.png delete mode 100644 docker-for-windows/images/chat.png delete mode 100644 docker-for-windows/images/d4win-download-error.png create mode 100644 docker-for-windows/images/docker-cloud-menu.png create mode 100644 docker-for-windows/images/docker-cloud.png delete mode 100644 docker-for-windows/images/download.png delete mode 100644 docker-for-windows/images/settings-kernel.png delete mode 100644 docker-for-windows/images/submit-token.png create mode 100644 engine/installation/images/green-check.svg delete mode 100644 engine/installation/linux/repo_files/centos/docker.repo delete mode 100644 engine/installation/linux/repo_files/fedora/docker.repo delete mode 100644 engine/installation/linux/repo_files/oracle/docker-ol6.repo delete mode 100644 engine/installation/linux/repo_files/oracle/docker-ol7.repo create mode 100644 enterprise/index.md create mode 100644 favicon.ico create mode 100644 images/UCP_48.svg create mode 100644 images/UCPn_48.svg create mode 100644 images/apple_48.svg create mode 100644 images/applen_48.svg create mode 100644 images/cloud_48.svg create mode 100644 images/cloudn_48.svg create mode 100644 images/compose_48.svg create mode 100644 images/composen_48.svg create mode 100644 images/docs.png create mode 100644 images/docs@2x.png create mode 100644 images/dtr_48.svg create mode 100644 images/dtrn_48.svg create mode 100644 images/engine_48.svg create mode 100644 images/enginen_48.svg create mode 100644 images/fan.svg create mode 100644 images/linux_48.svg create mode 100644 images/linuxn_48.svg create mode 100644 images/machine_48.svg create mode 100644 images/machinen_48.svg create mode 100644 images/seach.png create mode 100644 images/search.png create mode 100644 images/windows_48.svg create mode 100644 images/windowsn_48.svg mode change 100644 => 100755 js/bootstrap.min.js create mode 100644 js/docs.js create mode 100644 js/jquery.js create mode 100644 landing.md diff --git a/_data/docsarchive/docker-compose.yml b/_data/docsarchive/docker-compose.yml index 1c9443d001..1f1c5f2209 100644 --- a/_data/docsarchive/docker-compose.yml +++ b/_data/docsarchive/docker-compose.yml @@ -1,36 +1,36 @@ -v1.4: - image: docs/docker.github.io:v1.4 - ports: - - "4014:4000" -v1.5: - image: docs/docker.github.io:v1.5 - ports: - - "4015:4000" -v1.6: - image: docs/docker.github.io:v1.6 - ports: - - "4016:4000" -v1.7: - image: docs/docker.github.io:v1.7 - ports: - - "4017:4000" -v1.8: - image: docs/docker.github.io:v1.8 - ports: - - "4018:4000" -v1.9: - image: docs/docker.github.io:v1.9 - ports: - - "4019:4000" -v1.10: - image: docs/docker.github.io:v1.10 - ports: - - "4110:4000" -v1.11: - image: docs/docker.github.io:v1.11 - ports: - - "4111:4000" v1.12: image: docs/docker.github.io:v1.12 ports: - "4112:4000" +v1.11: + image: docs/docker.github.io:v1.11 + ports: + - "4111:4000" +v1.10: + image: docs/docker.github.io:v1.10 + ports: + - "4110:4000" +v1.9: + image: docs/docker.github.io:v1.9 + ports: + - "4019:4000" +v1.8: + image: docs/docker.github.io:v1.8 + ports: + - "4018:4000" +v1.7: + image: docs/docker.github.io:v1.7 + ports: + - "4017:4000" +v1.6: + image: docs/docker.github.io:v1.6 + ports: + - "4016:4000" +v1.5: + image: docs/docker.github.io:v1.5 + ports: + - "4015:4000" +v1.4: + image: docs/docker.github.io:v1.4 + ports: + - "4014:4000" diff --git a/_data/toc.yaml b/_data/toc.yaml index 3b99ce56d0..d882dbd596 100644 --- a/_data/toc.yaml +++ b/_data/toc.yaml @@ -19,7 +19,7 @@ guides: - sectiontitle: Get Docker section: - path: /engine/installation/ - title: Install Docker Engine + title: Install Docker - path: /docker-for-mac/install/ title: Docker for Mac - path: /docker-for-windows/install/ @@ -35,11 +35,11 @@ guides: - path: /engine/installation/linux/fedora/ title: Fedora - path: /engine/installation/linux/debian/ - title: Debian or Raspbian + title: Debian - path: /engine/installation/linux/oracle/ title: Oracle Linux - path: /engine/installation/linux/suse/ - title: OpenSuSE and SuSE Linux Enterprise + title: SuSE Linux Enterprise - path: /engine/installation/linux/other/ title: Other Linux distributions - path: /engine/installation/binaries/ @@ -446,28 +446,8 @@ guides: title: Where to chat or get help - path: /opensource/doc-style/ title: Style guide for Docker documentation -- sectiontitle: Docs archive - section: - - path: /docsarchive/ - title: View the docs archives - - path: /v1.4 - title: v1.4 - - path: /v1.5 - title: v1.5 - - path: /v1.6 - title: v1.6 - - path: /v1.7 - title: v1.7 - - path: /v1.8 - title: v1.8 - - path: /v1.9 - title: v1.9 - - path: /v1.10 - title: v1.10 - - path: /v1.11 - title: v1.11 - - path: /v1.12 - title: v1.12 +- path: /docsarchive/ + title: View the docs archives reference: - title: Dockerfile reference @@ -889,6 +869,13 @@ samples: title: WordPress manuals: +- sectiontitle: Docker Enterprise Edition + section: + - path: /enterprise/ + title: About Docker EE + - path: /engine/installation/ + title: Install Docker EE + nosync: true - sectiontitle: Commercially Supported Docker Engine section: - sectiontitle: 1.13 diff --git a/_includes/d4a_buttons.md b/_includes/d4a_buttons.md index d5fc4e8251..a9bfc88f01 100644 --- a/_includes/d4a_buttons.md +++ b/_includes/d4a_buttons.md @@ -1,26 +1,28 @@ -{% capture aws_button_latest %} -![Docker for AWS](https://s3.amazonaws.com/cloudformation-examples/cloudformation-launch-stack.png) -{% endcapture %} +{% assign d4a_stable = "CE-Stable-1" %} +{% assign d4a_edge = "CE-Edge-1" %} +{% assign edition_version = "17.03.0-ce" %} + + {% capture aws_blue_latest %} -Deploy Docker for AWS (stable) +Deploy Docker Community Edition (CE) for AWS (stable) {% endcapture %} + {% capture aws_blue_edge %} -Deploy Docker for AWS (beta) +Deploy Docker Community Edition (CE) for AWS (edge) {% endcapture %} + {% capture aws_blue_vpc_latest %} -Deploy Docker for AWS (stable)
uses your existing VPC
+Deploy Docker Community Edition (CE) for AWS (stable)
uses your existing VPC
{% endcapture %} + {% capture aws_blue_vpc_edge %} -Deploy Docker for AWS (beta)
uses your existing VPC
+Deploy Docker Community Edition (CE) for AWS (edge)
uses your existing VPC
{% endcapture %} {% capture azure_blue_latest %} -Deploy Docker for Azure (stable) -{% endcapture %} -{% capture azure_blue_edge %} -Deploy Docker for Azure (beta) -{% endcapture %} -{% capture azure_button_latest %} -![Docker for Azure](http://azuredeploy.net/deploybutton.png) +Deploy Docker Community Edition (CE) for Azure (stable) {% endcapture %} +{% capture azure_blue_edge %} +Deploy Docker Community Edition (CE) for Azure (edge) +{% endcapture %} diff --git a/_includes/docker_platform_matrix.md b/_includes/docker_platform_matrix.md new file mode 100644 index 0000000000..128c13d5fb --- /dev/null +++ b/_includes/docker_platform_matrix.md @@ -0,0 +1,17 @@ +{% capture green-check %}![yes](/engine/installation/images/green-check.svg){: style="height: 14px"}{% endcapture %} + +| Platform | Docker EE | Docker CE | +|:-------------------------------------------------------------------------------------|:-----------------:|:-----------------:| +| [Ubuntu](linux/ubuntulinux.md) | {{ green-check }} | {{ green-check }} | +| [Debian](linux/debian.md) | | {{ green-check }} | +| [Red Hat Enterprise Linux](linux/rhel.md) | {{ green-check }} | | +| [CentOS](linux/centos.md) | {{ green-check }} | {{ green-check }} | +| [Fedora](linux/fedora.md) | | {{ green-check }} | +| [Oracle Linux](linux/oracle.md) | {{ green-check }} | | +| [SUSE Linux Enterprise Server](linux/suse.md) | {{ green-check }} | | +| [Microsoft Windows Server 2016](https://docs.microsoft.com/en-us/virtualization/windowscontainers/quick-start/quick-start-windows-server){: target="_blank" class="_" } | {{ green-check }} | | +| [Microsoft Windows 10](/docker-for-windows/)) | | {{ green-check }} | +| [macOS](/docker-for-mac/) | | {{ green-check }} | +| [Microsoft Azure](/docker-cloud/infrastructure/link-aws.md) | {{ green-check }} | {{ green-check }} | +| [Amazon Web Services](/docker-cloud/infrastructure/link-aws.md) | {{ green-check }} | {{ green-check }} | +{: style="width: 75%" } diff --git a/_includes/footer.html b/_includes/footer.html new file mode 100644 index 0000000000..14ae6c0a9c --- /dev/null +++ b/_includes/footer.html @@ -0,0 +1,111 @@ + + + diff --git a/_includes/global-header.html b/_includes/global-header.html new file mode 100644 index 0000000000..60b27a2aaa --- /dev/null +++ b/_includes/global-header.html @@ -0,0 +1,105 @@ +
+
+
+
+ +
+
+ +
+
+
+
+

Docker's Documentation

+

Docker provides a way to run applications securely isolated in a container, packaged with all its dependencies and libraries.

+ +
+
+
+
+ + +
diff --git a/_includes/header.html b/_includes/header.html new file mode 100644 index 0000000000..f28e78f312 --- /dev/null +++ b/_includes/header.html @@ -0,0 +1,49 @@ + diff --git a/_includes/noindex.html b/_includes/noindex.html deleted file mode 100644 index f5105bd8c7..0000000000 --- a/_includes/noindex.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/_includes/side-menu.html b/_includes/side-menu.html new file mode 100644 index 0000000000..bc22ee4adc --- /dev/null +++ b/_includes/side-menu.html @@ -0,0 +1,5 @@ +{% if page.landing == true %}',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),c.isInStateTrue()?void 0:(clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide())},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-mo.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.6",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.6",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(void 0===e[a+1]||b .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.6",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.7",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a("#"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.7",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target).closest(".btn");b.call(d,"toggle"),a(c.target).is('input[type="radio"], input[type="checkbox"]')||(c.preventDefault(),d.is("input,button")?d.trigger("focus"):d.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(a>this.$items.length-1||a<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide("next")},c.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.7",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.7",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&jdocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth
',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-mo.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.7",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.7",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(void 0===e[a+1]||b .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.7",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return e=a-d&&"bottom"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file diff --git a/js/docs.js b/js/docs.js new file mode 100644 index 0000000000..74c4d29ebf --- /dev/null +++ b/js/docs.js @@ -0,0 +1,299 @@ +// Right nav highlighting +var sidebarObj = (document.getElementsByClassName("sidebar")[0]) ? document.getElementsByClassName("sidebar")[0] : document.getElementsByClassName("sidebar-home")[0] +var sidebarBottom = sidebarObj.getBoundingClientRect().bottom; +var footerTop = document.getElementsByClassName("footer")[0].getBoundingClientRect().top; +var headerOffset = document.getElementsByClassName("container-fluid")[0].getBoundingClientRect().bottom; + +var x = document.links.length; +var baseHref = document.getElementsByTagName('base')[0].href +for (i = 0; i < x; i++) { + var munged = false; + var thisHREF = document.links[i].href; + var originalURL = "{{ page.url }}"; + if (thisHREF.indexOf(baseHref + "#") > -1) { + // hash fix + //console.log('BEFORE: base:',baseHref,'thisHREF:',thisHREF,'originalURL:',originalURL); + thisHREF = originalURL + thisHREF.replace(baseHref, ""); + //console.log('AFTER: base:',baseHref,'thisHREF:',thisHREF,'originalURL:',originalURL); + } + if ((thisHREF.indexOf(window.location.hostname) > -1 || thisHREF.indexOf('http') == -1) && document.links[i].className.indexOf("nomunge") < 0) { + munged = true; + thisHREF = thisHREF.replace(".md", "/").replace("/index/", "/"); + document.links[i].setAttribute('href', thisHREF); + } +} + +// ensure that the left nav visibly displays the current topic +var current = document.getElementsByClassName("active currentPage"); +if (current[0]) { + if (sidebarObj) { + current[0].scrollIntoView(true); + sidebarObj.scrollTop -= 150; + } + } + +function highlightRightNav(heading) +{ + if (heading == "title") + { + history.replaceState({},"Top of page on " + document.location.pathname,document.location.protocol +"//"+ document.location.hostname + (location.port ? ':'+location.port: '') + document.location.pathname); + $("#my_toc a").each(function(){ + $(this).removeClass("active"); + }); + $("#sidebar-wrapper").animate({ + scrollTop: 0 + },800); + } else { + var targetAnchorHREF = document.location.protocol +"//"+ document.location.hostname + (location.port ? ':'+location.port: '') + document.location.pathname + "#" + heading; + // make sure we aren't filtering out that heading level + var noFilterFound = false; + $("#my_toc a").each(function(){ + if (this.href==targetAnchorHREF) { + noFilterFound = true; + } + }); + // now, highlight that heading + if (noFilterFound) + { + $("#my_toc a").each(function(){ + //console.log("right-nav",this.href); + if (this.href==targetAnchorHREF) + { + history.replaceState({},this.innerText,targetAnchorHREF); + $(this).addClass("active"); + var sidebarOffset = (sidebarBottom > 200) ? 200 : headerOffset - 20; + $("#sidebar-wrapper").animate({ + scrollTop: $("#sidebar-wrapper").scrollTop() + $(this).position().top - sidebarOffset + },100); + //document.getElementById("sidebar-wrapper").scrollTop = this.getBoundingClientRect().top - 200; + } else { + $(this).removeClass("active"); + } + }); + } + } +} +function checkNavSizes() +{ + sidebarBottom = sidebarObj.getBoundingClientRect().bottom; + footerTop = document.getElementsByClassName("footer")[0].getBoundingClientRect().top; + headerOffset = document.getElementsByClassName("container-fluid")[0].getBoundingClientRect().bottom; + if (footerTop < sidebarBottom || (sidebarBottom < footerTop && sidebarBottom < $(window).height())) + { + + // the footer is overlapping the sidebar + var sidebarHeight = (footerTop < $(window).height()) ? footerTop : $(window).height(); + var tocNavHeight = (footerTop < $(window).height()) ? footerTop : $(window).height(); + sidebarObj.style.height = sidebarHeight + "px"; + document.getElementsByClassName("toc-nav")[0].style.height = tocNavHeight + "px"; + $(sidebarObj).clearQueue().finish(); + setTimeout(highlightRightNav(currentHeading),1); + } +} +$(window).resize(function() { + checkNavSizes(); +}); +var currentHeading = ""; +$(window).scroll(function(){ + checkNavSizes(); + var headingPositions = new Array(); + $("h1, h2, h3, h4, h5, h6").each(function(){ + if (this.id == "") this.id="title"; + headingPositions[this.id]=this.getBoundingClientRect().top; + }); + headingPositions.sort(); + // the headings have all been grabbed and sorted in order of their scroll + // position (from the top of the page). First one is toppermost. + for(var key in headingPositions) + { + if (headingPositions[key] > 0 && headingPositions[key] < 200) + { + if (currentHeading != key) + { + // a new heading has scrolled to within 200px of the top of the page. + // highlight the right-nav entry and de-highlight the others. + highlightRightNav(key); + currentHeading = key; + } + break; + } + } +}); + + +// Cookie functions +function createCookie(name,value,days) { + var expires = ""; + if (days) { + var date = new Date(); + date.setTime(date.getTime() + (days*24*60*60*1000)); + expires = "; expires=" + date.toUTCString(); + } + document.cookie = name + "=" + value + expires + "; path=/"; +} + +function readCookie(name) { + var nameEQ = name + "="; + var ca = document.cookie.split(';'); + for(var i=0;i < ca.length;i++) { + var c = ca[i]; + while (c.charAt(0)==' ') c = c.substring(1,c.length); + if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); + } + return null; +} + +function eraseCookie(name) { + createCookie(name,"",-1); +} +/* +if (readCookie("night") == "true") { + document.getElementById('pagestyle').setAttribute('href', '/css/style-alt.css'); + $('#switch-style').prop('checked', true); +} else { + document.getElementById('pagestyle').setAttribute('href', '/css/style.css'); + $('#switch-style').prop('checked', false); +} +*/ + + +/* + * + * toggle menu ********************************************************************* + * + */ + +$("#menu-toggle").click(function(e) { + e.preventDefault(); + $(".wrapper").toggleClass("right-open"); + }); +$(".navbar-toggle").click(function(){ + $(".sidebar, .sidebar-home").each(function(){ + if($(this).hasClass("hidden-sm")) { + $(this).removeClass("hidden-sm"); + } else { + $(this).addClass("hidden-sm"); + } + if($(this).hasClass("hidden-xs")) { + $(this).removeClass("hidden-xs"); + } else { + $(this).addClass("hidden-xs"); + } + }); +}); + +var navHeight = $('.navbar').outerHeight(true) + 80; + +$(document.body).scrollspy({ + target: '#leftCol', + offset: navHeight +}); + +function loadHash(hashObj) +{ + // Using jQuery's animate() method to add smooth page scroll + // The optional number (800) specifies the number of milliseconds it takes to scroll to the specified area + $('html, body').animate({ + scrollTop: $(hashObj).offset().top-80 + }, 800); +} + +$(document).ready(function(){ + // Add smooth scrolling to all links + // $( ".toc-nav a" ).addClass( "active" ); + $(".toc-nav a").on('click', function(event) { + // $(this).addClass('active'); + // Make sure this.hash has a value before overriding default behavior + if (this.hash !== "") { + // Prevent default anchor click behavior + event.preventDefault(); + + // Store hash + var hash = this.hash; + loadHash(hash); + + // Add hash (#) to URL when done scrolling (default click behavior) + window.location.hash = hash; + + } // End if + }); + if (window.location.hash) loadHash(window.location.hash); +}); + + +$(document).ready(function(){ + // Add smooth scrolling to all links + $(".nav-sidebar ul li a").on('click', function(event) { + + // Make sure this.hash has a value before overriding default behavior + if (this.hash !== "") { + // Prevent default anchor click behavior + event.preventDefault(); + + // Store hash + var hash = this.hash; + + // Using jQuery's animate() method to add smooth page scroll + // The optional number (800) specifies the number of milliseconds it takes to scroll to the specified area + $('html, body').animate({ + scrollTop: $(hash).offset().top-80 + }, 800, function(){ + + // Add hash (#) to URL when done scrolling (default click behavior) + window.location.hash = hash; + }); + } // End if + }); +}); + + +/* + * + * make dropdown show on hover ********************************************************************* + * + */ + +$('ul.nav li.dropdown').hover(function() { + $(this).find('.dropdown-menu').stop(true, true).delay(200).fadeIn(500); +}, function() { + $(this).find('.dropdown-menu').stop(true, true).delay(200).fadeOut(500); +}); + +/* + * + * swapStyleSheet********************************************************************* + * + */ + +function swapStyleSheet(sheet) { + document.getElementById('pagestyle').setAttribute('href', sheet); +} + + +$('#switch-style').change(function() { + + if ($(this).is(':checked')) { + swapStyleSheet('/css/style-alt.css'); + createCookie("night",true,999) + } else { + swapStyleSheet('/css/style.css'); + eraseCookie("night") + } +}); + +/* + * + * TEMP HACK For side menu********************************************************************* + * + */ + +$('.nav-sidebar ul li a').click(function() { + $(this).addClass('collapse').siblings().toggleClass('in'); +}); + +if($('.nav-sidebar ul a.active').length != 0) +{ + $('.nav-sidebar ul').click(function() { + $(this).addClass('collapse in').siblings; + }); +} diff --git a/js/jquery.js b/js/jquery.js new file mode 100644 index 0000000000..d1608e37ff --- /dev/null +++ b/js/jquery.js @@ -0,0 +1,4 @@ +/*! jQuery v1.11.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.1",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="
",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h; +if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="
a",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/\s*$/g,rb={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:k.htmlSerialize?[0,"",""]:[1,"X
","
"]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?""!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("