Full Code of 56kcloud/Training for AI

main 8848b8430ccb cached
2190 files
57.6 MB
6.1M tokens
9407 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (24,279K chars total). Download the full file to get everything.
Repository: 56kcloud/Training
Branch: main
Commit: 8848b8430ccb
Files: 2190
Total size: 57.6 MB

Directory structure:
gitextract_zw7rzu5x/

├── .gitmodules
├── CNAME
├── Cloud/
│   └── README.md
├── DevOps/
│   └── README.md
├── DevOpsDays/
│   └── readme.md
├── Docker/
│   ├── 12factor/
│   │   ├── 00_application.md
│   │   ├── 01_codebase.md
│   │   ├── 02_dependencies.md
│   │   ├── 03_configuration.md
│   │   ├── 04_external_services.md
│   │   ├── 05_build_release_run.md
│   │   ├── 06_processes.md
│   │   ├── 07_port_binding.md
│   │   ├── 08_concurrency.md
│   │   ├── 09_disposability.md
│   │   ├── 10_dev_prod_parity.md
│   │   ├── 11_logs.md
│   │   ├── 12_admin_processes.md
│   │   └── README.md
│   ├── Docker-Orchestration/
│   │   └── readme.md
│   ├── README.md
│   ├── additional-ressources/
│   │   ├── README.md
│   │   ├── developer-tools/
│   │   │   ├── README.md
│   │   │   ├── README_es.md
│   │   │   ├── java/
│   │   │   │   ├── chapters/
│   │   │   │   │   ├── appa-common-commands.adoc
│   │   │   │   │   ├── appb-troubleshooting.adoc
│   │   │   │   │   ├── appc-references.adoc
│   │   │   │   │   ├── ch01-setup.adoc
│   │   │   │   │   ├── ch02-basic-concepts.adoc
│   │   │   │   │   ├── ch03-build-image-java-9.adoc
│   │   │   │   │   ├── ch03-build-image.adoc
│   │   │   │   │   ├── ch04-run-container.adoc
│   │   │   │   │   ├── ch05-compose.adoc
│   │   │   │   │   ├── ch06-swarm.adoc
│   │   │   │   │   ├── ch07-eclipse.adoc
│   │   │   │   │   ├── ch07-intellij.adoc
│   │   │   │   │   ├── ch07-netbeans.adoc
│   │   │   │   │   ├── ch08-aws.adoc
│   │   │   │   │   ├── ch08-azure.adoc
│   │   │   │   │   ├── ch08-cloud.adoc
│   │   │   │   │   ├── ch09-cicd.adoc
│   │   │   │   │   ├── ch10-monitoring.adoc
│   │   │   │   │   └── ch11-bigdata.adoc
│   │   │   │   ├── readme.adoc
│   │   │   │   └── scripts/
│   │   │   │       └── docker-compose-pull-images.yml
│   │   │   ├── java-debugging/
│   │   │   │   ├── Eclipse-README.md
│   │   │   │   ├── Eclipse-README_es.md
│   │   │   │   ├── IntelliJ-README.md
│   │   │   │   ├── IntelliJ-README_es.md
│   │   │   │   ├── NetBeans-README.md
│   │   │   │   ├── NetBeans-README_es.md
│   │   │   │   ├── README.md
│   │   │   │   ├── README_es.md
│   │   │   │   ├── app/
│   │   │   │   │   ├── .gitignore
│   │   │   │   │   ├── pom.xml
│   │   │   │   │   └── src/
│   │   │   │   │       └── main/
│   │   │   │   │           ├── java/
│   │   │   │   │           │   └── com/
│   │   │   │   │           │       └── docker/
│   │   │   │   │           │           └── UserSignup/
│   │   │   │   │           │               ├── controller/
│   │   │   │   │           │               │   └── UserController.java
│   │   │   │   │           │               ├── model/
│   │   │   │   │           │               │   ├── User.java
│   │   │   │   │           │               │   └── UserLogin.java
│   │   │   │   │           │               ├── repository/
│   │   │   │   │           │               │   └── UserRepository.java
│   │   │   │   │           │               ├── service/
│   │   │   │   │           │               │   ├── UserService.java
│   │   │   │   │           │               │   └── UserServiceImpl.java
│   │   │   │   │           │               └── util/
│   │   │   │   │           │                   └── Rot13.java
│   │   │   │   │           ├── resources/
│   │   │   │   │           │   ├── META-INF/
│   │   │   │   │           │   │   └── persistence.xml
│   │   │   │   │           │   ├── jpaContext.xml
│   │   │   │   │           │   └── messages.properties
│   │   │   │   │           └── webapp/
│   │   │   │   │               ├── WEB-INF/
│   │   │   │   │               │   ├── config/
│   │   │   │   │               │   │   └── servletConfig.xml
│   │   │   │   │               │   ├── jsp/
│   │   │   │   │               │   │   ├── failure.jsp
│   │   │   │   │               │   │   ├── login.jsp
│   │   │   │   │               │   │   ├── signup.jsp
│   │   │   │   │               │   │   └── success.jsp
│   │   │   │   │               │   └── web.xml
│   │   │   │   │               ├── assets/
│   │   │   │   │               │   └── css/
│   │   │   │   │               │       └── bootstrap-united.css
│   │   │   │   │               ├── bootstrap/
│   │   │   │   │               │   ├── css/
│   │   │   │   │               │   │   ├── bootstrap-theme.css
│   │   │   │   │               │   │   └── bootstrap.css
│   │   │   │   │               │   └── js/
│   │   │   │   │               │       └── bootstrap.js
│   │   │   │   │               ├── datepicker/
│   │   │   │   │               │   ├── css/
│   │   │   │   │               │   │   └── datepicker.css
│   │   │   │   │               │   ├── js/
│   │   │   │   │               │   │   └── bootstrap-datepicker.js
│   │   │   │   │               │   └── less/
│   │   │   │   │               │       └── datepicker.less
│   │   │   │   │               ├── index.jsp
│   │   │   │   │               └── jquery-1.8.3.js
│   │   │   │   ├── docker-compose.yml
│   │   │   │   ├── images/
│   │   │   │   │   └── resizeImg.py
│   │   │   │   ├── registration-database/
│   │   │   │   │   ├── Dockerfile
│   │   │   │   │   ├── README.md
│   │   │   │   │   └── docker-entrypoint-initdb.d/
│   │   │   │   │       └── initialize_db.sql
│   │   │   │   └── registration-webserver/
│   │   │   │       ├── Dockerfile
│   │   │   │       ├── README.md
│   │   │   │       └── tomcat/
│   │   │   │           ├── mysql-connector-java-5.1.36-bin.jar
│   │   │   │           ├── run.sh
│   │   │   │           └── tomcat-users.xml
│   │   │   ├── nodejs/
│   │   │   │   └── porting/
│   │   │   │       ├── 1_node_application.md
│   │   │   │       ├── 2_application_image.md
│   │   │   │       ├── 3_publish_image.md
│   │   │   │       ├── 4_single_host_networking.md
│   │   │   │       ├── 5_multiple_hosts_networking.md
│   │   │   │       ├── 6_deploy_on_swarm.md
│   │   │   │       ├── README.md
│   │   │   │       └── summary.md
│   │   │   ├── nodejs-debugging/
│   │   │   │   ├── .gitignore
│   │   │   │   ├── README.md
│   │   │   │   ├── VSCode-README.md
│   │   │   │   └── app/
│   │   │   │       ├── Dockerfile
│   │   │   │       ├── app.js
│   │   │   │       ├── docker-compose.yml
│   │   │   │       ├── index.html
│   │   │   │       ├── layouts/
│   │   │   │       │   └── main.handlebars
│   │   │   │       └── package.json
│   │   │   └── ruby/
│   │   │       └── README.md
│   │   ├── dockercon-us-2017/
│   │   │   ├── README.md
│   │   │   ├── docker-cloud/
│   │   │   │   └── README.md
│   │   │   ├── docker-enterprise/
│   │   │   │   └── README.md
│   │   │   ├── docker-networking/
│   │   │   │   └── README.md
│   │   │   ├── docker-orchestration/
│   │   │   │   └── README.md
│   │   │   ├── securing-apps-docker-enterprise/
│   │   │   │   └── README.md
│   │   │   ├── template.md
│   │   │   ├── windows-101/
│   │   │   │   ├── README.md
│   │   │   │   └── tweet-app/
│   │   │   │       ├── Dockerfile
│   │   │   │       ├── index.html
│   │   │   │       └── start.ps1
│   │   │   ├── windows-modernize-aspnet-dev/
│   │   │   │   ├── .gitignore
│   │   │   │   ├── README.md
│   │   │   │   ├── v1-src/
│   │   │   │   │   ├── ProductLaunch/
│   │   │   │   │   │   ├── ProductLaunch.Core/
│   │   │   │   │   │   │   ├── Env.cs
│   │   │   │   │   │   │   ├── ProductLaunch.Core.csproj
│   │   │   │   │   │   │   └── Properties/
│   │   │   │   │   │   │       └── AssemblyInfo.cs
│   │   │   │   │   │   ├── ProductLaunch.EndToEndTests/
│   │   │   │   │   │   │   ├── App.config
│   │   │   │   │   │   │   ├── ProductLaunch.EndToEndTests.csproj
│   │   │   │   │   │   │   ├── Properties/
│   │   │   │   │   │   │   │   └── AssemblyInfo.cs
│   │   │   │   │   │   │   ├── ProspectSignUp.feature
│   │   │   │   │   │   │   ├── ProspectSignUp.feature.cs
│   │   │   │   │   │   │   ├── ProspectSignUpSteps.cs
│   │   │   │   │   │   │   └── packages.config
│   │   │   │   │   │   ├── ProductLaunch.Entities/
│   │   │   │   │   │   │   ├── Country.cs
│   │   │   │   │   │   │   ├── ProductLaunch.Entities.csproj
│   │   │   │   │   │   │   ├── Properties/
│   │   │   │   │   │   │   │   └── AssemblyInfo.cs
│   │   │   │   │   │   │   ├── Prospect.cs
│   │   │   │   │   │   │   └── Role.cs
│   │   │   │   │   │   ├── ProductLaunch.MessageHandlers.IndexProspect/
│   │   │   │   │   │   │   ├── App.config
│   │   │   │   │   │   │   ├── Config.cs
│   │   │   │   │   │   │   ├── Documents/
│   │   │   │   │   │   │   │   └── Prospect.cs
│   │   │   │   │   │   │   ├── Indexer/
│   │   │   │   │   │   │   │   └── Index.cs
│   │   │   │   │   │   │   ├── ProductLaunch.MessageHandlers.IndexProspect.csproj
│   │   │   │   │   │   │   ├── Program.cs
│   │   │   │   │   │   │   ├── Properties/
│   │   │   │   │   │   │   │   └── AssemblyInfo.cs
│   │   │   │   │   │   │   └── packages.config
│   │   │   │   │   │   ├── ProductLaunch.MessageHandlers.SaveProspect/
│   │   │   │   │   │   │   ├── App.config
│   │   │   │   │   │   │   ├── ProductLaunch.MessageHandlers.SaveProspect.csproj
│   │   │   │   │   │   │   ├── Program.cs
│   │   │   │   │   │   │   ├── Properties/
│   │   │   │   │   │   │   │   └── AssemblyInfo.cs
│   │   │   │   │   │   │   └── packages.config
│   │   │   │   │   │   ├── ProductLaunch.Messaging/
│   │   │   │   │   │   │   ├── Config.cs
│   │   │   │   │   │   │   ├── MessageHelper.cs
│   │   │   │   │   │   │   ├── MessageQueue.cs
│   │   │   │   │   │   │   ├── Messages/
│   │   │   │   │   │   │   │   ├── Events/
│   │   │   │   │   │   │   │   │   └── ProspectSignedUpEvent.cs
│   │   │   │   │   │   │   │   └── Message.cs
│   │   │   │   │   │   │   ├── ProductLaunch.Messaging.csproj
│   │   │   │   │   │   │   ├── Properties/
│   │   │   │   │   │   │   │   └── AssemblyInfo.cs
│   │   │   │   │   │   │   └── packages.config
│   │   │   │   │   │   ├── ProductLaunch.Model/
│   │   │   │   │   │   │   ├── App.config
│   │   │   │   │   │   │   ├── Initializers/
│   │   │   │   │   │   │   │   └── StaticDataInitializer.cs
│   │   │   │   │   │   │   ├── ProductLaunch.Model.csproj
│   │   │   │   │   │   │   ├── ProductLaunchContext.cs
│   │   │   │   │   │   │   ├── Properties/
│   │   │   │   │   │   │   │   └── AssemblyInfo.cs
│   │   │   │   │   │   │   └── packages.config
│   │   │   │   │   │   ├── ProductLaunch.Model.Tests/
│   │   │   │   │   │   │   ├── App.config
│   │   │   │   │   │   │   ├── ProductLaunch.Model.Tests.csproj
│   │   │   │   │   │   │   ├── ProductLaunchContextTest.cs
│   │   │   │   │   │   │   ├── Properties/
│   │   │   │   │   │   │   │   └── AssemblyInfo.cs
│   │   │   │   │   │   │   └── packages.config
│   │   │   │   │   │   ├── ProductLaunch.Web/
│   │   │   │   │   │   │   ├── About.aspx
│   │   │   │   │   │   │   ├── About.aspx.cs
│   │   │   │   │   │   │   ├── About.aspx.designer.cs
│   │   │   │   │   │   │   ├── App_Start/
│   │   │   │   │   │   │   │   ├── BundleConfig.cs
│   │   │   │   │   │   │   │   └── RouteConfig.cs
│   │   │   │   │   │   │   ├── ApplicationInsights.config
│   │   │   │   │   │   │   ├── Bundle.config
│   │   │   │   │   │   │   ├── Config.cs
│   │   │   │   │   │   │   ├── Contact.aspx
│   │   │   │   │   │   │   ├── Contact.aspx.cs
│   │   │   │   │   │   │   ├── Contact.aspx.designer.cs
│   │   │   │   │   │   │   ├── Content/
│   │   │   │   │   │   │   │   ├── Site.css
│   │   │   │   │   │   │   │   └── bootstrap.css
│   │   │   │   │   │   │   ├── Default.aspx
│   │   │   │   │   │   │   ├── Default.aspx.cs
│   │   │   │   │   │   │   ├── Default.aspx.designer.cs
│   │   │   │   │   │   │   ├── Global.asax
│   │   │   │   │   │   │   ├── Global.asax.cs
│   │   │   │   │   │   │   ├── ProductLaunch.Web.csproj
│   │   │   │   │   │   │   ├── Project_Readme.html
│   │   │   │   │   │   │   ├── Properties/
│   │   │   │   │   │   │   │   └── AssemblyInfo.cs
│   │   │   │   │   │   │   ├── Scripts/
│   │   │   │   │   │   │   │   ├── WebForms/
│   │   │   │   │   │   │   │   │   ├── DetailsView.js
│   │   │   │   │   │   │   │   │   ├── Focus.js
│   │   │   │   │   │   │   │   │   ├── GridView.js
│   │   │   │   │   │   │   │   │   ├── MSAjax/
│   │   │   │   │   │   │   │   │   │   ├── MicrosoftAjax.js
│   │   │   │   │   │   │   │   │   │   ├── MicrosoftAjaxApplicationServices.js
│   │   │   │   │   │   │   │   │   │   ├── MicrosoftAjaxComponentModel.js
│   │   │   │   │   │   │   │   │   │   ├── MicrosoftAjaxCore.js
│   │   │   │   │   │   │   │   │   │   ├── MicrosoftAjaxGlobalization.js
│   │   │   │   │   │   │   │   │   │   ├── MicrosoftAjaxHistory.js
│   │   │   │   │   │   │   │   │   │   ├── MicrosoftAjaxNetwork.js
│   │   │   │   │   │   │   │   │   │   ├── MicrosoftAjaxSerialization.js
│   │   │   │   │   │   │   │   │   │   ├── MicrosoftAjaxTimer.js
│   │   │   │   │   │   │   │   │   │   ├── MicrosoftAjaxWebForms.js
│   │   │   │   │   │   │   │   │   │   └── MicrosoftAjaxWebServices.js
│   │   │   │   │   │   │   │   │   ├── Menu.js
│   │   │   │   │   │   │   │   │   ├── MenuStandards.js
│   │   │   │   │   │   │   │   │   ├── SmartNav.js
│   │   │   │   │   │   │   │   │   ├── TreeView.js
│   │   │   │   │   │   │   │   │   ├── WebForms.js
│   │   │   │   │   │   │   │   │   ├── WebParts.js
│   │   │   │   │   │   │   │   │   └── WebUIValidation.js
│   │   │   │   │   │   │   │   ├── _references.js
│   │   │   │   │   │   │   │   ├── bootstrap.js
│   │   │   │   │   │   │   │   ├── jquery-1.10.2.intellisense.js
│   │   │   │   │   │   │   │   ├── jquery-1.10.2.js
│   │   │   │   │   │   │   │   ├── modernizr-2.6.2.js
│   │   │   │   │   │   │   │   └── respond.js
│   │   │   │   │   │   │   ├── SignUp.aspx
│   │   │   │   │   │   │   ├── SignUp.aspx.cs
│   │   │   │   │   │   │   ├── SignUp.aspx.designer.cs
│   │   │   │   │   │   │   ├── Site.Master
│   │   │   │   │   │   │   ├── Site.Master.cs
│   │   │   │   │   │   │   ├── Site.Master.designer.cs
│   │   │   │   │   │   │   ├── Site.Mobile.Master
│   │   │   │   │   │   │   ├── Site.Mobile.Master.cs
│   │   │   │   │   │   │   ├── Site.Mobile.Master.designer.cs
│   │   │   │   │   │   │   ├── ThankYou.aspx
│   │   │   │   │   │   │   ├── ThankYou.aspx.cs
│   │   │   │   │   │   │   ├── ThankYou.aspx.designer.cs
│   │   │   │   │   │   │   ├── ViewSwitcher.ascx
│   │   │   │   │   │   │   ├── ViewSwitcher.ascx.cs
│   │   │   │   │   │   │   ├── ViewSwitcher.ascx.designer.cs
│   │   │   │   │   │   │   ├── Web.Debug.config
│   │   │   │   │   │   │   ├── Web.Release.config
│   │   │   │   │   │   │   ├── Web.config
│   │   │   │   │   │   │   └── packages.config
│   │   │   │   │   │   ├── ProductLaunch.sln
│   │   │   │   │   │   └── build.ps1
│   │   │   │   │   ├── build.ps1
│   │   │   │   │   └── docker/
│   │   │   │   │       ├── builder/
│   │   │   │   │       │   └── Dockerfile
│   │   │   │   │       └── web/
│   │   │   │   │           ├── Dockerfile
│   │   │   │   │           └── Web.config
│   │   │   │   └── v2-src/
│   │   │   │       ├── ProductLaunch/
│   │   │   │       │   ├── ProductLaunch.Core/
│   │   │   │       │   │   ├── Env.cs
│   │   │   │       │   │   ├── ProductLaunch.Core.csproj
│   │   │   │       │   │   └── Properties/
│   │   │   │       │   │       └── AssemblyInfo.cs
│   │   │   │       │   ├── ProductLaunch.EndToEndTests/
│   │   │   │       │   │   ├── App.config
│   │   │   │       │   │   ├── ProductLaunch.EndToEndTests.csproj
│   │   │   │       │   │   ├── Properties/
│   │   │   │       │   │   │   └── AssemblyInfo.cs
│   │   │   │       │   │   ├── ProspectSignUp.feature
│   │   │   │       │   │   ├── ProspectSignUp.feature.cs
│   │   │   │       │   │   ├── ProspectSignUpSteps.cs
│   │   │   │       │   │   └── packages.config
│   │   │   │       │   ├── ProductLaunch.Entities/
│   │   │   │       │   │   ├── Country.cs
│   │   │   │       │   │   ├── ProductLaunch.Entities.csproj
│   │   │   │       │   │   ├── Properties/
│   │   │   │       │   │   │   └── AssemblyInfo.cs
│   │   │   │       │   │   ├── Prospect.cs
│   │   │   │       │   │   └── Role.cs
│   │   │   │       │   ├── ProductLaunch.MessageHandlers.IndexProspect/
│   │   │   │       │   │   ├── App.config
│   │   │   │       │   │   ├── Config.cs
│   │   │   │       │   │   ├── Documents/
│   │   │   │       │   │   │   └── Prospect.cs
│   │   │   │       │   │   ├── Indexer/
│   │   │   │       │   │   │   └── Index.cs
│   │   │   │       │   │   ├── ProductLaunch.MessageHandlers.IndexProspect.csproj
│   │   │   │       │   │   ├── Program.cs
│   │   │   │       │   │   ├── Properties/
│   │   │   │       │   │   │   └── AssemblyInfo.cs
│   │   │   │       │   │   └── packages.config
│   │   │   │       │   ├── ProductLaunch.MessageHandlers.SaveProspect/
│   │   │   │       │   │   ├── App.config
│   │   │   │       │   │   ├── ProductLaunch.MessageHandlers.SaveProspect.csproj
│   │   │   │       │   │   ├── Program.cs
│   │   │   │       │   │   ├── Properties/
│   │   │   │       │   │   │   └── AssemblyInfo.cs
│   │   │   │       │   │   └── packages.config
│   │   │   │       │   ├── ProductLaunch.Messaging/
│   │   │   │       │   │   ├── Config.cs
│   │   │   │       │   │   ├── MessageHelper.cs
│   │   │   │       │   │   ├── MessageQueue.cs
│   │   │   │       │   │   ├── Messages/
│   │   │   │       │   │   │   ├── Events/
│   │   │   │       │   │   │   │   └── ProspectSignedUpEvent.cs
│   │   │   │       │   │   │   └── Message.cs
│   │   │   │       │   │   ├── ProductLaunch.Messaging.csproj
│   │   │   │       │   │   ├── Properties/
│   │   │   │       │   │   │   └── AssemblyInfo.cs
│   │   │   │       │   │   └── packages.config
│   │   │   │       │   ├── ProductLaunch.Model/
│   │   │   │       │   │   ├── App.config
│   │   │   │       │   │   ├── Config.cs
│   │   │   │       │   │   ├── Initializers/
│   │   │   │       │   │   │   └── StaticDataInitializer.cs
│   │   │   │       │   │   ├── ProductLaunch.Model.csproj
│   │   │   │       │   │   ├── ProductLaunchContext.cs
│   │   │   │       │   │   ├── Properties/
│   │   │   │       │   │   │   └── AssemblyInfo.cs
│   │   │   │       │   │   └── packages.config
│   │   │   │       │   ├── ProductLaunch.Model.Tests/
│   │   │   │       │   │   ├── App.config
│   │   │   │       │   │   ├── ProductLaunch.Model.Tests.csproj
│   │   │   │       │   │   ├── ProductLaunchContextTest.cs
│   │   │   │       │   │   ├── Properties/
│   │   │   │       │   │   │   └── AssemblyInfo.cs
│   │   │   │       │   │   └── packages.config
│   │   │   │       │   ├── ProductLaunch.Web/
│   │   │   │       │   │   ├── About.aspx
│   │   │   │       │   │   ├── About.aspx.cs
│   │   │   │       │   │   ├── About.aspx.designer.cs
│   │   │   │       │   │   ├── App_Start/
│   │   │   │       │   │   │   ├── BundleConfig.cs
│   │   │   │       │   │   │   └── RouteConfig.cs
│   │   │   │       │   │   ├── ApplicationInsights.config
│   │   │   │       │   │   ├── Bundle.config
│   │   │   │       │   │   ├── Contact.aspx
│   │   │   │       │   │   ├── Contact.aspx.cs
│   │   │   │       │   │   ├── Contact.aspx.designer.cs
│   │   │   │       │   │   ├── Content/
│   │   │   │       │   │   │   ├── Site.css
│   │   │   │       │   │   │   └── bootstrap.css
│   │   │   │       │   │   ├── Default.aspx
│   │   │   │       │   │   ├── Default.aspx.cs
│   │   │   │       │   │   ├── Default.aspx.designer.cs
│   │   │   │       │   │   ├── Global.asax
│   │   │   │       │   │   ├── Global.asax.cs
│   │   │   │       │   │   ├── ProductLaunch.Web.csproj
│   │   │   │       │   │   ├── Project_Readme.html
│   │   │   │       │   │   ├── Properties/
│   │   │   │       │   │   │   └── AssemblyInfo.cs
│   │   │   │       │   │   ├── Scripts/
│   │   │   │       │   │   │   ├── WebForms/
│   │   │   │       │   │   │   │   ├── DetailsView.js
│   │   │   │       │   │   │   │   ├── Focus.js
│   │   │   │       │   │   │   │   ├── GridView.js
│   │   │   │       │   │   │   │   ├── MSAjax/
│   │   │   │       │   │   │   │   │   ├── MicrosoftAjax.js
│   │   │   │       │   │   │   │   │   ├── MicrosoftAjaxApplicationServices.js
│   │   │   │       │   │   │   │   │   ├── MicrosoftAjaxComponentModel.js
│   │   │   │       │   │   │   │   │   ├── MicrosoftAjaxCore.js
│   │   │   │       │   │   │   │   │   ├── MicrosoftAjaxGlobalization.js
│   │   │   │       │   │   │   │   │   ├── MicrosoftAjaxHistory.js
│   │   │   │       │   │   │   │   │   ├── MicrosoftAjaxNetwork.js
│   │   │   │       │   │   │   │   │   ├── MicrosoftAjaxSerialization.js
│   │   │   │       │   │   │   │   │   ├── MicrosoftAjaxTimer.js
│   │   │   │       │   │   │   │   │   ├── MicrosoftAjaxWebForms.js
│   │   │   │       │   │   │   │   │   └── MicrosoftAjaxWebServices.js
│   │   │   │       │   │   │   │   ├── Menu.js
│   │   │   │       │   │   │   │   ├── MenuStandards.js
│   │   │   │       │   │   │   │   ├── SmartNav.js
│   │   │   │       │   │   │   │   ├── TreeView.js
│   │   │   │       │   │   │   │   ├── WebForms.js
│   │   │   │       │   │   │   │   ├── WebParts.js
│   │   │   │       │   │   │   │   └── WebUIValidation.js
│   │   │   │       │   │   │   ├── _references.js
│   │   │   │       │   │   │   ├── bootstrap.js
│   │   │   │       │   │   │   ├── jquery-1.10.2.intellisense.js
│   │   │   │       │   │   │   ├── jquery-1.10.2.js
│   │   │   │       │   │   │   ├── modernizr-2.6.2.js
│   │   │   │       │   │   │   └── respond.js
│   │   │   │       │   │   ├── SignUp.aspx
│   │   │   │       │   │   ├── SignUp.aspx.cs
│   │   │   │       │   │   ├── SignUp.aspx.designer.cs
│   │   │   │       │   │   ├── Site.Master
│   │   │   │       │   │   ├── Site.Master.cs
│   │   │   │       │   │   ├── Site.Master.designer.cs
│   │   │   │       │   │   ├── Site.Mobile.Master
│   │   │   │       │   │   ├── Site.Mobile.Master.cs
│   │   │   │       │   │   ├── Site.Mobile.Master.designer.cs
│   │   │   │       │   │   ├── ThankYou.aspx
│   │   │   │       │   │   ├── ThankYou.aspx.cs
│   │   │   │       │   │   ├── ThankYou.aspx.designer.cs
│   │   │   │       │   │   ├── ViewSwitcher.ascx
│   │   │   │       │   │   ├── ViewSwitcher.ascx.cs
│   │   │   │       │   │   ├── ViewSwitcher.ascx.designer.cs
│   │   │   │       │   │   ├── Web.Debug.config
│   │   │   │       │   │   ├── Web.Release.config
│   │   │   │       │   │   ├── Web.config
│   │   │   │       │   │   └── packages.config
│   │   │   │       │   ├── ProductLaunch.sln
│   │   │   │       │   └── build.ps1
│   │   │   │       ├── build.ps1
│   │   │   │       ├── docker/
│   │   │   │       │   ├── builder/
│   │   │   │       │   │   └── Dockerfile
│   │   │   │       │   ├── save-prospect/
│   │   │   │       │   │   └── Dockerfile
│   │   │   │       │   └── web/
│   │   │   │       │       ├── Dockerfile
│   │   │   │       │       └── bootstrap.ps1
│   │   │   │       └── docker-compose.yml
│   │   │   ├── windows-modernize-aspnet-ops/
│   │   │   │   ├── README.md
│   │   │   │   ├── v1.0/
│   │   │   │   │   └── Dockerfile
│   │   │   │   └── v1.1/
│   │   │   │       └── Dockerfile
│   │   │   └── workshop-slides/
│   │   │       └── README.md
│   │   ├── slides/
│   │   │   ├── docker-introduction.key
│   │   │   └── docker-java-dockercon-2017.key
│   │   └── windows/
│   │       ├── .gitattributes
│   │       ├── .gitignore
│   │       ├── aspnet-web/
│   │       │   ├── README.md
│   │       │   ├── docker-compose.yml
│   │       │   └── webserver/
│   │       │       ├── Dockerfile
│   │       │       └── app/
│   │       │           ├── Program.cs
│   │       │           ├── Startup.cs
│   │       │           ├── project.json
│   │       │           └── run.bat
│   │       ├── modernize-traditional-apps/
│   │       │   ├── README.md
│   │       │   ├── modernize-aspnet/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── README.md
│   │       │   │   ├── part-1.md
│   │       │   │   ├── part-2.md
│   │       │   │   ├── part-3.md
│   │       │   │   ├── part-4.md
│   │       │   │   ├── part-5.md
│   │       │   │   ├── v1-src/
│   │       │   │   │   ├── ProductLaunch/
│   │       │   │   │   │   ├── ProductLaunch.Core/
│   │       │   │   │   │   │   ├── Env.cs
│   │       │   │   │   │   │   ├── ProductLaunch.Core.csproj
│   │       │   │   │   │   │   └── Properties/
│   │       │   │   │   │   │       └── AssemblyInfo.cs
│   │       │   │   │   │   ├── ProductLaunch.EndToEndTests/
│   │       │   │   │   │   │   ├── App.config
│   │       │   │   │   │   │   ├── ProductLaunch.EndToEndTests.csproj
│   │       │   │   │   │   │   ├── Properties/
│   │       │   │   │   │   │   │   └── AssemblyInfo.cs
│   │       │   │   │   │   │   ├── ProspectSignUp.feature
│   │       │   │   │   │   │   ├── ProspectSignUp.feature.cs
│   │       │   │   │   │   │   ├── ProspectSignUpSteps.cs
│   │       │   │   │   │   │   └── packages.config
│   │       │   │   │   │   ├── ProductLaunch.Entities/
│   │       │   │   │   │   │   ├── Country.cs
│   │       │   │   │   │   │   ├── ProductLaunch.Entities.csproj
│   │       │   │   │   │   │   ├── Properties/
│   │       │   │   │   │   │   │   └── AssemblyInfo.cs
│   │       │   │   │   │   │   ├── Prospect.cs
│   │       │   │   │   │   │   └── Role.cs
│   │       │   │   │   │   ├── ProductLaunch.MessageHandlers.IndexProspect/
│   │       │   │   │   │   │   ├── App.config
│   │       │   │   │   │   │   ├── Config.cs
│   │       │   │   │   │   │   ├── Documents/
│   │       │   │   │   │   │   │   └── Prospect.cs
│   │       │   │   │   │   │   ├── Indexer/
│   │       │   │   │   │   │   │   └── Index.cs
│   │       │   │   │   │   │   ├── ProductLaunch.MessageHandlers.IndexProspect.csproj
│   │       │   │   │   │   │   ├── Program.cs
│   │       │   │   │   │   │   ├── Properties/
│   │       │   │   │   │   │   │   └── AssemblyInfo.cs
│   │       │   │   │   │   │   └── packages.config
│   │       │   │   │   │   ├── ProductLaunch.MessageHandlers.SaveProspect/
│   │       │   │   │   │   │   ├── App.config
│   │       │   │   │   │   │   ├── ProductLaunch.MessageHandlers.SaveProspect.csproj
│   │       │   │   │   │   │   ├── Program.cs
│   │       │   │   │   │   │   ├── Properties/
│   │       │   │   │   │   │   │   └── AssemblyInfo.cs
│   │       │   │   │   │   │   └── packages.config
│   │       │   │   │   │   ├── ProductLaunch.Messaging/
│   │       │   │   │   │   │   ├── Config.cs
│   │       │   │   │   │   │   ├── MessageHelper.cs
│   │       │   │   │   │   │   ├── MessageQueue.cs
│   │       │   │   │   │   │   ├── Messages/
│   │       │   │   │   │   │   │   ├── Events/
│   │       │   │   │   │   │   │   │   └── ProspectSignedUpEvent.cs
│   │       │   │   │   │   │   │   └── Message.cs
│   │       │   │   │   │   │   ├── ProductLaunch.Messaging.csproj
│   │       │   │   │   │   │   ├── Properties/
│   │       │   │   │   │   │   │   └── AssemblyInfo.cs
│   │       │   │   │   │   │   └── packages.config
│   │       │   │   │   │   ├── ProductLaunch.Model/
│   │       │   │   │   │   │   ├── App.config
│   │       │   │   │   │   │   ├── Initializers/
│   │       │   │   │   │   │   │   └── StaticDataInitializer.cs
│   │       │   │   │   │   │   ├── ProductLaunch.Model.csproj
│   │       │   │   │   │   │   ├── ProductLaunchContext.cs
│   │       │   │   │   │   │   ├── Properties/
│   │       │   │   │   │   │   │   └── AssemblyInfo.cs
│   │       │   │   │   │   │   └── packages.config
│   │       │   │   │   │   ├── ProductLaunch.Model.Tests/
│   │       │   │   │   │   │   ├── App.config
│   │       │   │   │   │   │   ├── ProductLaunch.Model.Tests.csproj
│   │       │   │   │   │   │   ├── ProductLaunchContextTest.cs
│   │       │   │   │   │   │   ├── Properties/
│   │       │   │   │   │   │   │   └── AssemblyInfo.cs
│   │       │   │   │   │   │   └── packages.config
│   │       │   │   │   │   ├── ProductLaunch.Web/
│   │       │   │   │   │   │   ├── About.aspx
│   │       │   │   │   │   │   ├── About.aspx.cs
│   │       │   │   │   │   │   ├── About.aspx.designer.cs
│   │       │   │   │   │   │   ├── App_Start/
│   │       │   │   │   │   │   │   ├── BundleConfig.cs
│   │       │   │   │   │   │   │   └── RouteConfig.cs
│   │       │   │   │   │   │   ├── ApplicationInsights.config
│   │       │   │   │   │   │   ├── Bundle.config
│   │       │   │   │   │   │   ├── Config.cs
│   │       │   │   │   │   │   ├── Contact.aspx
│   │       │   │   │   │   │   ├── Contact.aspx.cs
│   │       │   │   │   │   │   ├── Contact.aspx.designer.cs
│   │       │   │   │   │   │   ├── Content/
│   │       │   │   │   │   │   │   ├── Site.css
│   │       │   │   │   │   │   │   └── bootstrap.css
│   │       │   │   │   │   │   ├── Default.aspx
│   │       │   │   │   │   │   ├── Default.aspx.cs
│   │       │   │   │   │   │   ├── Default.aspx.designer.cs
│   │       │   │   │   │   │   ├── Global.asax
│   │       │   │   │   │   │   ├── Global.asax.cs
│   │       │   │   │   │   │   ├── ProductLaunch.Web.csproj
│   │       │   │   │   │   │   ├── Project_Readme.html
│   │       │   │   │   │   │   ├── Properties/
│   │       │   │   │   │   │   │   └── AssemblyInfo.cs
│   │       │   │   │   │   │   ├── Scripts/
│   │       │   │   │   │   │   │   ├── WebForms/
│   │       │   │   │   │   │   │   │   ├── DetailsView.js
│   │       │   │   │   │   │   │   │   ├── Focus.js
│   │       │   │   │   │   │   │   │   ├── GridView.js
│   │       │   │   │   │   │   │   │   ├── MSAjax/
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjax.js
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjaxApplicationServices.js
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjaxComponentModel.js
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjaxCore.js
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjaxGlobalization.js
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjaxHistory.js
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjaxNetwork.js
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjaxSerialization.js
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjaxTimer.js
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjaxWebForms.js
│   │       │   │   │   │   │   │   │   │   └── MicrosoftAjaxWebServices.js
│   │       │   │   │   │   │   │   │   ├── Menu.js
│   │       │   │   │   │   │   │   │   ├── MenuStandards.js
│   │       │   │   │   │   │   │   │   ├── SmartNav.js
│   │       │   │   │   │   │   │   │   ├── TreeView.js
│   │       │   │   │   │   │   │   │   ├── WebForms.js
│   │       │   │   │   │   │   │   │   ├── WebParts.js
│   │       │   │   │   │   │   │   │   └── WebUIValidation.js
│   │       │   │   │   │   │   │   ├── _references.js
│   │       │   │   │   │   │   │   ├── bootstrap.js
│   │       │   │   │   │   │   │   ├── jquery-1.10.2.intellisense.js
│   │       │   │   │   │   │   │   ├── jquery-1.10.2.js
│   │       │   │   │   │   │   │   ├── modernizr-2.6.2.js
│   │       │   │   │   │   │   │   └── respond.js
│   │       │   │   │   │   │   ├── SignUp.aspx
│   │       │   │   │   │   │   ├── SignUp.aspx.cs
│   │       │   │   │   │   │   ├── SignUp.aspx.designer.cs
│   │       │   │   │   │   │   ├── Site.Master
│   │       │   │   │   │   │   ├── Site.Master.cs
│   │       │   │   │   │   │   ├── Site.Master.designer.cs
│   │       │   │   │   │   │   ├── Site.Mobile.Master
│   │       │   │   │   │   │   ├── Site.Mobile.Master.cs
│   │       │   │   │   │   │   ├── Site.Mobile.Master.designer.cs
│   │       │   │   │   │   │   ├── ThankYou.aspx
│   │       │   │   │   │   │   ├── ThankYou.aspx.cs
│   │       │   │   │   │   │   ├── ThankYou.aspx.designer.cs
│   │       │   │   │   │   │   ├── ViewSwitcher.ascx
│   │       │   │   │   │   │   ├── ViewSwitcher.ascx.cs
│   │       │   │   │   │   │   ├── ViewSwitcher.ascx.designer.cs
│   │       │   │   │   │   │   ├── Web.Debug.config
│   │       │   │   │   │   │   ├── Web.Release.config
│   │       │   │   │   │   │   ├── Web.config
│   │       │   │   │   │   │   └── packages.config
│   │       │   │   │   │   ├── ProductLaunch.sln
│   │       │   │   │   │   └── build.ps1
│   │       │   │   │   ├── build.ps1
│   │       │   │   │   └── docker/
│   │       │   │   │       ├── builder/
│   │       │   │   │       │   └── Dockerfile
│   │       │   │   │       └── web/
│   │       │   │   │           ├── Dockerfile
│   │       │   │   │           └── Web.config
│   │       │   │   ├── v2-src/
│   │       │   │   │   ├── ProductLaunch/
│   │       │   │   │   │   ├── ProductLaunch.Core/
│   │       │   │   │   │   │   ├── Env.cs
│   │       │   │   │   │   │   ├── ProductLaunch.Core.csproj
│   │       │   │   │   │   │   └── Properties/
│   │       │   │   │   │   │       └── AssemblyInfo.cs
│   │       │   │   │   │   ├── ProductLaunch.EndToEndTests/
│   │       │   │   │   │   │   ├── App.config
│   │       │   │   │   │   │   ├── ProductLaunch.EndToEndTests.csproj
│   │       │   │   │   │   │   ├── Properties/
│   │       │   │   │   │   │   │   └── AssemblyInfo.cs
│   │       │   │   │   │   │   ├── ProspectSignUp.feature
│   │       │   │   │   │   │   ├── ProspectSignUp.feature.cs
│   │       │   │   │   │   │   ├── ProspectSignUpSteps.cs
│   │       │   │   │   │   │   └── packages.config
│   │       │   │   │   │   ├── ProductLaunch.Entities/
│   │       │   │   │   │   │   ├── Country.cs
│   │       │   │   │   │   │   ├── ProductLaunch.Entities.csproj
│   │       │   │   │   │   │   ├── Properties/
│   │       │   │   │   │   │   │   └── AssemblyInfo.cs
│   │       │   │   │   │   │   ├── Prospect.cs
│   │       │   │   │   │   │   └── Role.cs
│   │       │   │   │   │   ├── ProductLaunch.MessageHandlers.IndexProspect/
│   │       │   │   │   │   │   ├── App.config
│   │       │   │   │   │   │   ├── Config.cs
│   │       │   │   │   │   │   ├── Documents/
│   │       │   │   │   │   │   │   └── Prospect.cs
│   │       │   │   │   │   │   ├── Indexer/
│   │       │   │   │   │   │   │   └── Index.cs
│   │       │   │   │   │   │   ├── ProductLaunch.MessageHandlers.IndexProspect.csproj
│   │       │   │   │   │   │   ├── Program.cs
│   │       │   │   │   │   │   ├── Properties/
│   │       │   │   │   │   │   │   └── AssemblyInfo.cs
│   │       │   │   │   │   │   └── packages.config
│   │       │   │   │   │   ├── ProductLaunch.MessageHandlers.SaveProspect/
│   │       │   │   │   │   │   ├── App.config
│   │       │   │   │   │   │   ├── ProductLaunch.MessageHandlers.SaveProspect.csproj
│   │       │   │   │   │   │   ├── Program.cs
│   │       │   │   │   │   │   ├── Properties/
│   │       │   │   │   │   │   │   └── AssemblyInfo.cs
│   │       │   │   │   │   │   └── packages.config
│   │       │   │   │   │   ├── ProductLaunch.Messaging/
│   │       │   │   │   │   │   ├── Config.cs
│   │       │   │   │   │   │   ├── MessageHelper.cs
│   │       │   │   │   │   │   ├── MessageQueue.cs
│   │       │   │   │   │   │   ├── Messages/
│   │       │   │   │   │   │   │   ├── Events/
│   │       │   │   │   │   │   │   │   └── ProspectSignedUpEvent.cs
│   │       │   │   │   │   │   │   └── Message.cs
│   │       │   │   │   │   │   ├── ProductLaunch.Messaging.csproj
│   │       │   │   │   │   │   ├── Properties/
│   │       │   │   │   │   │   │   └── AssemblyInfo.cs
│   │       │   │   │   │   │   └── packages.config
│   │       │   │   │   │   ├── ProductLaunch.Model/
│   │       │   │   │   │   │   ├── App.config
│   │       │   │   │   │   │   ├── Config.cs
│   │       │   │   │   │   │   ├── Initializers/
│   │       │   │   │   │   │   │   └── StaticDataInitializer.cs
│   │       │   │   │   │   │   ├── ProductLaunch.Model.csproj
│   │       │   │   │   │   │   ├── ProductLaunchContext.cs
│   │       │   │   │   │   │   ├── Properties/
│   │       │   │   │   │   │   │   └── AssemblyInfo.cs
│   │       │   │   │   │   │   └── packages.config
│   │       │   │   │   │   ├── ProductLaunch.Model.Tests/
│   │       │   │   │   │   │   ├── App.config
│   │       │   │   │   │   │   ├── ProductLaunch.Model.Tests.csproj
│   │       │   │   │   │   │   ├── ProductLaunchContextTest.cs
│   │       │   │   │   │   │   ├── Properties/
│   │       │   │   │   │   │   │   └── AssemblyInfo.cs
│   │       │   │   │   │   │   └── packages.config
│   │       │   │   │   │   ├── ProductLaunch.Web/
│   │       │   │   │   │   │   ├── About.aspx
│   │       │   │   │   │   │   ├── About.aspx.cs
│   │       │   │   │   │   │   ├── About.aspx.designer.cs
│   │       │   │   │   │   │   ├── App_Start/
│   │       │   │   │   │   │   │   ├── BundleConfig.cs
│   │       │   │   │   │   │   │   └── RouteConfig.cs
│   │       │   │   │   │   │   ├── ApplicationInsights.config
│   │       │   │   │   │   │   ├── Bundle.config
│   │       │   │   │   │   │   ├── Contact.aspx
│   │       │   │   │   │   │   ├── Contact.aspx.cs
│   │       │   │   │   │   │   ├── Contact.aspx.designer.cs
│   │       │   │   │   │   │   ├── Content/
│   │       │   │   │   │   │   │   ├── Site.css
│   │       │   │   │   │   │   │   └── bootstrap.css
│   │       │   │   │   │   │   ├── Default.aspx
│   │       │   │   │   │   │   ├── Default.aspx.cs
│   │       │   │   │   │   │   ├── Default.aspx.designer.cs
│   │       │   │   │   │   │   ├── Global.asax
│   │       │   │   │   │   │   ├── Global.asax.cs
│   │       │   │   │   │   │   ├── ProductLaunch.Web.csproj
│   │       │   │   │   │   │   ├── Project_Readme.html
│   │       │   │   │   │   │   ├── Properties/
│   │       │   │   │   │   │   │   └── AssemblyInfo.cs
│   │       │   │   │   │   │   ├── Scripts/
│   │       │   │   │   │   │   │   ├── WebForms/
│   │       │   │   │   │   │   │   │   ├── DetailsView.js
│   │       │   │   │   │   │   │   │   ├── Focus.js
│   │       │   │   │   │   │   │   │   ├── GridView.js
│   │       │   │   │   │   │   │   │   ├── MSAjax/
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjax.js
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjaxApplicationServices.js
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjaxComponentModel.js
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjaxCore.js
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjaxGlobalization.js
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjaxHistory.js
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjaxNetwork.js
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjaxSerialization.js
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjaxTimer.js
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjaxWebForms.js
│   │       │   │   │   │   │   │   │   │   └── MicrosoftAjaxWebServices.js
│   │       │   │   │   │   │   │   │   ├── Menu.js
│   │       │   │   │   │   │   │   │   ├── MenuStandards.js
│   │       │   │   │   │   │   │   │   ├── SmartNav.js
│   │       │   │   │   │   │   │   │   ├── TreeView.js
│   │       │   │   │   │   │   │   │   ├── WebForms.js
│   │       │   │   │   │   │   │   │   ├── WebParts.js
│   │       │   │   │   │   │   │   │   └── WebUIValidation.js
│   │       │   │   │   │   │   │   ├── _references.js
│   │       │   │   │   │   │   │   ├── bootstrap.js
│   │       │   │   │   │   │   │   ├── jquery-1.10.2.intellisense.js
│   │       │   │   │   │   │   │   ├── jquery-1.10.2.js
│   │       │   │   │   │   │   │   ├── modernizr-2.6.2.js
│   │       │   │   │   │   │   │   └── respond.js
│   │       │   │   │   │   │   ├── SignUp.aspx
│   │       │   │   │   │   │   ├── SignUp.aspx.cs
│   │       │   │   │   │   │   ├── SignUp.aspx.designer.cs
│   │       │   │   │   │   │   ├── Site.Master
│   │       │   │   │   │   │   ├── Site.Master.cs
│   │       │   │   │   │   │   ├── Site.Master.designer.cs
│   │       │   │   │   │   │   ├── Site.Mobile.Master
│   │       │   │   │   │   │   ├── Site.Mobile.Master.cs
│   │       │   │   │   │   │   ├── Site.Mobile.Master.designer.cs
│   │       │   │   │   │   │   ├── ThankYou.aspx
│   │       │   │   │   │   │   ├── ThankYou.aspx.cs
│   │       │   │   │   │   │   ├── ThankYou.aspx.designer.cs
│   │       │   │   │   │   │   ├── ViewSwitcher.ascx
│   │       │   │   │   │   │   ├── ViewSwitcher.ascx.cs
│   │       │   │   │   │   │   ├── ViewSwitcher.ascx.designer.cs
│   │       │   │   │   │   │   ├── Web.Debug.config
│   │       │   │   │   │   │   ├── Web.Release.config
│   │       │   │   │   │   │   ├── Web.config
│   │       │   │   │   │   │   └── packages.config
│   │       │   │   │   │   ├── ProductLaunch.sln
│   │       │   │   │   │   └── build.ps1
│   │       │   │   │   ├── build.ps1
│   │       │   │   │   ├── docker/
│   │       │   │   │   │   ├── builder/
│   │       │   │   │   │   │   └── Dockerfile
│   │       │   │   │   │   ├── save-prospect/
│   │       │   │   │   │   │   └── Dockerfile
│   │       │   │   │   │   └── web/
│   │       │   │   │   │       ├── Dockerfile
│   │       │   │   │   │       └── bootstrap.ps1
│   │       │   │   │   └── docker-compose.yml
│   │       │   │   └── v3-src/
│   │       │   │       ├── ProductLaunch/
│   │       │   │       │   ├── ProductLaunch.Core/
│   │       │   │       │   │   ├── Env.cs
│   │       │   │       │   │   ├── ProductLaunch.Core.csproj
│   │       │   │       │   │   └── Properties/
│   │       │   │       │   │       └── AssemblyInfo.cs
│   │       │   │       │   ├── ProductLaunch.EndToEndTests/
│   │       │   │       │   │   ├── App.config
│   │       │   │       │   │   ├── ProductLaunch.EndToEndTests.csproj
│   │       │   │       │   │   ├── Properties/
│   │       │   │       │   │   │   └── AssemblyInfo.cs
│   │       │   │       │   │   ├── ProspectSignUp.feature
│   │       │   │       │   │   ├── ProspectSignUp.feature.cs
│   │       │   │       │   │   ├── ProspectSignUpSteps.cs
│   │       │   │       │   │   └── packages.config
│   │       │   │       │   ├── ProductLaunch.Entities/
│   │       │   │       │   │   ├── Country.cs
│   │       │   │       │   │   ├── ProductLaunch.Entities.csproj
│   │       │   │       │   │   ├── Properties/
│   │       │   │       │   │   │   └── AssemblyInfo.cs
│   │       │   │       │   │   ├── Prospect.cs
│   │       │   │       │   │   └── Role.cs
│   │       │   │       │   ├── ProductLaunch.MessageHandlers.IndexProspect/
│   │       │   │       │   │   ├── App.config
│   │       │   │       │   │   ├── Config.cs
│   │       │   │       │   │   ├── Documents/
│   │       │   │       │   │   │   └── Prospect.cs
│   │       │   │       │   │   ├── Indexer/
│   │       │   │       │   │   │   └── Index.cs
│   │       │   │       │   │   ├── ProductLaunch.MessageHandlers.IndexProspect.csproj
│   │       │   │       │   │   ├── Program.cs
│   │       │   │       │   │   ├── Properties/
│   │       │   │       │   │   │   └── AssemblyInfo.cs
│   │       │   │       │   │   └── packages.config
│   │       │   │       │   ├── ProductLaunch.MessageHandlers.SaveProspect/
│   │       │   │       │   │   ├── App.config
│   │       │   │       │   │   ├── ProductLaunch.MessageHandlers.SaveProspect.csproj
│   │       │   │       │   │   ├── Program.cs
│   │       │   │       │   │   ├── Properties/
│   │       │   │       │   │   │   └── AssemblyInfo.cs
│   │       │   │       │   │   └── packages.config
│   │       │   │       │   ├── ProductLaunch.Messaging/
│   │       │   │       │   │   ├── Config.cs
│   │       │   │       │   │   ├── MessageHelper.cs
│   │       │   │       │   │   ├── MessageQueue.cs
│   │       │   │       │   │   ├── Messages/
│   │       │   │       │   │   │   ├── Events/
│   │       │   │       │   │   │   │   └── ProspectSignedUpEvent.cs
│   │       │   │       │   │   │   └── Message.cs
│   │       │   │       │   │   ├── ProductLaunch.Messaging.csproj
│   │       │   │       │   │   ├── Properties/
│   │       │   │       │   │   │   └── AssemblyInfo.cs
│   │       │   │       │   │   └── packages.config
│   │       │   │       │   ├── ProductLaunch.Model/
│   │       │   │       │   │   ├── App.config
│   │       │   │       │   │   ├── Config.cs
│   │       │   │       │   │   ├── Initializers/
│   │       │   │       │   │   │   └── StaticDataInitializer.cs
│   │       │   │       │   │   ├── ProductLaunch.Model.csproj
│   │       │   │       │   │   ├── ProductLaunchContext.cs
│   │       │   │       │   │   ├── Properties/
│   │       │   │       │   │   │   └── AssemblyInfo.cs
│   │       │   │       │   │   └── packages.config
│   │       │   │       │   ├── ProductLaunch.Model.Tests/
│   │       │   │       │   │   ├── App.config
│   │       │   │       │   │   ├── ProductLaunch.Model.Tests.csproj
│   │       │   │       │   │   ├── ProductLaunchContextTest.cs
│   │       │   │       │   │   ├── Properties/
│   │       │   │       │   │   │   └── AssemblyInfo.cs
│   │       │   │       │   │   └── packages.config
│   │       │   │       │   ├── ProductLaunch.Web/
│   │       │   │       │   │   ├── About.aspx
│   │       │   │       │   │   ├── About.aspx.cs
│   │       │   │       │   │   ├── About.aspx.designer.cs
│   │       │   │       │   │   ├── App_Start/
│   │       │   │       │   │   │   ├── BundleConfig.cs
│   │       │   │       │   │   │   └── RouteConfig.cs
│   │       │   │       │   │   ├── ApplicationInsights.config
│   │       │   │       │   │   ├── Bundle.config
│   │       │   │       │   │   ├── Config.cs
│   │       │   │       │   │   ├── Contact.aspx
│   │       │   │       │   │   ├── Contact.aspx.cs
│   │       │   │       │   │   ├── Contact.aspx.designer.cs
│   │       │   │       │   │   ├── Content/
│   │       │   │       │   │   │   ├── Site.css
│   │       │   │       │   │   │   └── bootstrap.css
│   │       │   │       │   │   ├── Default.aspx
│   │       │   │       │   │   ├── Default.aspx.cs
│   │       │   │       │   │   ├── Default.aspx.designer.cs
│   │       │   │       │   │   ├── Global.asax
│   │       │   │       │   │   ├── Global.asax.cs
│   │       │   │       │   │   ├── ProductLaunch.Web.csproj
│   │       │   │       │   │   ├── Project_Readme.html
│   │       │   │       │   │   ├── Properties/
│   │       │   │       │   │   │   └── AssemblyInfo.cs
│   │       │   │       │   │   ├── Scripts/
│   │       │   │       │   │   │   ├── WebForms/
│   │       │   │       │   │   │   │   ├── DetailsView.js
│   │       │   │       │   │   │   │   ├── Focus.js
│   │       │   │       │   │   │   │   ├── GridView.js
│   │       │   │       │   │   │   │   ├── MSAjax/
│   │       │   │       │   │   │   │   │   ├── MicrosoftAjax.js
│   │       │   │       │   │   │   │   │   ├── MicrosoftAjaxApplicationServices.js
│   │       │   │       │   │   │   │   │   ├── MicrosoftAjaxComponentModel.js
│   │       │   │       │   │   │   │   │   ├── MicrosoftAjaxCore.js
│   │       │   │       │   │   │   │   │   ├── MicrosoftAjaxGlobalization.js
│   │       │   │       │   │   │   │   │   ├── MicrosoftAjaxHistory.js
│   │       │   │       │   │   │   │   │   ├── MicrosoftAjaxNetwork.js
│   │       │   │       │   │   │   │   │   ├── MicrosoftAjaxSerialization.js
│   │       │   │       │   │   │   │   │   ├── MicrosoftAjaxTimer.js
│   │       │   │       │   │   │   │   │   ├── MicrosoftAjaxWebForms.js
│   │       │   │       │   │   │   │   │   └── MicrosoftAjaxWebServices.js
│   │       │   │       │   │   │   │   ├── Menu.js
│   │       │   │       │   │   │   │   ├── MenuStandards.js
│   │       │   │       │   │   │   │   ├── SmartNav.js
│   │       │   │       │   │   │   │   ├── TreeView.js
│   │       │   │       │   │   │   │   ├── WebForms.js
│   │       │   │       │   │   │   │   ├── WebParts.js
│   │       │   │       │   │   │   │   └── WebUIValidation.js
│   │       │   │       │   │   │   ├── _references.js
│   │       │   │       │   │   │   ├── bootstrap.js
│   │       │   │       │   │   │   ├── jquery-1.10.2.intellisense.js
│   │       │   │       │   │   │   ├── jquery-1.10.2.js
│   │       │   │       │   │   │   ├── modernizr-2.6.2.js
│   │       │   │       │   │   │   └── respond.js
│   │       │   │       │   │   ├── SignUp.aspx
│   │       │   │       │   │   ├── SignUp.aspx.cs
│   │       │   │       │   │   ├── SignUp.aspx.designer.cs
│   │       │   │       │   │   ├── Site.Master
│   │       │   │       │   │   ├── Site.Master.cs
│   │       │   │       │   │   ├── Site.Master.designer.cs
│   │       │   │       │   │   ├── Site.Mobile.Master
│   │       │   │       │   │   ├── Site.Mobile.Master.cs
│   │       │   │       │   │   ├── Site.Mobile.Master.designer.cs
│   │       │   │       │   │   ├── ThankYou.aspx
│   │       │   │       │   │   ├── ThankYou.aspx.cs
│   │       │   │       │   │   ├── ThankYou.aspx.designer.cs
│   │       │   │       │   │   ├── ViewSwitcher.ascx
│   │       │   │       │   │   ├── ViewSwitcher.ascx.cs
│   │       │   │       │   │   ├── ViewSwitcher.ascx.designer.cs
│   │       │   │       │   │   ├── Web.Debug.config
│   │       │   │       │   │   ├── Web.Release.config
│   │       │   │       │   │   ├── Web.config
│   │       │   │       │   │   └── packages.config
│   │       │   │       │   ├── ProductLaunch.sln
│   │       │   │       │   └── build.ps1
│   │       │   │       ├── build.ps1
│   │       │   │       ├── docker/
│   │       │   │       │   ├── builder/
│   │       │   │       │   │   └── Dockerfile
│   │       │   │       │   ├── docker-compose.yml
│   │       │   │       │   ├── homepage/
│   │       │   │       │   │   ├── Dockerfile
│   │       │   │       │   │   └── index.html
│   │       │   │       │   ├── save-prospect/
│   │       │   │       │   │   └── Dockerfile
│   │       │   │       │   └── web/
│   │       │   │       │       ├── Dockerfile
│   │       │   │       │       └── bootstrap.ps1
│   │       │   │       └── docker-compose.yml
│   │       │   └── modernize-aspnet-ops/
│   │       │       ├── .gitignore
│   │       │       ├── README.md
│   │       │       ├── part-1.md
│   │       │       ├── part-2.md
│   │       │       ├── part-3.md
│   │       │       ├── part-4.md
│   │       │       ├── v1.0/
│   │       │       │   ├── Dockerfile
│   │       │       │   └── build.ps1
│   │       │       ├── v1.1/
│   │       │       │   ├── Dockerfile
│   │       │       │   └── build.ps1
│   │       │       └── v1.2/
│   │       │           ├── build.ps1
│   │       │           ├── docker/
│   │       │           │   ├── builder/
│   │       │           │   │   └── Dockerfile
│   │       │           │   └── web/
│   │       │           │       ├── Dockerfile
│   │       │           │       ├── EnableIisRemoteManagement.ps1
│   │       │           │       └── UpgradeSample.Web/
│   │       │           │           ├── Default.aspx
│   │       │           │           ├── Global.asax
│   │       │           │           └── Web.config
│   │       │           └── src/
│   │       │               ├── UpgradeSample.Setup/
│   │       │               │   ├── Product.wxs
│   │       │               │   └── UpgradeSample.Setup.wixproj
│   │       │               ├── UpgradeSample.Web/
│   │       │               │   ├── Default.aspx
│   │       │               │   ├── Global.asax
│   │       │               │   ├── Global.asax.cs
│   │       │               │   ├── Properties/
│   │       │               │   │   └── AssemblyInfo.cs
│   │       │               │   ├── UpgradeSample.Web.csproj
│   │       │               │   ├── Web.Debug.config
│   │       │               │   ├── Web.Release.config
│   │       │               │   └── Web.config
│   │       │               ├── UpgradeSample.sln
│   │       │               ├── build.ps1
│   │       │               └── package-msi.ps1
│   │       ├── readme.md
│   │       ├── registry/
│   │       │   ├── Dockerfile
│   │       │   ├── Dockerfile.builder
│   │       │   ├── README.md
│   │       │   ├── part-1.md
│   │       │   ├── part-2.md
│   │       │   ├── part-3.md
│   │       │   └── part-4.md
│   │       ├── sql-server/
│   │       │   ├── .dockerignore
│   │       │   ├── .gitignore
│   │       │   ├── Dockerfile.builder
│   │       │   ├── Dockerfile.v1
│   │       │   ├── Dockerfile.v2
│   │       │   ├── Initialize-Database.ps1
│   │       │   ├── README.md
│   │       │   ├── assets.sql
│   │       │   ├── build.ps1
│   │       │   ├── part-1.md
│   │       │   ├── part-2.md
│   │       │   ├── part-3.md
│   │       │   ├── part-4.md
│   │       │   └── src/
│   │       │       ├── Assets.Database-v1/
│   │       │       │   ├── Assets.Database.refactorlog
│   │       │       │   ├── Assets.Database.sln
│   │       │       │   ├── Assets.Database.sqlproj
│   │       │       │   ├── Schema Objects/
│   │       │       │   │   ├── AssetTypes.sql
│   │       │       │   │   ├── Assets.sql
│   │       │       │   │   └── Locations.sql
│   │       │       │   └── Scripts/
│   │       │       │       ├── PostDeployment/
│   │       │       │       │   ├── InsertAssetTypes.sql
│   │       │       │       │   └── InsertLocations.sql
│   │       │       │       └── Script.PostDeployment.sql
│   │       │       └── Assets.Database-v2/
│   │       │           ├── Assets.Database.refactorlog
│   │       │           ├── Assets.Database.sln
│   │       │           ├── Assets.Database.sqlproj
│   │       │           ├── Schema Objects/
│   │       │           │   ├── AssetTypes.sql
│   │       │           │   ├── Assets.sql
│   │       │           │   ├── Locations.sql
│   │       │           │   └── Users.sql
│   │       │           └── Scripts/
│   │       │               ├── PostDeployment/
│   │       │               │   ├── InsertAssetTypes.sql
│   │       │               │   └── InsertLocations.sql
│   │       │               └── Script.PostDeployment.sql
│   │       └── windows-containers/
│   │           ├── MultiContainerApp.md
│   │           ├── README.md
│   │           ├── Setup-AWS.md
│   │           ├── Setup-Azure.md
│   │           ├── Setup-Server2016.md
│   │           ├── Setup-Win10.md
│   │           ├── Setup.md
│   │           └── WindowsContainers.md
│   ├── kickstart/
│   │   ├── chapters/
│   │   │   ├── alpine.md
│   │   │   ├── bridge-network.md
│   │   │   ├── devops.md
│   │   │   ├── docker-devpops.md
│   │   │   ├── images-and-volumes.md
│   │   │   ├── mongo-2.md
│   │   │   ├── mongo.md
│   │   │   ├── networking-basics.md
│   │   │   ├── nextsteps.md
│   │   │   ├── nodered.md
│   │   │   ├── prometheus.md
│   │   │   ├── secrets.md
│   │   │   ├── setup.md
│   │   │   ├── votingapp-compose.md
│   │   │   ├── votingapp-swarm.md
│   │   │   ├── webapps-part1.md
│   │   │   └── webapps-part2.md
│   │   ├── flask-app/
│   │   │   ├── Dockerfile
│   │   │   ├── app.py
│   │   │   ├── requirements.txt
│   │   │   └── templates/
│   │   │       └── index.html
│   │   ├── readme.md
│   │   └── static-site/
│   │       ├── Dockerfile
│   │       └── Hello_docker.html
│   ├── networking/
│   │   ├── A1-network-basics.md
│   │   ├── A2-bridge-networking.md
│   │   ├── A3-overlay-networking.md
│   │   ├── A4-HTTP Routing Mesh.md
│   │   ├── README.md
│   │   ├── concepts/
│   │   │   ├── 01-cnm.md
│   │   │   ├── 02-drivers.md
│   │   │   ├── 03-linux-networking.md
│   │   │   ├── 04-docker-network-cp.md
│   │   │   ├── 05-bridge-networks.md
│   │   │   ├── 06-overlay-networks.md
│   │   │   ├── 07-macvlan.md
│   │   │   ├── 08-host-networking.md
│   │   │   ├── 09-physical-networking.md
│   │   │   ├── 10-load-balancing.md
│   │   │   ├── 11-security.md
│   │   │   ├── 12-ipaddress-management.md
│   │   │   ├── 13-troubleshooting.md
│   │   │   ├── 14-network-models.md
│   │   │   └── README.md
│   │   ├── scratch.md
│   │   └── tutorials.md
│   ├── registry/
│   │   ├── README.md
│   │   ├── part-1.md
│   │   ├── part-2.md
│   │   └── part-3.md
│   ├── security/
│   │   ├── README.md
│   │   ├── apparmor/
│   │   │   ├── README.md
│   │   │   └── wordpress/
│   │   │       ├── Dockerfile
│   │   │       ├── docker-compose.yml
│   │   │       ├── html/
│   │   │       │   ├── index.php
│   │   │       │   ├── license.txt
│   │   │       │   ├── readme.html
│   │   │       │   ├── wp-activate.php
│   │   │       │   ├── wp-admin/
│   │   │       │   │   ├── about.php
│   │   │       │   │   ├── admin-ajax.php
│   │   │       │   │   ├── admin-footer.php
│   │   │       │   │   ├── admin-functions.php
│   │   │       │   │   ├── admin-header.php
│   │   │       │   │   ├── admin-post.php
│   │   │       │   │   ├── admin.php
│   │   │       │   │   ├── async-upload.php
│   │   │       │   │   ├── comment.php
│   │   │       │   │   ├── credits.php
│   │   │       │   │   ├── css/
│   │   │       │   │   │   ├── about-rtl.css
│   │   │       │   │   │   ├── about.css
│   │   │       │   │   │   ├── admin-menu-rtl.css
│   │   │       │   │   │   ├── admin-menu.css
│   │   │       │   │   │   ├── color-picker-rtl.css
│   │   │       │   │   │   ├── color-picker.css
│   │   │       │   │   │   ├── colors/
│   │   │       │   │   │   │   ├── _admin.scss
│   │   │       │   │   │   │   ├── _mixins.scss
│   │   │       │   │   │   │   ├── _variables.scss
│   │   │       │   │   │   │   ├── blue/
│   │   │       │   │   │   │   │   ├── colors-rtl.css
│   │   │       │   │   │   │   │   ├── colors.css
│   │   │       │   │   │   │   │   └── colors.scss
│   │   │       │   │   │   │   ├── coffee/
│   │   │       │   │   │   │   │   ├── colors-rtl.css
│   │   │       │   │   │   │   │   ├── colors.css
│   │   │       │   │   │   │   │   └── colors.scss
│   │   │       │   │   │   │   ├── ectoplasm/
│   │   │       │   │   │   │   │   ├── colors-rtl.css
│   │   │       │   │   │   │   │   ├── colors.css
│   │   │       │   │   │   │   │   └── colors.scss
│   │   │       │   │   │   │   ├── light/
│   │   │       │   │   │   │   │   ├── colors-rtl.css
│   │   │       │   │   │   │   │   ├── colors.css
│   │   │       │   │   │   │   │   └── colors.scss
│   │   │       │   │   │   │   ├── midnight/
│   │   │       │   │   │   │   │   ├── colors-rtl.css
│   │   │       │   │   │   │   │   ├── colors.css
│   │   │       │   │   │   │   │   └── colors.scss
│   │   │       │   │   │   │   ├── ocean/
│   │   │       │   │   │   │   │   ├── colors-rtl.css
│   │   │       │   │   │   │   │   ├── colors.css
│   │   │       │   │   │   │   │   └── colors.scss
│   │   │       │   │   │   │   └── sunrise/
│   │   │       │   │   │   │       ├── colors-rtl.css
│   │   │       │   │   │   │       ├── colors.css
│   │   │       │   │   │   │       └── colors.scss
│   │   │       │   │   │   ├── common-rtl.css
│   │   │       │   │   │   ├── common.css
│   │   │       │   │   │   ├── customize-controls-rtl.css
│   │   │       │   │   │   ├── customize-controls.css
│   │   │       │   │   │   ├── customize-nav-menus-rtl.css
│   │   │       │   │   │   ├── customize-nav-menus.css
│   │   │       │   │   │   ├── customize-widgets-rtl.css
│   │   │       │   │   │   ├── customize-widgets.css
│   │   │       │   │   │   ├── dashboard-rtl.css
│   │   │       │   │   │   ├── dashboard.css
│   │   │       │   │   │   ├── deprecated-media-rtl.css
│   │   │       │   │   │   ├── deprecated-media.css
│   │   │       │   │   │   ├── edit-rtl.css
│   │   │       │   │   │   ├── edit.css
│   │   │       │   │   │   ├── farbtastic-rtl.css
│   │   │       │   │   │   ├── farbtastic.css
│   │   │       │   │   │   ├── forms-rtl.css
│   │   │       │   │   │   ├── forms.css
│   │   │       │   │   │   ├── ie-rtl.css
│   │   │       │   │   │   ├── ie.css
│   │   │       │   │   │   ├── install-rtl.css
│   │   │       │   │   │   ├── install.css
│   │   │       │   │   │   ├── l10n-rtl.css
│   │   │       │   │   │   ├── l10n.css
│   │   │       │   │   │   ├── list-tables-rtl.css
│   │   │       │   │   │   ├── list-tables.css
│   │   │       │   │   │   ├── login-rtl.css
│   │   │       │   │   │   ├── login.css
│   │   │       │   │   │   ├── media-rtl.css
│   │   │       │   │   │   ├── media.css
│   │   │       │   │   │   ├── nav-menus-rtl.css
│   │   │       │   │   │   ├── nav-menus.css
│   │   │       │   │   │   ├── press-this-editor-rtl.css
│   │   │       │   │   │   ├── press-this-editor.css
│   │   │       │   │   │   ├── press-this-rtl.css
│   │   │       │   │   │   ├── press-this.css
│   │   │       │   │   │   ├── revisions-rtl.css
│   │   │       │   │   │   ├── revisions.css
│   │   │       │   │   │   ├── site-icon-rtl.css
│   │   │       │   │   │   ├── site-icon.css
│   │   │       │   │   │   ├── themes-rtl.css
│   │   │       │   │   │   ├── themes.css
│   │   │       │   │   │   ├── widgets-rtl.css
│   │   │       │   │   │   ├── widgets.css
│   │   │       │   │   │   ├── wp-admin-rtl.css
│   │   │       │   │   │   └── wp-admin.css
│   │   │       │   │   ├── custom-background.php
│   │   │       │   │   ├── custom-header.php
│   │   │       │   │   ├── customize.php
│   │   │       │   │   ├── edit-comments.php
│   │   │       │   │   ├── edit-form-advanced.php
│   │   │       │   │   ├── edit-form-comment.php
│   │   │       │   │   ├── edit-link-form.php
│   │   │       │   │   ├── edit-tag-form.php
│   │   │       │   │   ├── edit-tags.php
│   │   │       │   │   ├── edit.php
│   │   │       │   │   ├── export.php
│   │   │       │   │   ├── freedoms.php
│   │   │       │   │   ├── import.php
│   │   │       │   │   ├── includes/
│   │   │       │   │   │   ├── admin-filters.php
│   │   │       │   │   │   ├── admin.php
│   │   │       │   │   │   ├── ajax-actions.php
│   │   │       │   │   │   ├── bookmark.php
│   │   │       │   │   │   ├── class-ftp-pure.php
│   │   │       │   │   │   ├── class-ftp-sockets.php
│   │   │       │   │   │   ├── class-ftp.php
│   │   │       │   │   │   ├── class-pclzip.php
│   │   │       │   │   │   ├── class-walker-category-checklist.php
│   │   │       │   │   │   ├── class-walker-nav-menu-checklist.php
│   │   │       │   │   │   ├── class-walker-nav-menu-edit.php
│   │   │       │   │   │   ├── class-wp-comments-list-table.php
│   │   │       │   │   │   ├── class-wp-filesystem-base.php
│   │   │       │   │   │   ├── class-wp-filesystem-direct.php
│   │   │       │   │   │   ├── class-wp-filesystem-ftpext.php
│   │   │       │   │   │   ├── class-wp-filesystem-ftpsockets.php
│   │   │       │   │   │   ├── class-wp-filesystem-ssh2.php
│   │   │       │   │   │   ├── class-wp-importer.php
│   │   │       │   │   │   ├── class-wp-internal-pointers.php
│   │   │       │   │   │   ├── class-wp-links-list-table.php
│   │   │       │   │   │   ├── class-wp-list-table.php
│   │   │       │   │   │   ├── class-wp-media-list-table.php
│   │   │       │   │   │   ├── class-wp-ms-sites-list-table.php
│   │   │       │   │   │   ├── class-wp-ms-themes-list-table.php
│   │   │       │   │   │   ├── class-wp-ms-users-list-table.php
│   │   │       │   │   │   ├── class-wp-plugin-install-list-table.php
│   │   │       │   │   │   ├── class-wp-plugins-list-table.php
│   │   │       │   │   │   ├── class-wp-post-comments-list-table.php
│   │   │       │   │   │   ├── class-wp-posts-list-table.php
│   │   │       │   │   │   ├── class-wp-press-this.php
│   │   │       │   │   │   ├── class-wp-screen.php
│   │   │       │   │   │   ├── class-wp-site-icon.php
│   │   │       │   │   │   ├── class-wp-terms-list-table.php
│   │   │       │   │   │   ├── class-wp-theme-install-list-table.php
│   │   │       │   │   │   ├── class-wp-themes-list-table.php
│   │   │       │   │   │   ├── class-wp-upgrader-skins.php
│   │   │       │   │   │   ├── class-wp-upgrader.php
│   │   │       │   │   │   ├── class-wp-users-list-table.php
│   │   │       │   │   │   ├── comment.php
│   │   │       │   │   │   ├── continents-cities.php
│   │   │       │   │   │   ├── credits.php
│   │   │       │   │   │   ├── dashboard.php
│   │   │       │   │   │   ├── deprecated.php
│   │   │       │   │   │   ├── edit-tag-messages.php
│   │   │       │   │   │   ├── export.php
│   │   │       │   │   │   ├── file.php
│   │   │       │   │   │   ├── image-edit.php
│   │   │       │   │   │   ├── image.php
│   │   │       │   │   │   ├── import.php
│   │   │       │   │   │   ├── list-table.php
│   │   │       │   │   │   ├── media.php
│   │   │       │   │   │   ├── menu.php
│   │   │       │   │   │   ├── meta-boxes.php
│   │   │       │   │   │   ├── misc.php
│   │   │       │   │   │   ├── ms-admin-filters.php
│   │   │       │   │   │   ├── ms-deprecated.php
│   │   │       │   │   │   ├── ms.php
│   │   │       │   │   │   ├── nav-menu.php
│   │   │       │   │   │   ├── network.php
│   │   │       │   │   │   ├── noop.php
│   │   │       │   │   │   ├── options.php
│   │   │       │   │   │   ├── plugin-install.php
│   │   │       │   │   │   ├── plugin.php
│   │   │       │   │   │   ├── post.php
│   │   │       │   │   │   ├── revision.php
│   │   │       │   │   │   ├── schema.php
│   │   │       │   │   │   ├── screen.php
│   │   │       │   │   │   ├── taxonomy.php
│   │   │       │   │   │   ├── template.php
│   │   │       │   │   │   ├── theme-install.php
│   │   │       │   │   │   ├── theme.php
│   │   │       │   │   │   ├── translation-install.php
│   │   │       │   │   │   ├── update-core.php
│   │   │       │   │   │   ├── update.php
│   │   │       │   │   │   ├── upgrade.php
│   │   │       │   │   │   ├── user.php
│   │   │       │   │   │   └── widgets.php
│   │   │       │   │   ├── index.php
│   │   │       │   │   ├── install-helper.php
│   │   │       │   │   ├── install.php
│   │   │       │   │   ├── js/
│   │   │       │   │   │   ├── accordion.js
│   │   │       │   │   │   ├── bookmarklet.js
│   │   │       │   │   │   ├── color-picker.js
│   │   │       │   │   │   ├── comment.js
│   │   │       │   │   │   ├── common.js
│   │   │       │   │   │   ├── custom-background.js
│   │   │       │   │   │   ├── custom-header.js
│   │   │       │   │   │   ├── customize-controls.js
│   │   │       │   │   │   ├── customize-nav-menus.js
│   │   │       │   │   │   ├── customize-widgets.js
│   │   │       │   │   │   ├── dashboard.js
│   │   │       │   │   │   ├── edit-comments.js
│   │   │       │   │   │   ├── editor-expand.js
│   │   │       │   │   │   ├── editor.js
│   │   │       │   │   │   ├── farbtastic.js
│   │   │       │   │   │   ├── gallery.js
│   │   │       │   │   │   ├── image-edit.js
│   │   │       │   │   │   ├── inline-edit-post.js
│   │   │       │   │   │   ├── inline-edit-tax.js
│   │   │       │   │   │   ├── language-chooser.js
│   │   │       │   │   │   ├── link.js
│   │   │       │   │   │   ├── media-gallery.js
│   │   │       │   │   │   ├── media-upload.js
│   │   │       │   │   │   ├── media.js
│   │   │       │   │   │   ├── nav-menu.js
│   │   │       │   │   │   ├── password-strength-meter.js
│   │   │       │   │   │   ├── plugin-install.js
│   │   │       │   │   │   ├── post.js
│   │   │       │   │   │   ├── postbox.js
│   │   │       │   │   │   ├── press-this.js
│   │   │       │   │   │   ├── revisions.js
│   │   │       │   │   │   ├── set-post-thumbnail.js
│   │   │       │   │   │   ├── svg-painter.js
│   │   │       │   │   │   ├── tags-box.js
│   │   │       │   │   │   ├── tags.js
│   │   │       │   │   │   ├── theme.js
│   │   │       │   │   │   ├── updates.js
│   │   │       │   │   │   ├── user-profile.js
│   │   │       │   │   │   ├── user-suggest.js
│   │   │       │   │   │   ├── widgets.js
│   │   │       │   │   │   ├── word-count.js
│   │   │       │   │   │   ├── wp-fullscreen-stub.js
│   │   │       │   │   │   └── xfn.js
│   │   │       │   │   ├── link-add.php
│   │   │       │   │   ├── link-manager.php
│   │   │       │   │   ├── link-parse-opml.php
│   │   │       │   │   ├── link.php
│   │   │       │   │   ├── load-scripts.php
│   │   │       │   │   ├── load-styles.php
│   │   │       │   │   ├── maint/
│   │   │       │   │   │   └── repair.php
│   │   │       │   │   ├── media-new.php
│   │   │       │   │   ├── media-upload.php
│   │   │       │   │   ├── media.php
│   │   │       │   │   ├── menu-header.php
│   │   │       │   │   ├── menu.php
│   │   │       │   │   ├── moderation.php
│   │   │       │   │   ├── ms-admin.php
│   │   │       │   │   ├── ms-delete-site.php
│   │   │       │   │   ├── ms-edit.php
│   │   │       │   │   ├── ms-options.php
│   │   │       │   │   ├── ms-sites.php
│   │   │       │   │   ├── ms-themes.php
│   │   │       │   │   ├── ms-upgrade-network.php
│   │   │       │   │   ├── ms-users.php
│   │   │       │   │   ├── my-sites.php
│   │   │       │   │   ├── nav-menus.php
│   │   │       │   │   ├── network/
│   │   │       │   │   │   ├── about.php
│   │   │       │   │   │   ├── admin.php
│   │   │       │   │   │   ├── credits.php
│   │   │       │   │   │   ├── edit.php
│   │   │       │   │   │   ├── freedoms.php
│   │   │       │   │   │   ├── index.php
│   │   │       │   │   │   ├── menu.php
│   │   │       │   │   │   ├── plugin-editor.php
│   │   │       │   │   │   ├── plugin-install.php
│   │   │       │   │   │   ├── plugins.php
│   │   │       │   │   │   ├── profile.php
│   │   │       │   │   │   ├── settings.php
│   │   │       │   │   │   ├── setup.php
│   │   │       │   │   │   ├── site-info.php
│   │   │       │   │   │   ├── site-new.php
│   │   │       │   │   │   ├── site-settings.php
│   │   │       │   │   │   ├── site-themes.php
│   │   │       │   │   │   ├── site-users.php
│   │   │       │   │   │   ├── sites.php
│   │   │       │   │   │   ├── theme-editor.php
│   │   │       │   │   │   ├── theme-install.php
│   │   │       │   │   │   ├── themes.php
│   │   │       │   │   │   ├── update-core.php
│   │   │       │   │   │   ├── update.php
│   │   │       │   │   │   ├── upgrade.php
│   │   │       │   │   │   ├── user-edit.php
│   │   │       │   │   │   ├── user-new.php
│   │   │       │   │   │   └── users.php
│   │   │       │   │   ├── network.php
│   │   │       │   │   ├── options-discussion.php
│   │   │       │   │   ├── options-general.php
│   │   │       │   │   ├── options-head.php
│   │   │       │   │   ├── options-media.php
│   │   │       │   │   ├── options-permalink.php
│   │   │       │   │   ├── options-reading.php
│   │   │       │   │   ├── options-writing.php
│   │   │       │   │   ├── options.php
│   │   │       │   │   ├── plugin-editor.php
│   │   │       │   │   ├── plugin-install.php
│   │   │       │   │   ├── plugins.php
│   │   │       │   │   ├── post-new.php
│   │   │       │   │   ├── post.php
│   │   │       │   │   ├── press-this.php
│   │   │       │   │   ├── profile.php
│   │   │       │   │   ├── revision.php
│   │   │       │   │   ├── setup-config.php
│   │   │       │   │   ├── theme-editor.php
│   │   │       │   │   ├── theme-install.php
│   │   │       │   │   ├── themes.php
│   │   │       │   │   ├── tools.php
│   │   │       │   │   ├── update-core.php
│   │   │       │   │   ├── update.php
│   │   │       │   │   ├── upgrade-functions.php
│   │   │       │   │   ├── upgrade.php
│   │   │       │   │   ├── upload.php
│   │   │       │   │   ├── user/
│   │   │       │   │   │   ├── about.php
│   │   │       │   │   │   ├── admin.php
│   │   │       │   │   │   ├── credits.php
│   │   │       │   │   │   ├── freedoms.php
│   │   │       │   │   │   ├── index.php
│   │   │       │   │   │   ├── menu.php
│   │   │       │   │   │   ├── profile.php
│   │   │       │   │   │   └── user-edit.php
│   │   │       │   │   ├── user-edit.php
│   │   │       │   │   ├── user-new.php
│   │   │       │   │   ├── users.php
│   │   │       │   │   └── widgets.php
│   │   │       │   ├── wp-blog-header.php
│   │   │       │   ├── wp-comments-post.php
│   │   │       │   ├── wp-config.php
│   │   │       │   ├── wp-content/
│   │   │       │   │   ├── index.php
│   │   │       │   │   ├── plugins/
│   │   │       │   │   │   ├── akismet/
│   │   │       │   │   │   │   ├── .htaccess
│   │   │       │   │   │   │   ├── LICENSE.txt
│   │   │       │   │   │   │   ├── _inc/
│   │   │       │   │   │   │   │   ├── akismet.css
│   │   │       │   │   │   │   │   ├── akismet.js
│   │   │       │   │   │   │   │   └── form.js
│   │   │       │   │   │   │   ├── akismet.php
│   │   │       │   │   │   │   ├── class.akismet-admin.php
│   │   │       │   │   │   │   ├── class.akismet-widget.php
│   │   │       │   │   │   │   ├── class.akismet.php
│   │   │       │   │   │   │   ├── index.php
│   │   │       │   │   │   │   ├── readme.txt
│   │   │       │   │   │   │   ├── views/
│   │   │       │   │   │   │   │   ├── config.php
│   │   │       │   │   │   │   │   ├── get.php
│   │   │       │   │   │   │   │   ├── notice.php
│   │   │       │   │   │   │   │   ├── start.php
│   │   │       │   │   │   │   │   ├── stats.php
│   │   │       │   │   │   │   │   └── strict.php
│   │   │       │   │   │   │   └── wrapper.php
│   │   │       │   │   │   ├── hello.php
│   │   │       │   │   │   └── index.php
│   │   │       │   │   └── themes/
│   │   │       │   │       ├── index.php
│   │   │       │   │       ├── twentyfifteen/
│   │   │       │   │       │   ├── 404.php
│   │   │       │   │       │   ├── archive.php
│   │   │       │   │       │   ├── author-bio.php
│   │   │       │   │       │   ├── comments.php
│   │   │       │   │       │   ├── content-link.php
│   │   │       │   │       │   ├── content-none.php
│   │   │       │   │       │   ├── content-page.php
│   │   │       │   │       │   ├── content-search.php
│   │   │       │   │       │   ├── content.php
│   │   │       │   │       │   ├── css/
│   │   │       │   │       │   │   ├── editor-style.css
│   │   │       │   │       │   │   ├── ie.css
│   │   │       │   │       │   │   └── ie7.css
│   │   │       │   │       │   ├── footer.php
│   │   │       │   │       │   ├── functions.php
│   │   │       │   │       │   ├── genericons/
│   │   │       │   │       │   │   ├── COPYING.txt
│   │   │       │   │       │   │   ├── LICENSE.txt
│   │   │       │   │       │   │   ├── README.md
│   │   │       │   │       │   │   └── genericons.css
│   │   │       │   │       │   ├── header.php
│   │   │       │   │       │   ├── image.php
│   │   │       │   │       │   ├── inc/
│   │   │       │   │       │   │   ├── back-compat.php
│   │   │       │   │       │   │   ├── custom-header.php
│   │   │       │   │       │   │   ├── customizer.php
│   │   │       │   │       │   │   └── template-tags.php
│   │   │       │   │       │   ├── index.php
│   │   │       │   │       │   ├── js/
│   │   │       │   │       │   │   ├── color-scheme-control.js
│   │   │       │   │       │   │   ├── customize-preview.js
│   │   │       │   │       │   │   ├── functions.js
│   │   │       │   │       │   │   ├── html5.js
│   │   │       │   │       │   │   ├── keyboard-image-navigation.js
│   │   │       │   │       │   │   └── skip-link-focus-fix.js
│   │   │       │   │       │   ├── languages/
│   │   │       │   │       │   │   └── twentyfifteen.pot
│   │   │       │   │       │   ├── page.php
│   │   │       │   │       │   ├── readme.txt
│   │   │       │   │       │   ├── rtl.css
│   │   │       │   │       │   ├── search.php
│   │   │       │   │       │   ├── sidebar.php
│   │   │       │   │       │   ├── single.php
│   │   │       │   │       │   └── style.css
│   │   │       │   │       ├── twentyfourteen/
│   │   │       │   │       │   ├── 404.php
│   │   │       │   │       │   ├── archive.php
│   │   │       │   │       │   ├── author.php
│   │   │       │   │       │   ├── category.php
│   │   │       │   │       │   ├── comments.php
│   │   │       │   │       │   ├── content-aside.php
│   │   │       │   │       │   ├── content-audio.php
│   │   │       │   │       │   ├── content-featured-post.php
│   │   │       │   │       │   ├── content-gallery.php
│   │   │       │   │       │   ├── content-image.php
│   │   │       │   │       │   ├── content-link.php
│   │   │       │   │       │   ├── content-none.php
│   │   │       │   │       │   ├── content-page.php
│   │   │       │   │       │   ├── content-quote.php
│   │   │       │   │       │   ├── content-video.php
│   │   │       │   │       │   ├── content.php
│   │   │       │   │       │   ├── css/
│   │   │       │   │       │   │   ├── editor-style.css
│   │   │       │   │       │   │   └── ie.css
│   │   │       │   │       │   ├── featured-content.php
│   │   │       │   │       │   ├── footer.php
│   │   │       │   │       │   ├── functions.php
│   │   │       │   │       │   ├── genericons/
│   │   │       │   │       │   │   ├── COPYING.txt
│   │   │       │   │       │   │   ├── Genericons-Regular.otf
│   │   │       │   │       │   │   ├── LICENSE.txt
│   │   │       │   │       │   │   ├── README.txt
│   │   │       │   │       │   │   └── genericons.css
│   │   │       │   │       │   ├── header.php
│   │   │       │   │       │   ├── image.php
│   │   │       │   │       │   ├── inc/
│   │   │       │   │       │   │   ├── back-compat.php
│   │   │       │   │       │   │   ├── custom-header.php
│   │   │       │   │       │   │   ├── customizer.php
│   │   │       │   │       │   │   ├── featured-content.php
│   │   │       │   │       │   │   ├── template-tags.php
│   │   │       │   │       │   │   └── widgets.php
│   │   │       │   │       │   ├── index.php
│   │   │       │   │       │   ├── js/
│   │   │       │   │       │   │   ├── customizer.js
│   │   │       │   │       │   │   ├── featured-content-admin.js
│   │   │       │   │       │   │   ├── functions.js
│   │   │       │   │       │   │   ├── html5.js
│   │   │       │   │       │   │   ├── keyboard-image-navigation.js
│   │   │       │   │       │   │   └── slider.js
│   │   │       │   │       │   ├── languages/
│   │   │       │   │       │   │   └── twentyfourteen.pot
│   │   │       │   │       │   ├── page-templates/
│   │   │       │   │       │   │   ├── contributors.php
│   │   │       │   │       │   │   └── full-width.php
│   │   │       │   │       │   ├── page.php
│   │   │       │   │       │   ├── readme.txt
│   │   │       │   │       │   ├── rtl.css
│   │   │       │   │       │   ├── search.php
│   │   │       │   │       │   ├── sidebar-content.php
│   │   │       │   │       │   ├── sidebar-footer.php
│   │   │       │   │       │   ├── sidebar.php
│   │   │       │   │       │   ├── single.php
│   │   │       │   │       │   ├── style.css
│   │   │       │   │       │   ├── tag.php
│   │   │       │   │       │   └── taxonomy-post_format.php
│   │   │       │   │       └── twentysixteen/
│   │   │       │   │           ├── 404.php
│   │   │       │   │           ├── archive.php
│   │   │       │   │           ├── comments.php
│   │   │       │   │           ├── css/
│   │   │       │   │           │   ├── editor-style.css
│   │   │       │   │           │   ├── ie.css
│   │   │       │   │           │   ├── ie7.css
│   │   │       │   │           │   └── ie8.css
│   │   │       │   │           ├── footer.php
│   │   │       │   │           ├── functions.php
│   │   │       │   │           ├── genericons/
│   │   │       │   │           │   ├── COPYING.txt
│   │   │       │   │           │   ├── LICENSE.txt
│   │   │       │   │           │   ├── README.md
│   │   │       │   │           │   └── genericons.css
│   │   │       │   │           ├── header.php
│   │   │       │   │           ├── image.php
│   │   │       │   │           ├── inc/
│   │   │       │   │           │   ├── back-compat.php
│   │   │       │   │           │   ├── customizer.php
│   │   │       │   │           │   └── template-tags.php
│   │   │       │   │           ├── index.php
│   │   │       │   │           ├── js/
│   │   │       │   │           │   ├── color-scheme-control.js
│   │   │       │   │           │   ├── customize-preview.js
│   │   │       │   │           │   ├── functions.js
│   │   │       │   │           │   ├── html5.js
│   │   │       │   │           │   ├── keyboard-image-navigation.js
│   │   │       │   │           │   └── skip-link-focus-fix.js
│   │   │       │   │           ├── languages/
│   │   │       │   │           │   └── twentysixteen.pot
│   │   │       │   │           ├── page.php
│   │   │       │   │           ├── readme.txt
│   │   │       │   │           ├── rtl.css
│   │   │       │   │           ├── search.php
│   │   │       │   │           ├── searchform.php
│   │   │       │   │           ├── sidebar-content-bottom.php
│   │   │       │   │           ├── sidebar.php
│   │   │       │   │           ├── single.php
│   │   │       │   │           ├── style.css
│   │   │       │   │           └── template-parts/
│   │   │       │   │               ├── biography.php
│   │   │       │   │               ├── content-none.php
│   │   │       │   │               ├── content-page.php
│   │   │       │   │               ├── content-search.php
│   │   │       │   │               ├── content-single.php
│   │   │       │   │               └── content.php
│   │   │       │   ├── wp-cron.php
│   │   │       │   ├── wp-includes/
│   │   │       │   │   ├── ID3/
│   │   │       │   │   │   ├── getid3.lib.php
│   │   │       │   │   │   ├── getid3.php
│   │   │       │   │   │   ├── license.commercial.txt
│   │   │       │   │   │   ├── license.txt
│   │   │       │   │   │   ├── module.audio-video.asf.php
│   │   │       │   │   │   ├── module.audio-video.flv.php
│   │   │       │   │   │   ├── module.audio-video.matroska.php
│   │   │       │   │   │   ├── module.audio-video.quicktime.php
│   │   │       │   │   │   ├── module.audio-video.riff.php
│   │   │       │   │   │   ├── module.audio.ac3.php
│   │   │       │   │   │   ├── module.audio.dts.php
│   │   │       │   │   │   ├── module.audio.flac.php
│   │   │       │   │   │   ├── module.audio.mp3.php
│   │   │       │   │   │   ├── module.audio.ogg.php
│   │   │       │   │   │   ├── module.tag.apetag.php
│   │   │       │   │   │   ├── module.tag.id3v1.php
│   │   │       │   │   │   ├── module.tag.id3v2.php
│   │   │       │   │   │   ├── module.tag.lyrics3.php
│   │   │       │   │   │   └── readme.txt
│   │   │       │   │   ├── SimplePie/
│   │   │       │   │   │   ├── Author.php
│   │   │       │   │   │   ├── Cache/
│   │   │       │   │   │   │   ├── Base.php
│   │   │       │   │   │   │   ├── DB.php
│   │   │       │   │   │   │   ├── File.php
│   │   │       │   │   │   │   ├── Memcache.php
│   │   │       │   │   │   │   └── MySQL.php
│   │   │       │   │   │   ├── Cache.php
│   │   │       │   │   │   ├── Caption.php
│   │   │       │   │   │   ├── Category.php
│   │   │       │   │   │   ├── Content/
│   │   │       │   │   │   │   └── Type/
│   │   │       │   │   │   │       └── Sniffer.php
│   │   │       │   │   │   ├── Copyright.php
│   │   │       │   │   │   ├── Core.php
│   │   │       │   │   │   ├── Credit.php
│   │   │       │   │   │   ├── Decode/
│   │   │       │   │   │   │   └── HTML/
│   │   │       │   │   │   │       └── Entities.php
│   │   │       │   │   │   ├── Enclosure.php
│   │   │       │   │   │   ├── Exception.php
│   │   │       │   │   │   ├── File.php
│   │   │       │   │   │   ├── HTTP/
│   │   │       │   │   │   │   └── Parser.php
│   │   │       │   │   │   ├── IRI.php
│   │   │       │   │   │   ├── Item.php
│   │   │       │   │   │   ├── Locator.php
│   │   │       │   │   │   ├── Misc.php
│   │   │       │   │   │   ├── Net/
│   │   │       │   │   │   │   └── IPv6.php
│   │   │       │   │   │   ├── Parse/
│   │   │       │   │   │   │   └── Date.php
│   │   │       │   │   │   ├── Parser.php
│   │   │       │   │   │   ├── Rating.php
│   │   │       │   │   │   ├── Registry.php
│   │   │       │   │   │   ├── Restriction.php
│   │   │       │   │   │   ├── Sanitize.php
│   │   │       │   │   │   ├── Source.php
│   │   │       │   │   │   ├── XML/
│   │   │       │   │   │   │   └── Declaration/
│   │   │       │   │   │   │       └── Parser.php
│   │   │       │   │   │   └── gzdecode.php
│   │   │       │   │   ├── Text/
│   │   │       │   │   │   ├── Diff/
│   │   │       │   │   │   │   ├── Engine/
│   │   │       │   │   │   │   │   ├── native.php
│   │   │       │   │   │   │   │   ├── shell.php
│   │   │       │   │   │   │   │   ├── string.php
│   │   │       │   │   │   │   │   └── xdiff.php
│   │   │       │   │   │   │   ├── Renderer/
│   │   │       │   │   │   │   │   └── inline.php
│   │   │       │   │   │   │   └── Renderer.php
│   │   │       │   │   │   └── Diff.php
│   │   │       │   │   ├── admin-bar.php
│   │   │       │   │   ├── atomlib.php
│   │   │       │   │   ├── author-template.php
│   │   │       │   │   ├── bookmark-template.php
│   │   │       │   │   ├── bookmark.php
│   │   │       │   │   ├── cache.php
│   │   │       │   │   ├── canonical.php
│   │   │       │   │   ├── capabilities.php
│   │   │       │   │   ├── category-template.php
│   │   │       │   │   ├── category.php
│   │   │       │   │   ├── certificates/
│   │   │       │   │   │   └── ca-bundle.crt
│   │   │       │   │   ├── class-IXR.php
│   │   │       │   │   ├── class-feed.php
│   │   │       │   │   ├── class-http.php
│   │   │       │   │   ├── class-json.php
│   │   │       │   │   ├── class-oembed.php
│   │   │       │   │   ├── class-phpass.php
│   │   │       │   │   ├── class-phpmailer.php
│   │   │       │   │   ├── class-pop3.php
│   │   │       │   │   ├── class-simplepie.php
│   │   │       │   │   ├── class-smtp.php
│   │   │       │   │   ├── class-snoopy.php
│   │   │       │   │   ├── class-walker-category-dropdown.php
│   │   │       │   │   ├── class-walker-category.php
│   │   │       │   │   ├── class-walker-comment.php
│   │   │       │   │   ├── class-walker-page-dropdown.php
│   │   │       │   │   ├── class-walker-page.php
│   │   │       │   │   ├── class-wp-admin-bar.php
│   │   │       │   │   ├── class-wp-ajax-response.php
│   │   │       │   │   ├── class-wp-comment-query.php
│   │   │       │   │   ├── class-wp-comment.php
│   │   │       │   │   ├── class-wp-customize-control.php
│   │   │       │   │   ├── class-wp-customize-manager.php
│   │   │       │   │   ├── class-wp-customize-nav-menus.php
│   │   │       │   │   ├── class-wp-customize-panel.php
│   │   │       │   │   ├── class-wp-customize-section.php
│   │   │       │   │   ├── class-wp-customize-setting.php
│   │   │       │   │   ├── class-wp-customize-widgets.php
│   │   │       │   │   ├── class-wp-editor.php
│   │   │       │   │   ├── class-wp-embed.php
│   │   │       │   │   ├── class-wp-error.php
│   │   │       │   │   ├── class-wp-http-cookie.php
│   │   │       │   │   ├── class-wp-http-curl.php
│   │   │       │   │   ├── class-wp-http-encoding.php
│   │   │       │   │   ├── class-wp-http-ixr-client.php
│   │   │       │   │   ├── class-wp-http-proxy.php
│   │   │       │   │   ├── class-wp-http-response.php
│   │   │       │   │   ├── class-wp-http-streams.php
│   │   │       │   │   ├── class-wp-image-editor-gd.php
│   │   │       │   │   ├── class-wp-image-editor-imagick.php
│   │   │       │   │   ├── class-wp-image-editor.php
│   │   │       │   │   ├── class-wp-meta-query.php
│   │   │       │   │   ├── class-wp-network.php
│   │   │       │   │   ├── class-wp-oembed-controller.php
│   │   │       │   │   ├── class-wp-post.php
│   │   │       │   │   ├── class-wp-rewrite.php
│   │   │       │   │   ├── class-wp-role.php
│   │   │       │   │   ├── class-wp-roles.php
│   │   │       │   │   ├── class-wp-tax-query.php
│   │   │       │   │   ├── class-wp-term.php
│   │   │       │   │   ├── class-wp-theme.php
│   │   │       │   │   ├── class-wp-user-query.php
│   │   │       │   │   ├── class-wp-user.php
│   │   │       │   │   ├── class-wp-walker.php
│   │   │       │   │   ├── class-wp-widget-factory.php
│   │   │       │   │   ├── class-wp-widget.php
│   │   │       │   │   ├── class-wp-xmlrpc-server.php
│   │   │       │   │   ├── class-wp.php
│   │   │       │   │   ├── class.wp-dependencies.php
│   │   │       │   │   ├── class.wp-scripts.php
│   │   │       │   │   ├── class.wp-styles.php
│   │   │       │   │   ├── comment-template.php
│   │   │       │   │   ├── comment.php
│   │   │       │   │   ├── compat.php
│   │   │       │   │   ├── cron.php
│   │   │       │   │   ├── css/
│   │   │       │   │   │   ├── admin-bar-rtl.css
│   │   │       │   │   │   ├── admin-bar.css
│   │   │       │   │   │   ├── buttons-rtl.css
│   │   │       │   │   │   ├── buttons.css
│   │   │       │   │   │   ├── customize-preview.css
│   │   │       │   │   │   ├── dashicons.css
│   │   │       │   │   │   ├── editor-rtl.css
│   │   │       │   │   │   ├── editor.css
│   │   │       │   │   │   ├── jquery-ui-dialog-rtl.css
│   │   │       │   │   │   ├── jquery-ui-dialog.css
│   │   │       │   │   │   ├── media-views-rtl.css
│   │   │       │   │   │   ├── media-views.css
│   │   │       │   │   │   ├── wp-auth-check-rtl.css
│   │   │       │   │   │   ├── wp-auth-check.css
│   │   │       │   │   │   ├── wp-embed-template-ie.css
│   │   │       │   │   │   ├── wp-embed-template.css
│   │   │       │   │   │   ├── wp-pointer-rtl.css
│   │   │       │   │   │   └── wp-pointer.css
│   │   │       │   │   ├── customize/
│   │   │       │   │   │   ├── class-wp-customize-background-image-control.php
│   │   │       │   │   │   ├── class-wp-customize-background-image-setting.php
│   │   │       │   │   │   ├── class-wp-customize-color-control.php
│   │   │       │   │   │   ├── class-wp-customize-cropped-image-control.php
│   │   │       │   │   │   ├── class-wp-customize-filter-setting.php
│   │   │       │   │   │   ├── class-wp-customize-header-image-control.php
│   │   │       │   │   │   ├── class-wp-customize-header-image-setting.php
│   │   │       │   │   │   ├── class-wp-customize-image-control.php
│   │   │       │   │   │   ├── class-wp-customize-media-control.php
│   │   │       │   │   │   ├── class-wp-customize-nav-menu-auto-add-control.php
│   │   │       │   │   │   ├── class-wp-customize-nav-menu-control.php
│   │   │       │   │   │   ├── class-wp-customize-nav-menu-item-control.php
│   │   │       │   │   │   ├── class-wp-customize-nav-menu-item-setting.php
│   │   │       │   │   │   ├── class-wp-customize-nav-menu-location-control.php
│   │   │       │   │   │   ├── class-wp-customize-nav-menu-name-control.php
│   │   │       │   │   │   ├── class-wp-customize-nav-menu-section.php
│   │   │       │   │   │   ├── class-wp-customize-nav-menu-setting.php
│   │   │       │   │   │   ├── class-wp-customize-nav-menus-panel.php
│   │   │       │   │   │   ├── class-wp-customize-new-menu-control.php
│   │   │       │   │   │   ├── class-wp-customize-new-menu-section.php
│   │   │       │   │   │   ├── class-wp-customize-sidebar-section.php
│   │   │       │   │   │   ├── class-wp-customize-site-icon-control.php
│   │   │       │   │   │   ├── class-wp-customize-theme-control.php
│   │   │       │   │   │   ├── class-wp-customize-themes-section.php
│   │   │       │   │   │   ├── class-wp-customize-upload-control.php
│   │   │       │   │   │   ├── class-wp-widget-area-customize-control.php
│   │   │       │   │   │   └── class-wp-widget-form-customize-control.php
│   │   │       │   │   ├── date.php
│   │   │       │   │   ├── default-constants.php
│   │   │       │   │   ├── default-filters.php
│   │   │       │   │   ├── default-widgets.php
│   │   │       │   │   ├── deprecated.php
│   │   │       │   │   ├── embed-template.php
│   │   │       │   │   ├── embed.php
│   │   │       │   │   ├── feed-atom-comments.php
│   │   │       │   │   ├── feed-atom.php
│   │   │       │   │   ├── feed-rdf.php
│   │   │       │   │   ├── feed-rss.php
│   │   │       │   │   ├── feed-rss2-comments.php
│   │   │       │   │   ├── feed-rss2.php
│   │   │       │   │   ├── feed.php
│   │   │       │   │   ├── formatting.php
│   │   │       │   │   ├── functions.php
│   │   │       │   │   ├── functions.wp-scripts.php
│   │   │       │   │   ├── functions.wp-styles.php
│   │   │       │   │   ├── general-template.php
│   │   │       │   │   ├── http.php
│   │   │       │   │   ├── images/
│   │   │       │   │   │   └── crystal/
│   │   │       │   │   │       └── license.txt
│   │   │       │   │   ├── js/
│   │   │       │   │   │   ├── admin-bar.js
│   │   │       │   │   │   ├── autosave.js
│   │   │       │   │   │   ├── colorpicker.js
│   │   │       │   │   │   ├── comment-reply.js
│   │   │       │   │   │   ├── crop/
│   │   │       │   │   │   │   ├── cropper.css
│   │   │       │   │   │   │   └── cropper.js
│   │   │       │   │   │   ├── customize-base.js
│   │   │       │   │   │   ├── customize-loader.js
│   │   │       │   │   │   ├── customize-models.js
│   │   │       │   │   │   ├── customize-preview-nav-menus.js
│   │   │       │   │   │   ├── customize-preview-widgets.js
│   │   │       │   │   │   ├── customize-preview.js
│   │   │       │   │   │   ├── customize-views.js
│   │   │       │   │   │   ├── heartbeat.js
│   │   │       │   │   │   ├── hoverIntent.js
│   │   │       │   │   │   ├── imgareaselect/
│   │   │       │   │   │   │   ├── imgareaselect.css
│   │   │       │   │   │   │   └── jquery.imgareaselect.js
│   │   │       │   │   │   ├── jquery/
│   │   │       │   │   │   │   ├── jquery-migrate.js
│   │   │       │   │   │   │   ├── jquery.form.js
│   │   │       │   │   │   │   ├── jquery.hotkeys.js
│   │   │       │   │   │   │   ├── jquery.js
│   │   │       │   │   │   │   ├── jquery.query.js
│   │   │       │   │   │   │   ├── jquery.schedule.js
│   │   │       │   │   │   │   ├── jquery.serialize-object.js
│   │   │       │   │   │   │   ├── jquery.table-hotkeys.js
│   │   │       │   │   │   │   ├── jquery.ui.touch-punch.js
│   │   │       │   │   │   │   └── suggest.js
│   │   │       │   │   │   ├── json2.js
│   │   │       │   │   │   ├── mce-view.js
│   │   │       │   │   │   ├── media-audiovideo.js
│   │   │       │   │   │   ├── media-editor.js
│   │   │       │   │   │   ├── media-grid.js
│   │   │       │   │   │   ├── media-models.js
│   │   │       │   │   │   ├── media-views.js
│   │   │       │   │   │   ├── mediaelement/
│   │   │       │   │   │   │   ├── flashmediaelement.swf
│   │   │       │   │   │   │   ├── silverlightmediaelement.xap
│   │   │       │   │   │   │   ├── wp-mediaelement.css
│   │   │       │   │   │   │   ├── wp-mediaelement.js
│   │   │       │   │   │   │   └── wp-playlist.js
│   │   │       │   │   │   ├── plupload/
│   │   │       │   │   │   │   ├── handlers.js
│   │   │       │   │   │   │   ├── license.txt
│   │   │       │   │   │   │   ├── plupload.flash.swf
│   │   │       │   │   │   │   ├── plupload.silverlight.xap
│   │   │       │   │   │   │   └── wp-plupload.js
│   │   │       │   │   │   ├── quicktags.js
│   │   │       │   │   │   ├── shortcode.js
│   │   │       │   │   │   ├── swfobject.js
│   │   │       │   │   │   ├── swfupload/
│   │   │       │   │   │   │   ├── handlers.js
│   │   │       │   │   │   │   ├── license.txt
│   │   │       │   │   │   │   ├── plugins/
│   │   │       │   │   │   │   │   ├── swfupload.cookies.js
│   │   │       │   │   │   │   │   ├── swfupload.queue.js
│   │   │       │   │   │   │   │   ├── swfupload.speed.js
│   │   │       │   │   │   │   │   └── swfupload.swfobject.js
│   │   │       │   │   │   │   ├── swfupload.js
│   │   │       │   │   │   │   └── swfupload.swf
│   │   │       │   │   │   ├── thickbox/
│   │   │       │   │   │   │   ├── thickbox.css
│   │   │       │   │   │   │   └── thickbox.js
│   │   │       │   │   │   ├── tinymce/
│   │   │       │   │   │   │   ├── langs/
│   │   │       │   │   │   │   │   └── wp-langs-en.js
│   │   │       │   │   │   │   ├── license.txt
│   │   │       │   │   │   │   ├── plugins/
│   │   │       │   │   │   │   │   ├── charmap/
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── colorpicker/
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── compat3x/
│   │   │       │   │   │   │   │   │   ├── css/
│   │   │       │   │   │   │   │   │   │   └── dialog.css
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── directionality/
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── fullscreen/
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── hr/
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── image/
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── lists/
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── media/
│   │   │       │   │   │   │   │   │   ├── moxieplayer.swf
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── paste/
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── tabfocus/
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── textcolor/
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── wordpress/
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── wpautoresize/
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── wpdialogs/
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── wpeditimage/
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── wpembed/
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── wpemoji/
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── wpgallery/
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── wplink/
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── wptextpattern/
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   └── wpview/
│   │   │       │   │   │   │   │       └── plugin.js
│   │   │       │   │   │   │   ├── skins/
│   │   │       │   │   │   │   │   ├── lightgray/
│   │   │       │   │   │   │   │   │   └── fonts/
│   │   │       │   │   │   │   │   │       └── readme.md
│   │   │       │   │   │   │   │   └── wordpress/
│   │   │       │   │   │   │   │       └── wp-content.css
│   │   │       │   │   │   │   ├── themes/
│   │   │       │   │   │   │   │   └── modern/
│   │   │       │   │   │   │   │       └── theme.js
│   │   │       │   │   │   │   ├── tiny_mce_popup.js
│   │   │       │   │   │   │   ├── utils/
│   │   │       │   │   │   │   │   ├── editable_selects.js
│   │   │       │   │   │   │   │   ├── form_utils.js
│   │   │       │   │   │   │   │   ├── mctabs.js
│   │   │       │   │   │   │   │   └── validate.js
│   │   │       │   │   │   │   └── wp-tinymce.php
│   │   │       │   │   │   ├── tw-sack.js
│   │   │       │   │   │   ├── twemoji.js
│   │   │       │   │   │   ├── utils.js
│   │   │       │   │   │   ├── wp-a11y.js
│   │   │       │   │   │   ├── wp-ajax-response.js
│   │   │       │   │   │   ├── wp-auth-check.js
│   │   │       │   │   │   ├── wp-backbone.js
│   │   │       │   │   │   ├── wp-embed-template.js
│   │   │       │   │   │   ├── wp-embed.js
│   │   │       │   │   │   ├── wp-emoji-loader.js
│   │   │       │   │   │   ├── wp-emoji.js
│   │   │       │   │   │   ├── wp-list-revisions.js
│   │   │       │   │   │   ├── wp-lists.js
│   │   │       │   │   │   ├── wp-pointer.js
│   │   │       │   │   │   ├── wp-util.js
│   │   │       │   │   │   ├── wpdialog.js
│   │   │       │   │   │   ├── wplink.js
│   │   │       │   │   │   └── zxcvbn-async.js
│   │   │       │   │   ├── kses.php
│   │   │       │   │   ├── l10n.php
│   │   │       │   │   ├── link-template.php
│   │   │       │   │   ├── load.php
│   │   │       │   │   ├── locale.php
│   │   │       │   │   ├── media-template.php
│   │   │       │   │   ├── media.php
│   │   │       │   │   ├── meta.php
│   │   │       │   │   ├── ms-blogs.php
│   │   │       │   │   ├── ms-default-constants.php
│   │   │       │   │   ├── ms-default-filters.php
│   │   │       │   │   ├── ms-deprecated.php
│   │   │       │   │   ├── ms-files.php
│   │   │       │   │   ├── ms-functions.php
│   │   │       │   │   ├── ms-load.php
│   │   │       │   │   ├── ms-settings.php
│   │   │       │   │   ├── nav-menu-template.php
│   │   │       │   │   ├── nav-menu.php
│   │   │       │   │   ├── option.php
│   │   │       │   │   ├── pluggable-deprecated.php
│   │   │       │   │   ├── pluggable.php
│   │   │       │   │   ├── plugin.php
│   │   │       │   │   ├── pomo/
│   │   │       │   │   │   ├── entry.php
│   │   │       │   │   │   ├── mo.php
│   │   │       │   │   │   ├── po.php
│   │   │       │   │   │   ├── streams.php
│   │   │       │   │   │   └── translations.php
│   │   │       │   │   ├── post-formats.php
│   │   │       │   │   ├── post-template.php
│   │   │       │   │   ├── post-thumbnail-template.php
│   │   │       │   │   ├── post.php
│   │   │       │   │   ├── query.php
│   │   │       │   │   ├── random_compat/
│   │   │       │   │   │   ├── byte_safe_strings.php
│   │   │       │   │   │   ├── cast_to_int.php
│   │   │       │   │   │   ├── error_polyfill.php
│   │   │       │   │   │   ├── random.php
│   │   │       │   │   │   ├── random_bytes_com_dotnet.php
│   │   │       │   │   │   ├── random_bytes_dev_urandom.php
│   │   │       │   │   │   ├── random_bytes_libsodium.php
│   │   │       │   │   │   ├── random_bytes_mcrypt.php
│   │   │       │   │   │   ├── random_bytes_openssl.php
│   │   │       │   │   │   └── random_int.php
│   │   │       │   │   ├── registration-functions.php
│   │   │       │   │   ├── registration.php
│   │   │       │   │   ├── rest-api/
│   │   │       │   │   │   ├── class-wp-rest-request.php
│   │   │       │   │   │   ├── class-wp-rest-response.php
│   │   │       │   │   │   └── class-wp-rest-server.php
│   │   │       │   │   ├── rest-api.php
│   │   │       │   │   ├── revision.php
│   │   │       │   │   ├── rewrite.php
│   │   │       │   │   ├── rss-functions.php
│   │   │       │   │   ├── rss.php
│   │   │       │   │   ├── script-loader.php
│   │   │       │   │   ├── session.php
│   │   │       │   │   ├── shortcodes.php
│   │   │       │   │   ├── taxonomy.php
│   │   │       │   │   ├── template-loader.php
│   │   │       │   │   ├── template.php
│   │   │       │   │   ├── theme-compat/
│   │   │       │   │   │   ├── comments-popup.php
│   │   │       │   │   │   ├── comments.php
│   │   │       │   │   │   ├── footer.php
│   │   │       │   │   │   ├── header.php
│   │   │       │   │   │   └── sidebar.php
│   │   │       │   │   ├── theme.php
│   │   │       │   │   ├── update.php
│   │   │       │   │   ├── user.php
│   │   │       │   │   ├── vars.php
│   │   │       │   │   ├── version.php
│   │   │       │   │   ├── widgets/
│   │   │       │   │   │   ├── class-wp-nav-menu-widget.php
│   │   │       │   │   │   ├── class-wp-widget-archives.php
│   │   │       │   │   │   ├── class-wp-widget-calendar.php
│   │   │       │   │   │   ├── class-wp-widget-categories.php
│   │   │       │   │   │   ├── class-wp-widget-links.php
│   │   │       │   │   │   ├── class-wp-widget-meta.php
│   │   │       │   │   │   ├── class-wp-widget-pages.php
│   │   │       │   │   │   ├── class-wp-widget-recent-comments.php
│   │   │       │   │   │   ├── class-wp-widget-recent-posts.php
│   │   │       │   │   │   ├── class-wp-widget-rss.php
│   │   │       │   │   │   ├── class-wp-widget-search.php
│   │   │       │   │   │   ├── class-wp-widget-tag-cloud.php
│   │   │       │   │   │   └── class-wp-widget-text.php
│   │   │       │   │   ├── widgets.php
│   │   │       │   │   ├── wlwmanifest.xml
│   │   │       │   │   ├── wp-db.php
│   │   │       │   │   └── wp-diff.php
│   │   │       │   ├── wp-links-opml.php
│   │   │       │   ├── wp-load.php
│   │   │       │   ├── wp-login.php
│   │   │       │   ├── wp-mail.php
│   │   │       │   ├── wp-settings.php
│   │   │       │   ├── wp-signup.php
│   │   │       │   ├── wp-trackback.php
│   │   │       │   └── xmlrpc.php
│   │   │       ├── php.ini
│   │   │       ├── wparmor
│   │   │       └── zues/
│   │   │           ├── LICENSE
│   │   │           ├── archive.php
│   │   │           ├── assets/
│   │   │           │   └── js/
│   │   │           │       ├── customizer.js
│   │   │           │       └── scripts.js
│   │   │           ├── comments.php
│   │   │           ├── functions.php
│   │   │           ├── index.php
│   │   │           ├── page-templates/
│   │   │           │   └── full-width.php
│   │   │           ├── readme.txt
│   │   │           ├── rtl.css
│   │   │           ├── search.php
│   │   │           ├── singular.php
│   │   │           ├── style.css
│   │   │           ├── template-parts/
│   │   │           │   ├── footers/
│   │   │           │   │   └── footer-example.php
│   │   │           │   ├── headers/
│   │   │           │   │   └── header-example.php
│   │   │           │   └── sidebars/
│   │   │           │       └── sidebar.php
│   │   │           └── zues-framework/
│   │   │               ├── assets/
│   │   │               │   ├── css/
│   │   │               │   │   ├── base.css
│   │   │               │   │   ├── font-awesome.css
│   │   │               │   │   ├── grid.css
│   │   │               │   │   └── normalize.css
│   │   │               │   ├── fonts/
│   │   │               │   │   └── FontAwesome.otf
│   │   │               │   └── js/
│   │   │               │       ├── superfish.js
│   │   │               │       └── tinynav.js
│   │   │               ├── classes/
│   │   │               │   └── class-admin-notices.php
│   │   │               ├── functions/
│   │   │               │   ├── attr.php
│   │   │               │   ├── generate-css.php
│   │   │               │   ├── helpers.php
│   │   │               │   ├── template-tags.php
│   │   │               │   ├── templates.php
│   │   │               │   └── widget-areas.php
│   │   │               ├── init.php
│   │   │               ├── libraries/
│   │   │               │   ├── TGMPA/
│   │   │               │   │   └── class-tgm-plugin-activation.php
│   │   │               │   └── customizer/
│   │   │               │       ├── README.md
│   │   │               │       ├── custom-controls/
│   │   │               │       │   ├── content.php
│   │   │               │       │   └── textarea.php
│   │   │               │       ├── customizer-library.php
│   │   │               │       ├── extensions/
│   │   │               │       │   ├── fonts.php
│   │   │               │       │   ├── interface.php
│   │   │               │       │   ├── preview.php
│   │   │               │       │   ├── sanitization.php
│   │   │               │       │   ├── style-builder.php
│   │   │               │       │   └── utilities.php
│   │   │               │       └── js/
│   │   │               │           └── customizer.js
│   │   │               └── structure/
│   │   │                   ├── comments.php
│   │   │                   ├── filters.php
│   │   │                   ├── footer.php
│   │   │                   ├── general.php
│   │   │                   ├── header.php
│   │   │                   ├── hooks.php
│   │   │                   ├── page.php
│   │   │                   ├── post.php
│   │   │                   ├── primary-nav.php
│   │   │                   ├── sidebar.php
│   │   │                   ├── template-parts/
│   │   │                   │   ├── archive-header.php
│   │   │                   │   ├── comment.php
│   │   │                   │   ├── comments-nav.php
│   │   │                   │   ├── content-none.php
│   │   │                   │   ├── footer.php
│   │   │                   │   ├── head.php
│   │   │                   │   ├── header.php
│   │   │                   │   ├── primary-nav.php
│   │   │                   │   └── search-header.php
│   │   │                   └── wrapper.php
│   │   ├── capabilities/
│   │   │   └── README.md
│   │   ├── cgroups/
│   │   │   ├── README.md
│   │   │   └── cpu-stress/
│   │   │       ├── Dockerfile
│   │   │       └── docker-compose.yml
│   │   ├── networking/
│   │   │   └── README.md
│   │   ├── scanning/
│   │   │   └── README.md
│   │   ├── seccomp/
│   │   │   ├── README.md
│   │   │   └── seccomp-profiles/
│   │   │       ├── allow.json
│   │   │       ├── default-no-chmod.json
│   │   │       ├── default.json
│   │   │       └── deny.json
│   │   ├── secrets/
│   │   │   └── README.md
│   │   ├── secrets-ddc/
│   │   │   └── README.md
│   │   ├── swarm/
│   │   │   └── README.md
│   │   ├── trust/
│   │   │   └── README.md
│   │   ├── trust-basics/
│   │   │   └── README.md
│   │   └── userns/
│   │       └── README.md
│   └── swarm-mode/
│       ├── README.md
│       └── beginner-tutorial/
│           ├── README.md
│           ├── swarm-node-hyperv-setup.ps1
│           ├── swarm-node-hyperv-teardown.ps1
│           ├── swarm-node-vbox-setup.sh
│           └── swarm-node-vbox-teardown.sh
├── DockerCon/
│   ├── logging/
│   │   ├── getting-started.md
│   │   ├── log-drivers.md
│   │   └── setup.md
│   ├── monitoring/
│   │   ├── cadvisor.md
│   │   ├── monitoring-stack.md
│   │   └── stats.md
│   ├── readme.md
│   └── resources/
│       └── links.md
├── Kubernetes/
│   ├── README.md
│   ├── additional-ressources/
│   │   ├── README.md
│   │   └── kops-howto.md
│   ├── helm/
│   │   └── quickstart-helm.md
│   ├── jumpstart-downloadtools.md
│   ├── kickstart/
│   │   └── README.md
│   ├── minikube/
│   │   └── minikube-quickstart.md
│   └── third-party-coscale/
│       └── quickstart-coscale.md
├── LICENSE
├── README.md
├── _config.yml
├── contribute.md
└── istio-workshop/
    ├── .gitignore
    ├── 1_envoy/
    │   ├── 1_run_httpbin.sh
    │   ├── 2_curl_httpbin.sh
    │   ├── 3_envoyconfig.yaml
    │   ├── 3_run_envoy.sh
    │   ├── 4_run_envoy_retries.sh
    │   ├── 4_run_envoy_retries.yaml
    │   ├── 5_query_thru_envoy.sh
    │   ├── 6_fault_injection.sh
    │   └── 7_metrics.sh
    ├── 2_istio/
    │   ├── 1_crds.sh
    │   ├── 1_crds.yaml
    │   ├── 2_gen_install_yaml.sh
    │   ├── 3_install_istio.sh
    │   ├── 4_open_addons.sh
    │   ├── 99_remove.sh
    │   ├── charts_1.0.2/
    │   │   ├── Chart.yaml
    │   │   ├── README.md
    │   │   ├── charts/
    │   │   │   ├── certmanager/
    │   │   │   │   ├── Chart.yaml
    │   │   │   │   └── templates/
    │   │   │   │       ├── _helpers.tpl
    │   │   │   │       ├── crds.yaml
    │   │   │   │       ├── deployment.yaml
    │   │   │   │       ├── issuer.yaml
    │   │   │   │       ├── rbac.yaml
    │   │   │   │       └── serviceaccount.yaml
    │   │   │   ├── galley/
    │   │   │   │   ├── Chart.yaml
    │   │   │   │   └── templates/
    │   │   │   │       ├── _helpers.tpl
    │   │   │   │       ├── clusterrole.yaml
    │   │   │   │       ├── clusterrolebinding.yaml
    │   │   │   │       ├── configmap.yaml
    │   │   │   │       ├── deployment.yaml
    │   │   │   │       ├── service.yaml
    │   │   │   │       ├── serviceaccount.yaml
    │   │   │   │       └── validatingwehookconfiguration.yaml.tpl
    │   │   │   ├── gateways/
    │   │   │   │   ├── Chart.yaml
    │   │   │   │   └── templates/
    │   │   │   │       ├── autoscale.yaml
    │   │   │   │       ├── clusterrole.yaml
    │   │   │   │       ├── clusterrolebindings.yaml
    │   │   │   │       ├── deployment.yaml
    │   │   │   │       ├── service.yaml
    │   │   │   │       └── serviceaccount.yaml
    │   │   │   ├── grafana/
    │   │   │   │   ├── Chart.yaml
    │   │   │   │   └── templates/
    │   │   │   │       ├── _helpers.tpl
    │   │   │   │       ├── configmap.yaml
    │   │   │   │       ├── create-custom-resources-job.yaml
    │   │   │   │       ├── deployment.yaml
    │   │   │   │       ├── grafana-ports-mtls.yaml
    │   │   │   │       ├── pvc.yaml
    │   │   │   │       ├── secret.yaml
    │   │   │   │       └── service.yaml
    │   │   │   ├── ingress/
    │   │   │   │   ├── Chart.yaml
    │   │   │   │   └── templates/
    │   │   │   │       ├── autoscale.yaml
    │   │   │   │       ├── clusterrole.yaml
    │   │   │   │       ├── clusterrolebinding.yaml
    │   │   │   │       ├── deployment.yaml
    │   │   │   │       ├── service.yaml
    │   │   │   │       └── serviceaccount.yaml
    │   │   │   ├── kiali/
    │   │   │   │   ├── Chart.yaml
    │   │   │   │   └── templates/
    │   │   │   │       ├── clusterrole.yaml
    │   │   │   │       ├── clusterrolebinding.yaml
    │   │   │   │       ├── configmap.yaml
    │   │   │   │       ├── deployment.yaml
    │   │   │   │       ├── ingress.yaml
    │   │   │   │       ├── secrets.yaml
    │   │   │   │       ├── service.yaml
    │   │   │   │       └── serviceaccount.yaml
    │   │   │   ├── mixer/
    │   │   │   │   ├── Chart.yaml
    │   │   │   │   └── templates/
    │   │   │   │       ├── _helpers.tpl
    │   │   │   │       ├── autoscale.yaml
    │   │   │   │       ├── clusterrole.yaml
    │   │   │   │       ├── clusterrolebinding.yaml
    │   │   │   │       ├── config.yaml
    │   │   │   │       ├── configmap.yaml
    │   │   │   │       ├── deployment.yaml
    │   │   │   │       ├── service.yaml
    │   │   │   │       ├── serviceaccount.yaml
    │   │   │   │       └── statsdtoprom.yaml
    │   │   │   ├── pilot/
    │   │   │   │   ├── Chart.yaml
    │   │   │   │   └── templates/
    │   │   │   │       ├── autoscale.yaml
    │   │   │   │       ├── clusterrole.yaml
    │   │   │   │       ├── clusterrolebinding.yaml
    │   │   │   │       ├── deployment.yaml
    │   │   │   │       ├── gateway.yaml
    │   │   │   │       ├── meshexpansion.yaml
    │   │   │   │       ├── service.yaml
    │   │   │   │       └── serviceaccount.yaml
    │   │   │   ├── prometheus/
    │   │   │   │   ├── Chart.yaml
    │   │   │   │   └── templates/
    │   │   │   │       ├── _helpers.tpl
    │   │   │   │       ├── clusterrole.yaml
    │   │   │   │       ├── clusterrolebindings.yaml
    │   │   │   │       ├── configmap.yaml
    │   │   │   │       ├── deployment.yaml
    │   │   │   │       ├── service.yaml
    │   │   │   │       └── serviceaccount.yaml
    │   │   │   ├── security/
    │   │   │   │   ├── Chart.yaml
    │   │   │   │   └── templates/
    │   │   │   │       ├── _helpers.tpl
    │   │   │   │       ├── cleanup-secrets.yaml
    │   │   │   │       ├── clusterrole.yaml
    │   │   │   │       ├── clusterrolebinding.yaml
    │   │   │   │       ├── configmap.yaml
    │   │   │   │       ├── create-custom-resources-job.yaml
    │   │   │   │       ├── deployment.yaml
    │   │   │   │       ├── enable-mesh-mtls.yaml
    │   │   │   │       ├── meshexpansion.yaml
    │   │   │   │       ├── service.yaml
    │   │   │   │       └── serviceaccount.yaml
    │   │   │   ├── servicegraph/
    │   │   │   │   ├── Chart.yaml
    │   │   │   │   └── templates/
    │   │   │   │       ├── _helpers.tpl
    │   │   │   │       ├── deployment.yaml
    │   │   │   │       ├── ingress.yaml
    │   │   │   │       └── service.yaml
    │   │   │   ├── sidecarInjectorWebhook/
    │   │   │   │   ├── Chart.yaml
    │   │   │   │   └── templates/
    │   │   │   │       ├── _helpers.tpl
    │   │   │   │       ├── clusterrole.yaml
    │   │   │   │       ├── clusterrolebinding.yaml
    │   │   │   │       ├── deployment.yaml
    │   │   │   │       ├── mutatingwebhook.yaml
    │   │   │   │       ├── service.yaml
    │   │   │   │       └── serviceaccount.yaml
    │   │   │   ├── telemetry-gateway/
    │   │   │   │   ├── Chart.yaml
    │   │   │   │   └── templates/
    │   │   │   │       └── gateway.yaml
    │   │   │   └── tracing/
    │   │   │       ├── Chart.yaml
    │   │   │       └── templates/
    │   │   │           ├── _helpers.tpl
    │   │   │           ├── deployment.yaml
    │   │   │           ├── ingress-jaeger.yaml
    │   │   │           ├── ingress.yaml
    │   │   │           ├── service-jaeger.yaml
    │   │   │           └── service.yaml
    │   │   ├── requirements.yaml
    │   │   ├── templates/
    │   │   │   ├── _affinity.tpl
    │   │   │   ├── _helpers.tpl
    │   │   │   ├── configmap.yaml
    │   │   │   ├── crds.yaml
    │   │   │   ├── install-custom-resources.sh.tpl
    │   │   │   └── sidecar-injector-configmap.yaml
    │   │   ├── values-istio-auth-galley.yaml
    │   │   ├── values-istio-auth-multicluster.yaml
    │   │   ├── values-istio-auth.yaml
    │   │   ├── values-istio-demo-auth.yaml
    │   │   ├── values-istio-demo.yaml
    │   │   ├── values-istio-galley.yaml
    │   │   ├── values-istio-gateways.yaml
    │   │   ├── values-istio-multicluster.yaml
    │   │   ├── values-istio-one-namespace-auth.yaml
    │   │   ├── values-istio-one-namespace.yaml
    │   │   ├── values-istio.yaml
    │   │   └── values.yaml
    │   └── charts_1.0.4/
    │       ├── Chart.yaml
    │       ├── README.md
    │       ├── charts/
    │       │   ├── certmanager/
    │       │   │   ├── Chart.yaml
    │       │   │   └── templates/
    │       │   │       ├── _helpers.tpl
    │       │   │       ├── crds.yaml
    │       │   │       ├── deployment.yaml
    │       │   │       ├── issuer.yaml
    │       │   │       ├── rbac.yaml
    │       │   │       └── serviceaccount.yaml
    │       │   ├── galley/
    │       │   │   ├── Chart.yaml
    │       │   │   └── templates/
    │       │   │       ├── _helpers.tpl
    │       │   │       ├── clusterrole.yaml
    │       │   │       ├── clusterrolebinding.yaml
    │       │   │       ├── configmap.yaml
    │       │   │       ├── deployment.yaml
    │       │   │       ├── service.yaml
    │       │   │       ├── serviceaccount.yaml
    │       │   │       └── validatingwehookconfiguration.yaml.tpl
    │       │   ├── gateways/
    │       │   │   ├── Chart.yaml
    │       │   │   └── templates/
    │       │   │       ├── autoscale.yaml
    │       │   │       ├── clusterrole.yaml
    │       │   │       ├── clusterrolebindings.yaml
    │       │   │       ├── deployment.yaml
    │       │   │       ├── service.yaml
    │       │   │       └── serviceaccount.yaml
    │       │   ├── grafana/
    │       │   │   ├── Chart.yaml
    │       │   │   ├── dashboards/
    │       │   │   │   ├── galley-dashboard.json
    │       │   │   │   ├── istio-mesh-dashboard.json
    │       │   │   │   ├── istio-performance-dashboard.json
    │       │   │   │   ├── istio-service-dashboard.json
    │       │   │   │   ├── istio-workload-dashboard.json
    │       │   │   │   ├── mixer-dashboard.json
    │       │   │   │   └── pilot-dashboard.json
    │       │   │   ├── templates/
    │       │   │   │   ├── _helpers.tpl
    │       │   │   │   ├── configmap-custom-resources.yaml
    │       │   │   │   ├── configmap-dashboards.yaml
    │       │   │   │   ├── configmap.yaml
    │       │   │   │   ├── create-custom-resources-job.yaml
    │       │   │   │   ├── deployment.yaml
    │       │   │   │   ├── grafana-ports-mtls.yaml
    │       │   │   │   ├── pvc.yaml
    │       │   │   │   ├── secret.yaml
    │       │   │   │   └── service.yaml
    │       │   │   └── values.yaml
    │       │   ├── ingress/
    │       │   │   ├── Chart.yaml
    │       │   │   └── templates/
    │       │   │       ├── autoscale.yaml
    │       │   │       ├── clusterrole.yaml
    │       │   │       ├── clusterrolebinding.yaml
    │       │   │       ├── deployment.yaml
    │       │   │       ├── service.yaml
    │       │   │       └── serviceaccount.yaml
    │       │   ├── kiali/
    │       │   │   ├── Chart.yaml
    │       │   │   └── templates/
    │       │   │       ├── clusterrole.yaml
    │       │   │       ├── clusterrolebinding.yaml
    │       │   │       ├── configmap.yaml
    │       │   │       ├── deployment.yaml
    │       │   │       ├── ingress.yaml
    │       │   │       ├── secrets.yaml
    │       │   │       ├── service.yaml
    │       │   │       └── serviceaccount.yaml
    │       │   ├── mixer/
    │       │   │   ├── Chart.yaml
    │       │   │   └── templates/
    │       │   │       ├── _helpers.tpl
    │       │   │       ├── autoscale.yaml
    │       │   │       ├── clusterrole.yaml
    │       │   │       ├── clusterrolebinding.yaml
    │       │   │       ├── config.yaml
    │       │   │       ├── configmap.yaml
    │       │   │       ├── deployment.yaml
    │       │   │       ├── service.yaml
    │       │   │       └── serviceaccount.yaml
    │       │   ├── pilot/
    │       │   │   ├── Chart.yaml
    │       │   │   └── templates/
    │       │   │       ├── autoscale.yaml
    │       │   │       ├── clusterrole.yaml
    │       │   │       ├── clusterrolebinding.yaml
    │       │   │       ├── deployment.yaml
    │       │   │       ├── gateway.yaml
    │       │   │       ├── meshexpansion.yaml
    │       │   │       ├── service.yaml
    │       │   │       └── serviceaccount.yaml
    │       │   ├── prometheus/
    │       │   │   ├── Chart.yaml
    │       │   │   └── templates/
    │       │   │       ├── _helpers.tpl
    │       │   │       ├── clusterrole.yaml
    │       │   │       ├── clusterrolebindings.yaml
    │       │   │       ├── configmap.yaml
    │       │   │       ├── deployment.yaml
    │       │   │       ├── service.yaml
    │       │   │       └── serviceaccount.yaml
    │       │   ├── security/
    │       │   │   ├── Chart.yaml
    │       │   │   └── templates/
    │       │   │       ├── _helpers.tpl
    │       │   │       ├── cleanup-secrets.yaml
    │       │   │       ├── clusterrole.yaml
    │       │   │       ├── clusterrolebinding.yaml
    │       │   │       ├── configmap.yaml
    │       │   │       ├── create-custom-resources-job.yaml
    │       │   │       ├── deployment.yaml
    │       │   │       ├── enable-mesh-mtls.yaml
    │       │   │       ├── enable-mesh-permissive.yaml
    │       │   │       ├── meshexpansion.yaml
    │       │   │       ├── service.yaml
    │       │   │       └── serviceaccount.yaml
    │       │   ├── servicegraph/
    │       │   │   ├── Chart.yaml
    │       │   │   └── templates/
    │       │   │       ├── _helpers.tpl
    │       │   │       ├── deployment.yaml
    │       │   │       ├── ingress.yaml
    │       │   │       └── service.yaml
    │       │   ├── sidecarInjectorWebhook/
    │       │   │   ├── Chart.yaml
    │       │   │   └── templates/
    │       │   │       ├── _helpers.tpl
    │       │   │       ├── clusterrole.yaml
    │       │   │       ├── clusterrolebinding.yaml
    │       │   │       ├── deployment.yaml
    │       │   │       ├── mutatingwebhook.yaml
    │       │   │       ├── service.yaml
    │       │   │       └── serviceaccount.yaml
    │       │   ├── telemetry-gateway/
    │       │   │   ├── Chart.yaml
    │       │   │   └── templates/
    │       │   │       └── gateway.yaml
    │       │   └── tracing/
    │       │       ├── Chart.yaml
    │       │       └── templates/
    │       │           ├── _helpers.tpl
    │       │           ├── deployment.yaml
    │       │           ├── ingress-jaeger.yaml
    │       │           ├── ingress.yaml
    │       │           ├── service-jaeger.yaml
    │       │           └── service.yaml
    │       ├── requirements.yaml
    │       ├── templates/
    │       │   ├── _affinity.tpl
    │       │   ├── _helpers.tpl
    │       │   ├── configmap.yaml
    │       │   ├── crds.yaml
    │       │   ├── install-custom-resources.sh.tpl
    │       │   └── sidecar-injector-configmap.yaml
    │       ├── values-istio-auth-galley.yaml
    │       ├── values-istio-auth-multicluster.yaml
    │       ├── values-istio-auth.yaml
    │       ├── values-istio-demo-auth.yaml
    │       ├── values-istio-demo.yaml
    │       ├── values-istio-galley.yaml
    │       ├── values-istio-gateways.yaml
    │       ├── values-istio-multicluster.yaml
    │       ├── values-istio-one-namespace-auth.yaml
    │       ├── values-istio-one-namespace.yaml
    │       ├── values-istio.yaml
    │       └── values.yaml
    ├── 3_application/
    │   ├── 1_bookinfo-gateway.yaml
    │   ├── 1_bookinfo.yaml
    │   ├── 1_destination-rule-all-mtls.yaml
    │   ├── 1_install_bookinfo.sh
    │   └── 99_remove.sh
    ├── 4_traffic/
    │   ├── 0_generate_traffic.sh
    │   ├── 1_traffic_to_v1.sh
    │   ├── 1_virtual-service-all-v1.yaml
    │   ├── 2_jason_uses_v2.sh
    │   ├── 2_virtual-service-reviews-test-v2.yaml
    │   ├── 3_default_to_v3.sh
    │   ├── 3_virtual-service-reviews-jason-v2-v3.yaml
    │   └── 99_remove.sh
    ├── 5_chaos/
    │   ├── 1_fault-injection.sh
    │   ├── 1_virtual-service-ratings-test-delay.yaml
    │   ├── 2_gw.sh
    │   └── 3_proxy.sh
    ├── 6_webhook/
    │   ├── 1_istio-sidecar-injector.sh
    │   ├── 2_busybox-injected.sh
    │   ├── busybox-injected.yaml
    │   ├── busybox.yaml
    │   └── inject-config.yaml
    ├── 7_network_policies/
    │   ├── 1_setup.sh
    │   └── tcpdump.sh
    ├── 8_nodes/
    │   ├── iptables.sh
    │   └── proxy_init.sh
    ├── README.md
    ├── cleanup.sh
    └── slides.md

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitmodules
================================================


================================================
FILE: CNAME
================================================
training.56kcloud.io

================================================
FILE: Cloud/README.md
================================================


================================================
FILE: DevOps/README.md
================================================


================================================
FILE: DevOpsDays/readme.md
================================================
## DevOpsDays Docker Training

<img src="https://raw.githubusercontent.com/56kcloud/Training/master/img/56k.jpg" alt="56K.Cloud Logo" width="150" height="99">

Welcome to [56K.Cloud](https://www.56k.cloud) Docker Introduction Training.

This Docker tutorial consists of the following sections:

* [Docker Getting Started with Containers](https://training.play-with-docker.com/ops-s1-hello/)
* [Docker Images](https://training.play-with-docker.com/ops-s1-images/)
* [Docker Networking](https://training.play-with-docker.com/docker-networking-hol/)
* [Docker Swarm](https://training.play-with-docker.com/ops-s1-swarm-intro/)


================================================
FILE: Docker/12factor/00_application.md
================================================
# Build the application

To illustrate the 12 factors, we start by creating a simple Node.js application as a HTTP Rest API exposing CRUD verbs on a *message* model.

There is a couple of prerequisite to build this application
* [Node.js 4.4.5 (LTS)](https://nodejs.org/en/)
* [mongo 3.2](https://docs.mongodb.org/manual/installation/)

## Routes exposed

HTTP verb | URI | Action
----------| --- | ------
GET | /message | list all messages
GET | /message/ID | get message with ID
POST | /message | create a new message
PUT | /message/ID | modify message with ID
DELETE | /message/ID | delete message with ID

## Setup

* Install Sails.js (it's to Node.js what RoR is to Ruby): `sudo npm install sails -g`
* Create the  application:  `sails new messageApp && cd messageApp`
* Launch the application: `sails lift`

## First tests

Create new messages

```
curl -XPOST http://localhost:1337/message?text=hello
curl -XPOST http://localhost:1337/message?text=hola
```

Get list of messages

```
curl http://localhost:1337/message

[
 {
   "text": "hello",
   "createdAt": "2015-11-08T13:15:15.363Z",
   "updatedAt": "2015-11-08T13:15:15.363Z",
   "id": "5638b363c5cd0825511690bd"
 },
 {
   "text": "hola",
   "createdAt": "2015-11-08T13:15:45.774Z",
   "updatedAt": "2015-11-08T13:15:45.774Z",
   "id": "5638b381c5cd0825511690be"
 }
]
```

Modify a message

```
curl -XPUT http://localhost:1337/message/5638b363c5cd0825511690bd?text=hey
```

Delete a message

 ```
 curl -XDELETE http://localhost:1337/message/5638b381c5cd0825511690be
 ```

Get updates list of messages

```
curl http://localhost:1337/message

[
 {
   "text": "hey",
   "createdAt": "2015-11-08T13:15:15.363Z",
   "updatedAt": "2015-11-08T13:19:40.179Z",
   "id": "5638b363c5cd0825511690bd"
 }
]
```

[Next](01_codebase.md)


================================================
FILE: Docker/12factor/01_codebase.md
================================================
# 1 - Codebase

**one application <=> one codebase**

If there are several codebase, it's not an application, it's a distributed system containing multiple applications.

One codebase used for several deployments of the application
* development
* staging
* production

## What does that mean for our application ?

We will use Git versioning system (could have chosen subversion, ...) to handle our source code.

* Create a repo on [Github](https://github.com)
* Put the code under git

```
$ echo "# messageApp" >> README.md
$ git init
$ git add .
$ git commit -m 'First commit'
$ git remote add origin git@github.com:GITUSER/messageApp.git
$ git push origin master
```

The update we've done is not linked with Docker, but we'll see in a next chapter that this will greatly help the integration of several components of the Docker ecosystem.

[Previous](00_application.md) - [Next](02_dependencies.md)


================================================
FILE: Docker/12factor/02_dependencies.md
================================================
# 2 - Dependencies

Application's dependencies must be declared and isolated

## What does that mean for our application ?

Declaration are done in package.json file.

Let's add sails-mongo (mongodb driver) as we'll need it very quicky

`npm install sails-mongo --save`

The package.json file should look like the following:

```
{
  "name": "messageApp",
  "private": true,
  "version": "0.0.0",
  "description": "a Sails application",
  "keywords": [],
  "dependencies": {
    "ejs": "2.3.4",
    "grunt": "0.4.5",
    "grunt-contrib-clean": "0.6.0",
    "grunt-contrib-coffee": "0.13.0",
    "grunt-contrib-concat": "0.5.1",
    "grunt-contrib-copy": "0.5.0",
    "grunt-contrib-cssmin": "0.9.0",
    "grunt-contrib-jst": "0.6.0",
    "grunt-contrib-less": "1.1.0",
    "grunt-contrib-uglify": "0.7.0",
    "grunt-contrib-watch": "0.5.3",
    "grunt-sails-linker": "~0.10.1",
    "grunt-sync": "0.2.4",
    "include-all": "~0.1.6",
    "rc": "1.0.1",
    "sails": "~0.12.3",
    "sails-disk": "~0.10.9",
    "sails-mongo": "^0.12.0"  // Newly added dependency
  },
  "scripts": {
    "debug": "node debug app.js",
    "start": "node app.js"
  },
  "main": "app.js",
  "repository": {
    "type": "git",
    "url": "git://github.com/GITUSER/messageApp.git"
  },
  "author": "AUTHOR",
  "license": ""
}
```

Dependencies are isolated within _node-modules_ folder where all the [npm](https://npmjs.org) libraries are compiled and installed.

```
$ ls node_modules/
ejs                  grunt-contrib-coffee grunt-contrib-cssmin grunt-contrib-uglify grunt-sync           sails
grunt                grunt-contrib-concat grunt-contrib-jst    grunt-contrib-watch  include-all          sails-disk
grunt-contrib-clean  grunt-contrib-copy   grunt-contrib-less   grunt-sails-linker   rc                   sails-mongo
```

[Previous](01_codebase.md) - [Next](03_configuration.md)


================================================
FILE: Docker/12factor/03_configuration.md
================================================
# 3 - Configuration

Configuration (credentials, database connection string, ...) should be stored in the environment.

## What does that mean for our application ?

In _config/connections.js_, we define the _mongo_ connection and use MONGO_URL environment variable to pass the mongo connection string.

```node
module.exports.connections = {
  mongo: {
    adapter: 'sails-mongo',
    url: process.env.MONGO_URL
  }
};
```

In _config/model.js_, we make sure the _mongo_ connection defined above is the one used.

```node
module.exports.models = {
  connection: 'mongo',
  migrate: 'safe'
};
```

Those changes enable to provide a different _MONGO_URL_ very easily as it's defined in the environment.

[Previous](02_dependencies.md) - [Next ](04_external_services.md)


================================================
FILE: Docker/12factor/04_external_services.md
================================================
# 4 - External services

Handle external services as external resources of the application.

Examples:
* database
* log services
* ...

This ensure the application is loosely coupled with the services so it can easily switch provider or instance if needed

## What does that mean for our application ?

At this point, the only external service the application is using is MongoDB database. The loose coupling is already done by the MONGO_URL used to pass the connection string.

If something wrong happens with our instance of MongoDB (assuming a single instance is used, which is generally a bad idea...), we can easily switch to a new instance, providing a new MONGO_URL environment variable and restarting the application.

[Previous](03_configuration.md) - [Next](05_build_release_run.md)


================================================
FILE: Docker/12factor/05_build_release_run.md
================================================
# 5 - Build / Release / Run

Build / Release and Run phases must be kept separated

![Build/Release/Run](https://dl.dropboxusercontent.com/u/2330187/docker/labs/12factor/build_release_run.png)

A release is deployed on the execution environment and must be immutable.

## What does that mean for our application ?

We'll use Docker in the whole development pipeline. We will start by adding a Dockerfile that will help define the build phase (during which the dependencies are compiled in _node-modules_ folder)

```
FROM node:4.4.5
ENV LAST_UPDATED 20160617T185400

# Copy source code
COPY . /app

# Change working directory
WORKDIR /app

# Install dependencies
RUN npm install

# Expose API port to the outside
ENV PORT 80
EXPOSE 80

# Launch application
CMD ["npm","start"]
```

Let's build our application `$ docker build -t message-app:v0.1 .`

And verify the resulting image is in the list of available images

```
$ docker images
REPOSITORY        TAG           IMAGE ID           CREATED             SIZE
message-app       v0.1          f35464cf4b0b       2 seconds ago       769 MB
```

Now the image (build) is available, execution environment must be injected to create a release.

There are several options to inject the configuration in the build, among them
* create a new image based on the build
* define a Compose file

We'll go for the second option and define a docker-compose file where the MONGO_URL will be set with the value of the execution environment

```
version: '3'
services:
  mongo:
    image: mongo:3.2
    volumes:
      - mongo-data:/data/db
    expose:
      - "27017"
  app:
    image: message-app:v0.1
    ports:
      - "8000:80"
    links:
      - mongo
    depends_on:
      - mongo
    environment:
      - MONGO_URL=mongodb://mongo/messageApp
volumes:
  mongo-data:
```

This file defines a release as it considers a given build and inject the execution environment.

The run phase can be done manually with Compose CLI or through an orchestrator (Docker Cloud).

Compose CLI enables to run the global application as simple as `docker-compose up -d`

[Previous](04_external_services.md) - [Next](06_processes.md)


================================================
FILE: Docker/12factor/06_processes.md
================================================
# 6 - Processes

An application is made up of several processes.

Each process must be stateless and must not have local storage (sessions, ...).

This is required
* for scalability
* fault tolerance (crashes, ...)

The data that need to be persisted, must be saved in a stateful resources (Database, shared filesystem, ...)

Eg: sessions can easily be saved in a Redis kv store

Note: Sticky session violate 12 factor.

## What does that mean for our application ?

In _config/sessions.js_, we need to modify the adapter to store session in a distributed Redis kv store (MongoDB is another possible option).

```
module.exports.session = {
  ...
  adapter: 'redis',
  host: process.env.REDIS_HOST || 'localhost',
  ...
};
```

Once done, the app needs to be rebuilt `docker build -t message-app:v0.2 .`

**REDIS_HOST** needs to be added to the docker-compose file as the new release will run against this kv store.

```
version: '3'
services:
  mongo:
    image: mongo:3.2
    volumes:
      - mongo-data:/data/db
    expose:
      - "27017"
  kv:
    image: redis:alpine
    volumes:
      - redis-data:/data
    expose:
      - "6379"
  app:
    image: message-app:v0.2 # New version taking into account REDIS_URL
    ports:
      - "8000:80"
    links:
      - mongo
    depends_on:
      - mongo
    environment:
      - MONGO_URL=mongodb://mongo/messageApp
      - REDIS_URL=redis
volumes:
  mongo-data:
  redis-data:
```

[Previous](05_build_release_run.md) - [Next](07_port_binding.md)


================================================
FILE: Docker/12factor/07_port_binding.md
================================================
# 7 - Port binding

This factor is related to the exposition of the application to the outside.

To be compliant with 12 factor, an app must use specialized dependencies (such as http server, ...) and exposes its service through a port.

The host has the responsibility to route the request to the correct application through port mapping.

## What does that mean for our application ?

Docker already handles that for us, as we can see in the docker-compose file. The **app** container exposes port 80 internally and the host maps it against its port 8000.

```
version: '3'
services:
  mongo:
    image: mongo:3.2
    volumes:
      - mongo-data:/data/db
    expose:
      - "27017"
  kv:
    image: redis:alpine
    volumes:
      - redis-data:/data
    expose:
      - "6379"
  app:
    image: message-app:v0.2 # New version taking into account REDIS_URL
    ports:
      - "8000:80"     // app service is exposed on the port 8000 of the host
    links:
      - mongo
    depends_on:
      - mongo
    environment:
      - MONGO_URL=mongodb://mongo/messageApp
      - REDIS_URL=redis
volumes:
  mongo-data:
  redis-data:
```

If several instances of the app services needs to be deployed, the configuration above cannot be used as a given port on the host cannot map several ports in the containers.

In this case, we can use a load balancer to which the host will map a port. The load balancer will then be in charge to balance the traffic on the different instances of the services. 

[Previous](06_processes.md) - [Next](08_concurrency.md)


================================================
FILE: Docker/12factor/08_concurrency.md
================================================
# 8 - Concurrency

Horizontal scalability with the processes model.

The app can be seen as a set of processes of different types
* web server
* worker
* cron

Each process needs to be able to scale horizontally, it can have its own internal multiplexing.

## What does that mean for our application ?

The messageApp only have one type of process (http server), it's doing the multiplexing using Node.js http server.

This process can be easily scalable (stateless process).

[Previous](07_port_binding.md) - [Next](09_disposability.md)


================================================
FILE: Docker/12factor/09_disposability.md
================================================
# 9 - Disposability

Each process of an application must be disposable.

* it must have a quick startup
  * ease the horizontal scalability
* it must ensure a clean shutdown
  * stop listening on the port
  * finish to handle the current request
  * usage of a queueing system for long lasting (worker type) process

## What does that mean for our application ?

Our application exposes HTTP endPoints that are easy and quick to handle. If we were to have some long lasting worker processes, the usage of a queueing system, like Apache Kafka, would be a great choice.

Kafka stores indexes of events processed by each worker. When a worker is restared, it can provide an index indicating at which point in time it needs to restart the event handling. Doing so no events are lost.

[Docker Store](https://store.docker.com) offers several image of Kafka ([Spotify](https://store.docker.com/community/images/spotify/kafka), [Wurstmeister](https://store.docker.com/community/images/wurstmeister/kafka), ...) that can easily be integrated in the docker-compose file of the application.

Below is an example of how Kafka (and zookeeper) could be added to our docker-compose file. Of course, this means the application has been slightly changed to be able to write and read to/from Kafka.


```
# Kafka message broker
zookeeper:
  image: wurstmeister/zookeeper
  ports:
    - "2181:2181"
kafka:
  image: wurstmeister/kafka
  ports:
    - "9092:9092"
  links:
    - zookeeper:zk
  environment:
    KAFKA_ADVERTISED_HOST_NAME: 192.168.99.100
    KAFKA_CREATE_TOPICS: "DATA:1:1"
  volumes:
    - /var/run/docker.sock:/var/run/docker.sock
```

[Previous](08_concurrency.md) - [Next](10_dev_prod_parity.md)


================================================
FILE: Docker/12factor/10_dev_prod_parity.md
================================================
# 10 - Dev / Prod parity

The different environments must be as close as possible.

Docker is very good at reducing the gap as the same services can be deployed on the developer machine as they could on any Docker Hosts.

A lot of external services are available on the Docker Store and can be used in an existing application. Using those components enables a developer to use Postgres in development instead of SQLite or other lighter alternative. This reduces the risk of small differences that could show up later, when the app is on production.

This factor shows an orientation toward continuous deployment, where development can go from dev to production in a very short timeframe, thus avoiding the big bang effect at each release.


## What does that mean for our application ?

The docker-compose file we built so far can be ran on the local machine or on any Docker Host. So Docker really shines at this level as it handles everything for us.

The exact same application can run on each environment.

[Previous](09_disposability.md) - [Next](11_logs.md)


================================================
FILE: Docker/12factor/11_logs.md
================================================
# 11 - Logs

Logs need to be handle as a timeseries of textual events

The application should not handle or save logs locally but must write them in stdout / stderr.

A lot of services offer a centralized log management ([Elastic Stack / ELK](https://www.elastic.co/products) , [Splunk](http://splunk.com), [Logentries](https://logentries.com), ...), and most of them are very easily integrated with Docker.

Example of Logentries dashboard:

![Logentries](https://dl.dropboxusercontent.com/u/2330187/docker/labs/12factor/logentries.png)

## What does that mean for our application ?

In order to centralize the logs, we can add a **log** service in our docker-compose file. The API token (provided by logentries) needs to be added to the service.

As we can see in the volume section, the Docker socket needs to be mounted so logentries container can retrieve each logs emitted by the running containers and send them to logentries external service.

```
log:
  command: '-t XXXXXX-XXXXX-XXXXX-XXXXX'
  image: 'logentries/docker-logentries’
  restart: always
  volumes:
    - '/var/run/docker.sock:/var/run/docker.sock'
```


[Previous](10_dev_prod_parity.md) - [Next](12_admin_processes.md)


================================================
FILE: Docker/12factor/12_admin_processes.md
================================================
# 12 - Admin processes

Admin process should be seen as a one-off process (opposed to long running processes that make up an application).

Usually used for maintenance task, though a REPL, admin process must be executed on the same release (codebase + configuration) than the application.

## What does that mean for our application ?

In the docker-compose file we could define an admin service that is ran at the same time as the application and in which we could jump (`docker exec -ti ADMIN_CONTAINER_ID bash`) to execute some admin tasks. The container is able to access all the other containers of the application (provided it belongs to the same networks)

[Previous](11_logs.md)


================================================
FILE: Docker/12factor/README.md
================================================
# 12 Factor Application

Today, a lot of applications are services deployed in the cloud, on infrastructure of cloud providers such as Amazon AWS, Google Compute Engine, DigitalOcean, Rackspace, OVH, ...

Heroku is PaaS (Platform as a Service) that relies on Amazon AWS and which makes the deployment of applications as easy as `git push heroku master` (ran from the root of your application).

With the huge number of applications deployed on Heroku, engineers of the company acquired a great knowledge of what should be done to get cloud native application.

12 factor methodology is the result of their observations. As the name states, it presents 12 principles that will help application to be cloud ready, horizontally scalable, and portable.

# Organisation of this lab

In this lab, we will start by building a simple Node.js application as an HTTP Rest API exposing CRUD (Create / Read / Update / Delete) verbs on a *message* model.

HTTP verb | URI | Action
----------| --- | ------
GET | /message | list all messages
GET | /message/ID | get message with ID
POST | /message | create a message user
PUT | /message/ID | modify message with ID
DELETE | /message/ID | delete message with ID

We will then follow each one of the 12 factor and see how this can leverage our application. At the same time, we will see that Docker is a really great fit for several of those factors.

# Let's get started !

[Build the application](00_application.md)

[1 - Codebase](01_codebase.md)

[2 - Dependencies](02_dependencies.md)

[3 - Configuration](03_configuration.md)

[4 - External services](04_external_services.md)

[5 - Build / Release / Run](05_build_release_run.md)

[6 - Processes](06_processes.md)

[7 - Port binding](07_port_binding.md)

[8 - Concurrency](08_concurrency.md)

[9 - Disposability](09_disposability.md)

[10 - Dev / Prod parity](10_dev_prod_parity.md)

[11 - Logs](11_logs.md)

[12 - Admin processes](12_admin_processes.md)

Do not hesitate to provide comments / feedback you may have in order to improve this lab.


================================================
FILE: Docker/Docker-Orchestration/readme.md
================================================
## Advanced Docker Orchestration by Jérôme Petazzoni

- [Slides](https://jpetazzo.github.io/orchestration-workshop)
- [Orchestration Workshop](https://github.com/docker/orchestration-workshop)


## Workshop Outline

- Pre-requirements
- VM environment
- Our sample application
- Running the application
- Container port mapping
- Identifying bottlenecks
- Scaling HTTP on a single node
- Put a load balancer on it
- Connecting to containers on other hosts
- Abstracting remote services with ambassadors
- Various considerations about ambassadors
- Docker for ops
- Backups
- Starting more containers from your container
- Docker events stream
- Attaching labels
- Logs
- Storing container logs in an ELK stack
- Security upgrades
- Network traffic analysis
- Dynamic orchestration
- Hands-on Swarm
- Deploying Swarm
- Cluster discovery
- Resource allocation
- Connecting containers with ambassadors
- Setting up Consul and overlay networks
- Multi-host networking
- Building images with Swarm
- Deploying a local registry
- Scaling workers
- Distributing Machine credentials
- Highly available Swarm managers
- Highly available containers
- Conclusions


================================================
FILE: Docker/README.md
================================================
# Container, Cloud & DevOps Tutorials and Labs

<img src="../img/56k.jpg" alt="56K.Cloud Logo" width="150" height="99">

This repo contains [Docker](https://docker.com) labs and tutorials authored both by Docker and by members of the community. We welcome contributions and want to grow the repo.

#### Docker Tutorials:

- [Docker Kickstart](kickstart/readme.md)
- [Docker Training DevOpsDays](DevOpsDays/readme.md)
- [Docker Swarm Mode](swarm-mode/README.md)
- [Docker Security](security/README.md)
- [Docker Networking](networking/)

#### Additional Docker Labs

Be sure to check out the additional Docker resources section aimed at Developers.

- [Docker Additional Resources](additional-ressources/)

#### Contributing

We want to see this repo grow, so if you have a tutorial to submit or contributions to existing tutorials, please see this guide:

[Guide to submitting your tutorial](./../contribute.md)


================================================
FILE: Docker/additional-ressources/README.md
================================================
# Additional Docker Ressources

This repo contains [Docker](https://docker.com) labs and tutorials, useful links, newsletters, and general Docker ressources. We welcome contributions and want to grow the repo.

#### Useful Links

* [Awesome Docker](http://veggiemonk.github.io/awesome-docker/)
* [Docker Documentation](http://docs.docker.com)
* [Docker Labs](https://github.com/docker/labs)
* [Play-with-Docker](https://labs.play-with-docker.com)
* [More Hands-On Docker Training](http://training.play-with-docker.com/alacart/)


#### Newsletters

* [Docker Newsletter](http://email.docker.com/ZJI6a09YT0000w0vp30KLFC)
* [5 for Friday](http://brianchristner.us3.list-manage.com/track/click?u=fc0e7be4fb674995b89251efb&id=7205e15ac9&e=f62a500248)
* [The New Stack](https://thenewstack.io)
* [Sysdig](https://sysdig.com/blog)
* []

#### Useful Projects

* [Brian Christner](www.github.com/vegasbrianc/prometheus)
* [Cloud Native Foundation](https://www.cncf.io)
* [Jess Frazzle](https://github.com/jessfraz/dockerfiles)
* [Prometheus](prometheus.io)
* [Traefik Proxy](https://traefik.io)
* 


#### Docker Tutorials:
* [Configuring developer tools and programming languages](developer-tools/README.md)
  * Java
    * [Live Debugging Java with Docker](developer-tools/java-debugging)
    * [Docker for Java Developers](developer-tools/java/)
  * Node.js
    * [Live Debugging a Node.js application in Docker](developer-tools/nodejs-debugging)
    * [Dockerizing a Node.js application](developer-tools/nodejs/porting/)
* [Docker for ASP.NET and Windows containers](windows/readme.md)
* [Building a 12 Factor app with Docker](12factor/README.md)
* [Hands-on Labs from DockerCon US 2017](dockercon-us-2017/)


================================================
FILE: Docker/additional-ressources/developer-tools/README.md
================================================
# Developer Tools Tutorials

This directory contains tutorials on how to set-up and use common developer tools and programming languages with Docker. We encourage you to [contribute](../contribute.md) your own tutorials here.

## IDEs

With the introduction of [Docker for Mac](https://www.docker.com/products/docker#/mac) and [Docker for Windows](https://www.docker.com/products/docker#/windows), developers on those platforms got to use a feature that developers on [Docker for Linux](https://www.docker.com/products/docker#linux) had all along: in-container development. With improvements in volume management, Docker is able to detect when code in a volume changes, and update the code in the container. That means you get features like live debugging in a running container, without having to rebuild the container.

You can also have all your dependencies in a container. All you need is Docker and something to edit your source files on your machine, and you're good to go. That means you can, for instance, debug Node.js in your container without having Node.js on your local machine.

In order to take advantage of this feature in an IDE, there is some set-up required as there is for any project. The following sections describe how to configure different languages and IDEs to do in-container development.

### [Java Developer Tools](https://github.com/docker/labs/tree/master/developer-tools/java-debugging) including:
+ Eclipse
+ IntelliJ
+ Netbeans

### [Node.js Developer Tools](https://github.com/docker/labs/blob/master/developer-tools/nodejs-debugging/README.md) including:
+ Visual Studio Code

## Programming languages
This is a more comprehensive section detailing how to set-up and optimize your experience using Docker with particular programming languages.

+ [Java](java/)
+ [Node.js](nodejs/porting/)


================================================
FILE: Docker/additional-ressources/developer-tools/README_es.md
================================================
# Tutoriales de Herramientas de Desarrollo

Este directorio contiene tutoriales sobre como configurar y usar herramientas de desarrollo comunes con docker. Te animamos a [contribuir](../contribute.md) con tus propios tutoriales aquí.

## IDEs

Con la introducción de [Docker for Mac](https://www.docker.com/products/docker#/mac) y [Docker for Windows](https://www.docker.com/products/docker#/windows), los desarrolladores pueden ahora desarrollar dentro del contenedor de la misma manera que lo hacen los usuarios que utilizan [Docker for Linux](https://www.docker.com/products/docker#linux). Con mejoras en la administración de volúmenes, Docker permite detectar cuando el código en los volúmenes cambia, y actualizar el código en el contenedor. Esto significa que ahora es posible depurar un contenedor en vivo que se encuentra en ejecución, sin tener que reconstruir el contenedor.

### [Herramientas de Desarrollo Java](https://github.com/docker/labs/tree/master/developer-tools/java-debugging) incluye:
+ Eclipse
+ IntelliJ
+ Netbeans


================================================
FILE: Docker/additional-ressources/developer-tools/java/chapters/appa-common-commands.adoc
================================================
[appendix]
[[Common_Docker_Commands]]
== Common Docker Commands

Here is the list of commonly used Docker commands:

[width="100%", options="header"]
|==================
| Purpose| Command
2+^s| Image
| Build an image| `docker image build --rm=true .`
| Install an image | `docker image pull ${IMAGE}`
| List of installed images | `docker image ls`
| List of installed images (detailed listing) | `docker image ls --no-trunc`
| Remove an image | `docker image rm ${IMAGE_ID}`
| Remove unused images | `docker image prune`
| Remove all images | `docker image rm $(docker image ls -aq)`
2+^s| Containers
| Run a container | `docker container run`
| List of running containers | `docker container ls`
| List of all containers | `docker container ls -a`
| Stop a container | `docker container stop ${CID}`
| Stop all running containers | `docker container stop $(docker container ls -q)`
| List all exited containers with status 1 | `docker container ls -a --filter "exited=1"`
| Remove a container | `docker container rm ${CID}`
| Remove container by a regular expression | `docker container ls -a \| grep wildfly \| awk '{print $1}' \| xargs docker container rm -f`
| Remove all exited containers | `docker container rm -f $(docker container ls -a \| grep Exit \| awk '{ print $1 }')`
| Remove all containers | `docker container rm $(docker container ls -aq)`
| Find IP address of the container | `docker container inspect --format '{{ .NetworkSettings.IPAddress }}' ${CID}`
| Attach to a container | `docker container attach ${CID}`
| Open a shell in to a container | `docker container 	exec -it ${CID} bash`
| Get container id for an image by a regular expression | `docker container ls \| grep wildfly \| awk '{print $1}'`
|==================

=== Exit code status

The exit code from `docker run` gives information about why the container failed to run or why it exited. The complete list of code is listed:

https://docs.docker.com/engine/reference/run/#exit-status

All other codes are the exit code of the command running in the container.

================================================
FILE: Docker/additional-ressources/developer-tools/java/chapters/appb-troubleshooting.adoc
================================================
[appendix]
[[Troubleshooting]]

== Troubleshooting Docker

=== Network Timed Out

Depending upon the network speed and restrictions, you may not be able to download Docker images from Docker Store. The error message may look like:

```console
$ docker pull arungupta/wildfly-mysql-javaee7
Using default tag: latest
Pulling repository docker.io/arungupta/wildfly-mysql-javaee7
Network timed out while trying to connect to https://index.docker.io/v1/repositories/arungupta/wildfly-mysql-javaee7/images. You may want to check your internet connection or if you are behind a proxy.
```

This section provide a couple of alternatives to solve this.

==== Restart Docker Machine

It seems like Docker Machine gets into a strange state and restarting it fixes that.

```console
docker-machine restart <MACHINE_NAME>
eval $(docker-machine env <MACHINE_NAME>)
```

=== Cannot create Docker Machine on Windows

Are you not able to create Docker Machine on Windows?

Try starting a `cmd` with Administrator privileges and then give the command again.

=== Docker machine creation fails with an error about dial tcp: i/o timeout

If you get the following error when creating a docker machine

[source, text]
----
Error creating machine: Error in driver during machine creation: Get https://api.github.com/repos/boot2docker/boot2docker/releases: dial tcp: i/o timeout
----

Then you need to go to the boot2docker releases page on

https://github.com/boot2docker/boot2docker/releases

And download the latest .iso

After that you can move that iso to the docker cache directory. This is located in `~/.docker/machine/cache` on Mac & Linux and `/Users/yourUserName/.docker/machine/cache` on Windows.

Issue: https://github.com/docker/machine/issues/2186 is raised so that the docker-machine team can hopefully find a way around this.

=== "`You may be getting rate limited by Github`" error message

Credits: https://github.com/docker/machine/blob/master/README.md#troubleshooting

In order to `create` or `upgrade` virtual machines running Docker, Docker
Machine will check the Github API for the latest release of the [boot2docker
operating system](https://github.com/boot2docker/boot2docker).  The Github API
allows for a small number of unauthenticated requests from a given client, but
if you share an IP address with many other users (e.g. in an office), you may
get rate limited by their API, and Docker Machine will error out with messages
indicating this.

In order to work around this issue, you can https://help.github.com/articles/creating-an-access-token-for-command-line-use/[generate a
token] and pass it to Docker Machine using the global `--github-api-token` flag:

```console
$ docker-machine --github-api-token=token create -d virtualbox newbox
```

This should eliminate any issues you've been experiencing with rate limiting.

=== Docker Machine Troubleshooting

https://github.com/docker/machine/blob/master/README.md#troubleshooting[Docker Machine Troubleshooting] section has good tips on what can possibly go wrong with Docker Machine. Look there if your issue is not explained here.



================================================
FILE: Docker/additional-ressources/developer-tools/java/chapters/appc-references.adoc
================================================
[appendix]
[[References]]

== References

. Docker Docs: http://docs.docker.com
. Latest lab content: https://github.com/docker/labs/tree/master/developer-tools/java



================================================
FILE: Docker/additional-ressources/developer-tools/java/chapters/ch01-setup.adoc
================================================
:toc:

:imagesdir: images

= Setup Environments

This section describes the hardware and software needed for this workshop, and how to configure them. This workshop is designed for a BYOL (Brying Your Own Laptop) style hands-on-lab.

== Hardware & Software

. Memory: At least 4 GB+, strongly preferred 8 GB
. Operating System: Mac OS X (10.10.3+), Windows 10 Pro+ 64-bit, Ubuntu 12+, CentOS 7+.
+
NOTE: An older version of the operating system may be used. The installation instructions would differ slightly in that case and are explained in the next section.
. Amazon Web Services credentials with the https://docs.docker.com/docker-for-aws/iam-permissions/[following permissions]. This is only needed for some parts of the workshop.

== Install Docker

Docker runs natively on Mac, Windows and Linux. This lab will use https://www.docker.com/community-edition[Docker Community Edition (CE)]. Download the Docker CE edition for your machine from the https://store.docker.com/search?type=edition&offering=community[Docker Store]. 

NOTE: Docker CE requires a fairly recent operating system version. If your machine does not meet the requirements, then you need to install https://www.docker.com/products/docker-toolbox[Docker Toolbox]. 

This workshop is tested with Docker Community Edition `17.09.0-ce-rc2, build 363a3e7` on Mac OS X `10.12.5`.

== Download Images

This tutorial uses a few Docker images and software. Let's download them before we start the tutorial.

Download the file from https://raw.githubusercontent.com/docker/labs/master/developer-tools/java/scripts/docker-compose-pull-images.yml and use the following command to pull the required images:

    docker-compose -f docker-compose-pull-images.yml pull --parallel

NOTE: For Linux, `docker-compose` and `docker` commands need `sudo` access. So prefix all commands with `sudo`.

== Other Software

The software in this section is specific to certain parts of the workshop. Install them only if you plan to attempt them.

. Install https://git-scm.com//[git].
. Install Docker Cloud CLI following the https://docs.docker.com/docker-cloud/installing-cli/[instructions].
. Download Java IDE based upon your choice and install.
.. https://netbeans.org/downloads/[NetBeans 8.2] (`"Java SE"` version)
.. https://www.jetbrains.com/idea/download/[IntelliJ IDEA Community or Ultimate]
.. http://www.eclipse.org/downloads/eclipse-packages/[Eclipse IDE for Java EE Developers]
. Download https://maven.apache.org/download.cgi[Maven] and install.
. Download the OpenJDK build of http://download.java.net/java/GA/jdk9/9/binaries/openjdk-9_linux-x64_bin.tar.gz[JDK 9 for Linux x64].
  (See also the http://jdk.java.net/9/[OpenJDK JDK 9 download page].)
. Download the early-access Open JDK build of http://jdk.java.net/9/ea[JDK 9 for Alpine Linux].


================================================
FILE: Docker/additional-ressources/developer-tools/java/chapters/ch02-basic-concepts.adoc
================================================
:toc:

:imagesdir: images

[[Docker_Basics]]
= Docker Basic Concepts

*PURPOSE*: This chapter introduces the basic terminology of Docker.

[quote, docs.docker.com/]
Docker is a platform for developers and sysadmins to build, ship, and run applications. Docker lets you quickly assemble applications from components and eliminates the friction that can come when shipping code. Docker lets you test and deploy your code into production as fast as possible.

Docker simplifies software delivery by making it easy to build and share images that contain your application’s entire environment, or _application operating system_.

**What does it mean by an application operating system ?**

Your application typically requires specific versions for your operating system, application server, JDK, and database server, may require to tune the configuration files, and similarly multiple other dependencies. The application may need binding to specific ports and certain amount of memory. The components and configuration together required to run your application is what is referred to as application operating system.

You can certainly provide an installation script that will download and install these components. Docker simplifies this process by allowing to create an image that contains your application and infrastructure together, managed as one component. These images are then used to create Docker containers which run on the container virtualization platform, provided by Docker.

== Main Components

Docker has three main components:

. __Images__ are the *build component* of Docker and are the read-only templates defining an application operating system.
. __Containers__ are the *run component* of Docker and created from images. Containers can be run, started, stopped, moved, and deleted.
. Images are stored, shared, and managed in a __registry__ and are the *distribution component* of Docker. Docker Store is a publicly available registry and is available at http://store.docker.com.

In order for these three components to work together, the *Docker Daemon* (or Docker Engine) runs on a host machine and does the heavy lifting of building, running, and distributing Docker containers. In addition, the *Client* is a Docker binary which accepts commands from the user and communicates back and forth with the Engine.

.Docker architecture
image::docker-architecture.png[]

The Client communicates with the Engine that is either co-located on the same host or on a different host. Client uses the `pull` command to request the Engine to pull an image from the registry. The Engine then downloads the image from Docker Store, or whichever registry is configured. Multiple images can be downloaded from the registry and installed on the Engine. Client uses the `run` run the container.

== Docker Image

We've already seen that Docker images are read-only templates from which Docker containers are launched. Each image consists of a series of layers. Docker makes use of union file systems to combine these layers into a single image. Union file systems allow files and directories of separate file systems, known as branches, to be transparently overlaid, forming a single coherent file system.

One of the reasons Docker is so lightweight is because of these layers. When you change a Docker image—for example, update an application to a new version— a new layer gets built. Thus, rather than replacing the whole image or entirely rebuilding, as you may do with a virtual machine, only that layer is added or updated. Now you don't need to distribute a whole new image, just the update, making distributing Docker images faster and simpler.

Every image starts from a base image, for example `ubuntu`, a base Ubuntu image, or `fedora`, a base Fedora image. You can also use images of your own as the basis for a new image, for example if you have a base Apache image you could use this as the base of all your web application images.

NOTE: By default, Docker obtains these base images from Docker Store.

Docker images are then built from these base images using a simple, descriptive set of steps we call instructions. Each instruction creates a new layer in our image. Instructions include actions like:

. Run a command
. Add a file or directory
. Create an environment variable
. Run a process when launching a container

These instructions are stored in a file called a Dockerfile. Docker reads this Dockerfile when you request a build of an image, executes the instructions, and returns a final image.

== Docker Container

A container consists of an operating system, user-added files, and meta-data. As we've seen, each container is built from an image. That image tells Docker what the container holds, what process to run when the container is launched, and a variety of other configuration data. The Docker image is read-only. When Docker runs a container from an image, it adds a read-write layer on top of the image (using a union file system as we saw earlier) in which your application can then run.

== Docker Engine

Docker Host is created as part of installing Docker on your machine. Once your Docker host has been created, it then allows you to manage images and containers. For example, the image can be downloaded and containers can be started, stopped and restarted.

== Docker Client

The client communicates with the Docker Host and let's you work with images and containers.

Check if your client is working using the following command:

  docker -v

It shows the output:

  Docker version 17.09.0-ce-rc3, build 2357fb2

NOTE: The exact version may differ based upon how recently the installation was performed.

The exact version of Client and Server can be seen using `docker version` command. This shows the output as:

```
Client:
 Version:      17.09.0-ce-rc3
 API version:  1.32
 Go version:   go1.8.3
 Git commit:   2357fb2
 Built:        Thu Sep 21 02:31:18 2017
 OS/Arch:      darwin/amd64

Server:
 Version:      17.09.0-ce-rc3
 API version:  1.32 (minimum version 1.12)
 Go version:   go1.8.3
 Git commit:   2357fb2
 Built:        Thu Sep 21 02:36:52 2017
 OS/Arch:      linux/amd64
 Experimental: true
```

The complete set of commands can be seen using `docker --help`.



================================================
FILE: Docker/additional-ressources/developer-tools/java/chapters/ch03-build-image-java-9.adoc
================================================
:toc:

:imagesdir: images

= Build a Docker Image with JDK 9

*PURPOSE*: This chapter explains how to create a Docker image with JDK 9.

The link:ch03-build-image.adoc[prior chapter] explained how, in general, to build a Docker image with Java.
This chapter expands on this topic and focuses on JDK 9 features.

== Create a Docker Image using JDK 9

Create a new directory, for example `docker-jdk9`.

In that directory, create a new text file `jdk-9-debian-slim.Dockerfile`.
Use the following contents:

[source, text]
----
# A JDK 9 with Debian slim
FROM debian:stable-slim
# Download from http://jdk.java.net/9/
# ADD http://download.java.net/java/GA/jdk9/9/binaries/openjdk-9_linux-x64_bin.tar.gz /opt
ADD openjdk-9_linux-x64_bin.tar.gz /opt
# Set up env variables
ENV JAVA_HOME=/opt/jdk-9
ENV PATH=$PATH:$JAVA_HOME/bin
CMD ["jshell", "-J-XX:+UnlockExperimentalVMOptions", \
               "-J-XX:+UseCGroupMemoryLimitForHeap", \
               "-R-XX:+UnlockExperimentalVMOptions", \
               "-R-XX:+UseCGroupMemoryLimitForHeap"]
----

This image uses `debian` slim as the base image and installs the OpenJDK build
of JDK for linux x64 (see the link:ch01-setup.adoc[setup section] for how to download this into the
current directory).

The image is configured by default to run `jshell` the Java REPL. Read more JShell at link:https://docs.oracle.com/javase/9/jshell/introduction-jshell.htm[Introduction to JShell]. The
experimental flag `-XX:+UseCGroupMemoryLimitForHeap` is passed to the REPL
process (the frontend Java process managing user input and the backend Java
process managing compilation).  This option will ensure container memory
constraints are honored.

Build the image using the command:

  docker image build -t jdk-9-debian-slim -f jdk-9-debian-slim.Dockerfile .

List the images available using `docker image ls`:

[source, text]
----
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
jdk-9-debian-slim       latest              023f6999d94a        4 hours ago         400MB
debian                  stable-slim         d30525fb4ed2        4 days ago          55.3MB
----

Other images may be shown as well but we are interested in these two images for
now.  The large difference in size is attributed to JDK 9, which is larger
in size than JDK 8 because it also explicitly provides Java modules that we
shall see more of later on in this chapter.

Run the container using the command:

  docker container run -m=200M -it --rm jdk-9-debian-slim

to see the output:

[source, text]
----
INFO: Created user preferences directory.
|  Welcome to JShell -- Version 9
|  For an introduction type: /help intro

jshell>
----

Query the available memory of the Java process by typing the following
expression into the Java REPL:

  Runtime.getRuntime().maxMemory() / (1 << 20)

to see the output:

[source, text]
----
jshell> Runtime.getRuntime().maxMemory() / (1 << 20)
$1 ==> 100
----

Notice that the Java process is honoring memory constraints (see the `--memory`
of `docker container run`) and will not allocate memory beyond that specified for the
container.

In a future release of the JDK it will no longer be necessary to specify an
experimental flag (`-XX:+UnlockExperimentalVMOptions`) once the mechanism by
which memory constraints are efficiently detected is stable.

JDK 9 supports the set CPUs constraint (see the `--cpuset-cpus` of
`docker container run`) but does not currently support other CPU constraints such as
CPU shares.  This is ongoing work http://openjdk.java.net/jeps/8182070[tracked]
in the OpenJDK project.

Note: the support for CPU sets and memory constraints have also been backported
to JDK 8 release 8u131 and above.

Type `Ctrl` + `D` to exit out of `jshell`.

To list all the Java modules distributed with JDK 9 run the following command:

    docker container run -m=200M -it --rm jdk-9-debian-slim java --list-modules

This will show an output:

[source, text]
----
java.activation@9
java.base@9
java.compiler@9
java.corba@9
java.datatransfer@9
java.desktop@9
java.instrument@9
java.logging@9
java.management@9
java.management.rmi@9
java.naming@9
java.prefs@9
java.rmi@9
java.scripting@9
java.se@9
java.se.ee@9
java.security.jgss@9
java.security.sasl@9
java.smartcardio@9
java.sql@9
java.sql.rowset@9
java.transaction@9
java.xml@9
java.xml.bind@9
java.xml.crypto@9
java.xml.ws@9
java.xml.ws.annotation@9
jdk.accessibility@9
jdk.aot@9
jdk.attach@9
jdk.charsets@9
jdk.compiler@9
jdk.crypto.cryptoki@9
jdk.crypto.ec@9
jdk.dynalink@9
jdk.editpad@9
jdk.hotspot.agent@9
jdk.httpserver@9
jdk.incubator.httpclient@9
jdk.internal.ed@9
jdk.internal.jvmstat@9
jdk.internal.le@9
jdk.internal.opt@9
jdk.internal.vm.ci@9
jdk.internal.vm.compiler@9
jdk.jartool@9
jdk.javadoc@9
jdk.jcmd@9
jdk.jconsole@9
jdk.jdeps@9
jdk.jdi@9
jdk.jdwp.agent@9
jdk.jlink@9
jdk.jshell@9
jdk.jsobject@9
jdk.jstatd@9
jdk.localedata@9
jdk.management@9
jdk.management.agent@9
jdk.naming.dns@9
jdk.naming.rmi@9
jdk.net@9
jdk.pack@9
jdk.policytool@9
jdk.rmic@9
jdk.scripting.nashorn@9
jdk.scripting.nashorn.shell@9
jdk.sctp@9
jdk.security.auth@9
jdk.security.jgss@9
jdk.unsupported@9
jdk.xml.bind@9
jdk.xml.dom@9
jdk.xml.ws@9
jdk.zipfs@9
----

In total there should be 75 modules:

[source, text]
----
$ docker container run -m=200M -it --rm jdk-9-debian-slim java --list-modules | wc -l
      75
----

== Create a Docker Image using JDK 9 and Alpine Linux

Instead of `debian` as the base image it is possible to use Alpine Linux
with an early access build of JDK 9 that is compatible with the muslc library
shipped with Alpine Linux.

Create a new text file `jdk-9-alpine.Dockerfile`.
Use the following contents:

[source, text]
----
# A JDK 9 with Alpine Linux
FROM alpine:3.6
# Add the musl-based JDK 9 distribution
RUN mkdir /opt
# Download from http://jdk.java.net/9/
# ADD http://download.java.net/java/jdk9-alpine/archive/181/binaries/jdk-9-ea+181_linux-x64-musl_bin.tar.gz
ADD jdk-9-ea+181_linux-x64-musl_bin.tar.gz /opt
# Set up env variables
ENV JAVA_HOME=/opt/jdk-9
ENV PATH=$PATH:$JAVA_HOME/bin
CMD ["jshell", "-J-XX:+UnlockExperimentalVMOptions", \
               "-J-XX:+UseCGroupMemoryLimitForHeap", \
               "-R-XX:+UnlockExperimentalVMOptions", \
               "-R-XX:+UseCGroupMemoryLimitForHeap"]
----

This image uses `alpine` 3.6 as the base image and installs the OpenJDK build
of JDK for Alpine Linux x64 (see the link:ch01-setup.adoc[Setup Environments]
chapter for how to download this into the current directory).

The image is configured in the same manner as for the `debian`-based image.

Build the image using the command:

  docker image build -t jdk-9-alpine -f jdk-9-alpine.Dockerfile .

List the images available using `docker image ls`:

[source, text]
----
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
jdk-9-debian-slim       latest              023f6999d94a        4 hours ago         400MB
jdk-9-alpine            latest              f5a57382f240        4 hours ago         356MB
debian                  stable-slim         d30525fb4ed2        4 days ago          55.3MB
alpine                  3.6                 7328f6f8b418        3 months ago        3.97MB
----

Notice the difference in image sizes.  Alpine Linux by design has been carefully
crafted to produce a minimal running OS image. A cost of such a design is
an alternative standard library https://www.musl-libc.org/[musl libc] that is
not compatible with the C standard library (libc).  As a result the JDK requires
modifications to run on Alpine Linux.  Such modifications have been proposed
by the OpenJDK http://openjdk.java.net/projects/portola/[Portola Project].


== Create a Docker Image using JDK 9 and a Java application

Clone the GitHib project https://github.com/PaulSandoz/helloworld-java-9 that
contains a simple Java 9-based project:

  git clone https://github.com/PaulSandoz/helloworld-java-9.git

(If you have a github account you may wish to fork it and then clone the fork
so you can make modifications.)

Enter the directory `helloworld-java-9` and build the project from within a
running Docker container with JDK 9 installed:

  docker container run --volume $PWD:/helloworld-java-9 --workdir /helloworld-java-9 \
      -it --rm openjdk:9-jdk-slim \
      ./mvnw package

(If you have JDK 9 installed locally on the host system you can build directly
with `./mvnw package`.)

In this case we are using the `openjdk:9-jdk-slim` on Docker hub that has been
configured to work with SSL certificates so that the maven wrapper tool can
successfully download the maven tool.  This image is not produced or in anyway
endorsed by the OpenJDK project (unlike the JDK 9 distributions that were
previously required).  It is anticipated that future releases of the JDK from
the OpenJDK project will have root CA certificates (see issue
https://bugs.openjdk.java.net/browse/JDK-8189131[JDK-8189131])

To build Docker image for this application use the file `helloworld-jdk-9.Dockerfile` from the checked out repo to build your image. The contents of the file are shown below:

[source, text]
----
# Hello world application with JDK 9 and Debian slim
FROM jdk-9-debian-slim
COPY target/helloworld-1.0-SNAPSHOT.jar /opt/helloworld/helloworld-1.0-SNAPSHOT.jar
# Set up env variables
CMD java -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap \
  -cp /opt/helloworld/helloworld-1.0-SNAPSHOT.jar org.examples.java.App
----

Build a Docker image containing the simple Java application based of the Docker
image `jdk-9-debian-slim`:

    docker image build -t helloworld-jdk-9 -f helloworld-jdk-9.Dockerfile .

List the images available using `docker image ls`:

[source, text]
----
REPOSITORY              TAG                 IMAGE ID            CREATED              SIZE
helloworld-jdk-9        latest              eb0539e9529a        19 seconds ago       400MB
jdk-9-debian-slim       latest              023f6999d94a        5 hours ago          400MB
jdk-9-alpine            latest              f5a57382f240        5 hours ago          356MB
openjdk                 9-jdk-slim          6dca67f4790e        3 days ago           372MB
debian                  stable-slim         d30525fb4ed2        4 days ago           55.3MB
alpine                  3.6                 7328f6f8b418        3 months ago         3.97MB
----

Notice how large the application image `helloworld-jdk-9`.

Run the `jdeps` tool to see what modules the application depends on:

  docker container run -it --rm helloworld-jdk-9 jdeps --list-deps /opt/helloworld/helloworld-1.0-SNAPSHOT.jar

and observe that the application only depends on the `java.base` module.

== Reduce the size of a Docker Image using JDK 9 and a Java application

The Java application is extremely simple and as a result uses very little of the
functionality shipped with JDK 9 distribution, specifically the application
only depends on functionality present in the `java.base` module.  We can create
a custom Java runtime that only contains the `java.base` module and include
that in application Docker image.

Create a custom Java runtime that is small and only contains the `java.base`
module:

    docker container run --rm \
      --volume $PWD:/out \
      jdk-9-debian-slim \
      jlink --module-path /opt/jdk-9/jmods \
        --verbose \
        --add-modules java.base \
        --compress 2 \
        --no-header-files \
        --output /out/target/openjdk-9-base_linux-x64

This command exists as `create-minimal-java-runtime.sh` script in the repo earlier checked out from link:https://github.com/PaulSandoz/helloworld-java-9[helloworld-java-9].

The JDK 9 tool `jlink` is used to create the custom Java runtime. Read more jlink in the https://docs.oracle.com/javase/9/tools/jlink.htm[Tools Reference]. The tool
is executed from with the container containing JDK 9 and directory where the
modules reside, `/opt/jdk-9/jmods`, is declared in the module path.  Only the
`java.base` module is selected.

The custom runtime is output to the `target` directory:

[source, text]
----
$ du -k target/openjdk-9-base_linux-x64/
24      target/openjdk-9-base_linux-x64//bin
12      target/openjdk-9-base_linux-x64//conf/security/policy/limited
8       target/openjdk-9-base_linux-x64//conf/security/policy/unlimited
24      target/openjdk-9-base_linux-x64//conf/security/policy
68      target/openjdk-9-base_linux-x64//conf/security
76      target/openjdk-9-base_linux-x64//conf
44      target/openjdk-9-base_linux-x64//legal/java.base
44      target/openjdk-9-base_linux-x64//legal
72      target/openjdk-9-base_linux-x64//lib/jli
16      target/openjdk-9-base_linux-x64//lib/security
19824   target/openjdk-9-base_linux-x64//lib/server
31656   target/openjdk-9-base_linux-x64//lib
31804   target/openjdk-9-base_linux-x64/
----

To build Docker image for this application use the file `helloworld-jdk-9-base.Dockerfile` from the checked out repo. The contents of the file are shown below:

[source, text]
----
# Hello world application with custom Java runtime with just the base module and Debian slim
FROM debian:stable-slim
COPY target/openjdk-9-base_linux-x64 /opt/jdk-9
COPY target/helloworld-1.0-SNAPSHOT.jar /opt/helloworld/helloworld-1.0-SNAPSHOT.jar
# Set up env variables
ENV JAVA_HOME=/opt/jdk-9
ENV PATH=$PATH:$JAVA_HOME/bin
CMD java -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap \
  -cp /opt/helloworld/helloworld-1.0-SNAPSHOT.jar org.examples.java.App
----

Build a Docker image containing the simple Java application based of the Docker
image `debian:stable-slim`:

    docker image build -t helloworld-jdk-9-base -f helloworld-jdk-9-base.Dockerfile .

List the images available using `docker image ls`:

[source, text]
----
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
helloworld-jdk-9-base   latest              7052483fdb77        24 seconds ago      87.7MB
helloworld-jdk9         latest              eb0539e9529a        17 minutes ago      400MB
jdk-9-debian-slim       latest              023f6999d94a        5 hours ago         400MB
jdk-9-alpine            latest              f5a57382f240        5 hours ago         356MB
openjdk                 9-jdk-slim          6dca67f4790e        3 days ago          372MB
debian                  stable-slim         d30525fb4ed2        4 days ago          55.3MB
alpine                  3.6                 7328f6f8b418        3 months ago        3.97MB
[source, text]
----

The `helloworld-jdk-9-base` is much smaller and could be reduced further if
Alpine Linux was used instead of Debian Slim.

A realistic application will depend on more JDK modules but it's still possible
to significantly reduce the Java runtime to only the required modules (for
example many applications will not require Corba or RMI nor the compiler tools).



================================================
FILE: Docker/additional-ressources/developer-tools/java/chapters/ch03-build-image.adoc
================================================
:toc:

:imagesdir: images

= Build a Docker Image

*PURPOSE*: This chapter explains how to create a Docker image.

== Dockerfile

Docker build images by reading instructions from a _Dockerfile_. A _Dockerfile_ is a text document that contains all the commands a user could call on the command line to assemble an image. `docker image build` command uses this file and executes all the commands in succession to create an image.

`build` command is also passed a context that is used during image creation. This context can be a path on your local filesystem or a URL to a Git repository.

_Dockerfile_ is usually called _Dockerfile_. The complete list of commands that can be specified in this file are explained at https://docs.docker.com/reference/builder/. The common commands are listed below:

.Common commands for Dockerfile
[width="100%", options="header", cols="1,4,4"]
|==================
| Command | Purpose | Example
| FROM | First non-comment instruction in _Dockerfile_ | `FROM ubuntu`
| COPY | Copies mulitple source files from the context to the file system of the container at the specified path | `COPY .bash_profile /home`
| ENV | Sets the environment variable | `ENV HOSTNAME=test`
| RUN | Executes a command | `RUN apt-get update`
| CMD | Defaults for an executing container | `CMD ["/bin/echo", "hello world"]`
| EXPOSE | Informs the network ports that the container will listen on | `EXPOSE 8093`
|==================

== Create your first image

Create a new directory `hellodocker`.

In that directory, create a new text file `Dockerfile`. Use the following contents:

[source, text]
----
FROM ubuntu:latest

CMD ["/bin/echo", "hello world"]
----

This image uses `ubuntu` as the base image. `CMD` command defines the command that needs to run. It provides a different entry point of `/bin/echo` and gives the argument "`hello world`".

Build the image using the command:

[source, text]
----
  docker image build . -t helloworld
----

`.` in this command is the context for the command `docker image build`. `-t` adds a tag to the image.

The following output is shown:

[source, text]
----
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM ubuntu:latest
latest: Pulling from library/ubuntu
9fb6c798fa41: Pull complete 
3b61febd4aef: Pull complete 
9d99b9777eb0: Pull complete 
d010c8cf75d7: Pull complete 
7fac07fb303e: Pull complete 
Digest: sha256:31371c117d65387be2640b8254464102c36c4e23d2abe1f6f4667e47716483f1
Status: Downloaded newer image for ubuntu:latest
 ---> 2d696327ab2e
Step 2/2 : CMD /bin/echo hello world
 ---> Running in 9356a508590c
 ---> e61f88f3a0f7
Removing intermediate container 9356a508590c
Successfully built e61f88f3a0f7
Successfully tagged helloworld:latest
----

List the images available using `docker image ls`:

[source, text]
----
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
helloworld          latest              e61f88f3a0f7        3 minutes ago       122MB
ubuntu              latest              2d696327ab2e        4 days ago          122MB
----

Other images may be shown as well but we are interested in these two images for now.

Run the container using the command:

  docker container run helloworld

to see the output:

  hello world

If you do not see the expected output, check your Dockerfile that the content exactly matches as shown above. Build the image again and now run it.

Change the base image from `ubuntu` to `busybox` in `Dockerfile`. Build the image again:

  docker image build -t helloworld:2 .

and view the images using `docker image ls` command:

[source, text]
----
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
helloworld          2                   7fbedda27c66        3 seconds ago       1.13MB
helloworld          latest              e61f88f3a0f7        5 minutes ago       122MB
ubuntu              latest              2d696327ab2e        4 days ago          122MB
busybox             latest              54511612f1c4        9 days ago          1.13MB
----

`helloworld:2` is the format that allows to specify the image name and assign a tag/version to it separated by `:`.

== Create your first image using Java

=== Create a simple Java application

[NOTE]
====
If you are running OpenJDK 9, `mvn package` may fail with
[source, text]
----
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project helloworld: Compilation failure: Compilation failure:
[ERROR] Source option 1.5 is no longer supported. Use 1.6 or later.
[ERROR] Target option 1.5 is no longer supported. Use 1.6 or later.
----
because support for Java 5 http://openjdk.java.net/jeps/182[was dropped in JDK9].

You can add
[source, xml]
----
  <properties>
    <maven.compiler.source>1.6</maven.compiler.source>
    <maven.compiler.target>1.6</maven.compiler.target>
  </properties>
----
to the generated `pom.xml` to target 1.6 instead. See also the link:chapters/ch03-build-image-java-9.adoc[Build a Docker Image for Java 9] chapter.
====

Create a new Java project:

[source, text]
----
mvn archetype:generate -DgroupId=org.examples.java -DartifactId=helloworld -DinteractiveMode=false
----

Build the project:

[source, text]
----
cd helloworld
mvn package
----

Run the Java class:

[source, text]
----
java -cp target/helloworld-1.0-SNAPSHOT.jar org.examples.java.App
----

This shows the output:

[source, text]
----
Hello World!
----

Let's package this application as a Docker image.

==== Java Docker image

Run the OpenJDK container in an interactive manner:

    docker container run -it openjdk

This will open a terminal in the container. Check the version of Java:

[source, text]
----
root@8d0af9da5258:/# java -version
openjdk version "1.8.0_141"
OpenJDK Runtime Environment (build 1.8.0_141-8u141-b15-1~deb9u1-b15)
OpenJDK 64-Bit Server VM (build 25.141-b15, mixed mode)
----

A different JDK version may be shown in your case. 

Exit out of the container by typing `exit` in the container shell.

=== Package and run Java application as Docker image

Create a new Dockerfile in `helloworld` directory and use the following content:

[source, text]
----
FROM openjdk:latest

COPY target/helloworld-1.0-SNAPSHOT.jar /usr/src/helloworld-1.0-SNAPSHOT.jar

CMD java -cp /usr/src/helloworld-1.0-SNAPSHOT.jar org.examples.java.App
----

Build the image:

    docker image build -t hello-java:latest .

Run the image:

    docker container run hello-java:latest

This displays the output:

    Hello World!

This shows the exactly same output that was printed when the Java class was invoked using Java CLI.

=== Package and run Java Application using Docker Maven Plugin

https://github.com/fabric8io/docker-maven-plugin[Docker Maven Plugin] allows you to manage Docker images and containers using Maven. It comes with predefined goals:

[options="header"]
|====
|Goal | Description
| `docker:build` | Build images
| `docker:start` | Create and start containers
| `docker:stop` | Stop and destroy containers
| `docker:push` | Push images to a registry
| `docker:remove` | Remove images from local docker host
| `docker:logs` | Show container logs
|====

Complete set of goals are listed at https://github.com/fabric8io/docker-maven-plugin.

Clone the sample code from https://github.com/arun-gupta/docker-java-sample/.

Create the Docker image:

    mvn -f docker-java-sample/pom.xml package -Pdocker

This will show an output like:

[source, text]
----
[INFO] Copying files to /Users/argu/workspaces/docker-java-sample/target/docker/hellojava/build/maven
[INFO] Building tar: /Users/argu/workspaces/docker-java-sample/target/docker/hellojava/tmp/docker-build.tar
[INFO] DOCKER> [hellojava:latest]: Created docker-build.tar in 87 milliseconds
[INFO] DOCKER> [hellojava:latest]: Built image sha256:6f815
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
----

The list of images can be checked using the command `docker image ls | grep hello-java`:

[source, text]
----
hello-java                            latest              ea64a9f5011e        5 seconds ago       643 MB
----

Run the Docker container:

   mvn -f docker-java-sample/pom.xml install -Pdocker

This will show an output like:

[source, text]
----
[INFO] DOCKER> [hellojava:latest]: Start container 30a08791eedb
30a087> Hello World!
[INFO] DOCKER> [hellojava:latest]: Waited on log out 'Hello World!' 510 ms
----

This is similar output when running the Java application using `java` CLI or the Docker container using `docker container run` command.

The container is running in the foreground. Use `Ctrl` + `C` to interrupt the container and return back to terminal.

Only one change was required in the project to enable Docker packaging and running. A Maven profile is added in `pom.xml`:

[source, text]
----
<profiles>
    <profile>
        <id>docker</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>io.fabric8</groupId>
                    <artifactId>docker-maven-plugin</artifactId>
                    <version>0.22.1</version>
                    <configuration>
                        <images>
                            <image>
                                <name>hello-java</name>
                                <build>
                                    <from>openjdk:latest</from>
                                    <assembly>
                                        <descriptorRef>artifact</descriptorRef>
                                    </assembly>
                                    <cmd>java -cp maven/${project.name}-${project.version}.jar org.examples.java.App</cmd>
                                </build>
                                <run>
                                    <wait>
                                        <log>Hello World!</log>
                                    </wait>
                                </run>
                            </image>
                        </images>
                    </configuration>
                    <executions>
                        <execution>
                            <id>docker:build</id>
                            <phase>package</phase>
                            <goals>
                                <goal>build</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>docker:start</id>
                            <phase>install</phase>
                            <goals>
                                <goal>start</goal>
                                <goal>logs</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>
----

== Dockerfile Command Design Patterns

=== Difference between CMD and ENTRYPOINT

*TL;DR* `CMD` will work for most of the cases.

Default entry point for a container is `/bin/sh`, the default shell.

Running a container as `docker container run -it ubuntu` uses that command and starts the default shell. The output is shown as:

```console
> docker container run -it ubuntu
root@88976ddee107:/#
```

`ENTRYPOINT` allows to override the entry point to some other command, and even customize it. For example, a container can be started as:

```console
> docker container run -it --entrypoint=/bin/cat ubuntu /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
. . .
```

This command overrides the entry point to the container to `/bin/cat`. The argument(s) passed to the CLI are used by the entry point.

=== Difference between ADD and COPY

*TL;DR* `COPY` will work for most of the cases.

`ADD` has all capabilities of `COPY` and has the following additional features:

. Allows tar file auto-extraction in the image, for example, `ADD app.tar.gz /opt/var/myapp`.
. Allows files to be downloaded from a remote URL. However, the downloaded files will become part of the image. This causes the image size to bloat. So its recommended to use `curl` or `wget` to download the archive explicitly, extract, and remove the archive.

=== Import and export images

Docker images can be saved using `image save` command to a `.tar` file:

  docker image save helloworld > helloworld.tar

These tar files can then be imported using `load` command:

  docker image load -i helloworld.tar



================================================
FILE: Docker/additional-ressources/developer-tools/java/chapters/ch04-run-container.adoc
================================================
:toc:

:imagesdir: images

= Run a Docker Container

The first step in running an application using Docker is to run a container. If you can think of an open source software, there is a very high likelihood that there will be a Docker image available for it at https://store.docker.com[Docker Store]. Docker client can simply run the container by giving the image name. The client will check if the image already exists on Docker Host. If it exists then it'll run the container, otherwise the host will first download the image.

== Pull Image

Let's check if any images are available:

[source, text]
----
docker image ls
----

At first, this list is empty. If you've already downloaded the images as specified in the setup chapter, then all the images will be shown here. 

List of images can be seen again using the `docker image ls` command. This will show the following output:

[source, text]
----
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
hellojava                    latest              8d76bf5691c4        32 minutes ago      740MB
hello-java                   latest              93b1180c5d91        36 minutes ago      740MB
helloworld                   2                   7fbedda27c66        41 minutes ago      1.13MB
helloworld                   latest              e61f88f3a0f7        About an hour ago   122MB
mysql                        latest              b4e78b89bcf3        3 days ago          412MB
ubuntu                       latest              2d696327ab2e        4 days ago          122MB
jboss/wildfly                latest              9adbdb00cded        8 days ago          592MB
openjdk                      latest              6077adce18ea        8 days ago          740MB
busybox                      latest              54511612f1c4        9 days ago          1.13MB
tailtarget/hadoop            2.7.2               ee6b539c886e        6 months ago        1.15GB
tailtarget/jenkins           2.32.3              71a7d9bcfe2b        6 months ago        859MB
arungupta/couchbase          travel              7929a80707db        7 months ago        583MB
arungupta/couchbase-javaee   travel              2bb52abaad5f        7 months ago        595MB
arungupta/javaee7-hol        latest              da5c9d4f85ca        2 years ago         582MB
----

More details about the image can be obtained using `docker image history jboss/wildfly` command:

[source, text]
----
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
9adbdb00cded        8 days ago          /bin/sh -c #(nop)  CMD ["/opt/jboss/wildfl...   0B                  
<missing>           8 days ago          /bin/sh -c #(nop)  EXPOSE 8080/tcp              0B                  
<missing>           8 days ago          /bin/sh -c #(nop)  USER [jboss]                 0B                  
<missing>           8 days ago          /bin/sh -c #(nop)  ENV LAUNCH_JBOSS_IN_BAC...   0B                  
<missing>           8 days ago          /bin/sh -c cd $HOME     && curl -O https:/...   163MB               
<missing>           8 days ago          /bin/sh -c #(nop)  USER [root]                  0B                  
<missing>           8 days ago          /bin/sh -c #(nop)  ENV JBOSS_HOME=/opt/jbo...   0B                  
<missing>           8 days ago          /bin/sh -c #(nop)  ENV WILDFLY_SHA1=9ee3c0...   0B                  
<missing>           8 days ago          /bin/sh -c #(nop)  ENV WILDFLY_VERSION=10....   0B                  
<missing>           8 days ago          /bin/sh -c #(nop)  ENV JAVA_HOME=/usr/lib/...   0B                  
<missing>           8 days ago          /bin/sh -c #(nop)  USER [jboss]                 0B                  
<missing>           8 days ago          /bin/sh -c yum -y install java-1.8.0-openj...   204MB               
<missing>           8 days ago          /bin/sh -c #(nop)  USER [root]                  0B                  
<missing>           8 days ago          /bin/sh -c #(nop)  MAINTAINER Marek Goldma...   0B                  
<missing>           8 days ago          /bin/sh -c #(nop)  USER [jboss]                 0B                  
<missing>           8 days ago          /bin/sh -c #(nop) WORKDIR /opt/jboss            0B                  
<missing>           8 days ago          /bin/sh -c groupadd -r jboss -g 1000 && us...   296kB               
<missing>           8 days ago          /bin/sh -c yum update -y && yum -y install...   28.7MB              
<missing>           8 days ago          /bin/sh -c #(nop)  MAINTAINER Marek Goldma...   0B                  
<missing>           8 days ago          /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B                  
<missing>           8 days ago          /bin/sh -c #(nop)  LABEL name=CentOS Base ...   0B                  
<missing>           8 days ago          /bin/sh -c #(nop) ADD file:1ed4d1a29d09a63...   197MB               
----

== Run Container

=== Interactively

Run WildFly container in an interactive mode.

[source, text]
----
docker container run -it jboss/wildfly
----

This will show the output as:

[source, text]
----
=========================================================================

  JBoss Bootstrap Environment

  JBOSS_HOME: /opt/jboss/wildfly

  JAVA: /usr/lib/jvm/java/bin/java

. . .

00:26:27,455 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0060: Http management interface listening on http://127.0.0.1:9990/management
00:26:27,456 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0051: Admin console listening on http://127.0.0.1:9990
00:26:27,457 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: WildFly Full 10.1.0.Final (WildFly Core 2.2.0.Final) started in 3796ms - Started 331 of 577 services (393 services are lazy, passive or on-demand)
----

This shows that the server started correctly, congratulations!

By default, Docker runs in the foreground. `-i` allows to interact with the STDIN and `-t` attach a TTY to the process. Switches can be combined together and used as `-it`.

Hit Ctrl+C to stop the container.

=== Detached container

Restart the container in detached mode:

[source, text]
----
docker container run -d jboss/wildfly
254418caddb1e260e8489f872f51af4422bc4801d17746967d9777f565714600
----

`-d`, instead of `-it`, runs the container in detached mode.

The output is the unique id assigned to the container. Logs of the container can be seen using the command `docker container logs <CONTAINER_ID>`, where `<CONTAINER_ID>` is the id of the container.

Status of the container can be checked using the `docker container ls` command:

[source, text]
----
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
254418caddb1        jboss/wildfly       "/opt/jboss/wildfl..."   2 minutes ago       Up 2 minutes        8080/tcp            gifted_haibt
----

Also try `docker container ls -a` to see all the containers on this machine.

=== With default port

If you want the container to accept incoming connections, you will need to provide special options when invoking `docker run`. The container, we just started, can't be accessed by our browser. We need to stop it again and restart with different options.

[source, text]
----
docker container stop `docker container ps | grep wildfly | awk '{print $1}'`
----

Restart the container as:

[source, text]
----
docker container run -d -P --name wildfly jboss/wildfly
----

`-P` map any exposed ports inside the image to a random port on Docker host. In addition, `--name` option is used to give this container a name. This name can then later be used to get more details about the container or stop it. This can be verified using `docker container ls` command:

[source, text]
----
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                     NAMES
89fbfbceeb56        jboss/wildfly       "/opt/jboss/wildfl..."   9 seconds ago       Up 8 seconds        0.0.0.0:32768->8080/tcp   wildfly
----

The port mapping is shown in the `PORTS` column. Access WildFly server at http://localhost:32768. Make sure to use the correct port number as shown in your case.

NOTE: Exact port number may be different in your case.

The page would look like:

image::wildfly-first-run-default-page.png[]

=== With specified port

Stop and remove the previously running container as:

[source, text]
----
docker container stop wildfly
docker container rm wildfly
----

Alternatively, `docker container rm -f wildfly` can be used to stop and remove the container in one command. Be careful with this command because `-f` uses `SIGKILL` to kill the container.

Restart the container as:

[source, text]
----
docker container run -d -p 8080:8080 --name wildfly jboss/wildfly
----

The format is `-p hostPort:containerPort`. This option maps a port on the host to a port in the container. This allows us to access the container on the specified port on the host.

Now we're ready to test http://localhost:8080. This works with the exposed port, as expected.

Let's stop and remove the container as:

[source, text]
----
docker container stop wildfly
docker container rm wildfly
----

=== Deploy a WAR file to application server

Now that your application server is running, lets see how to deploy a WAR file to it.

Create a new directory `hellojavaee`. Create a new text file and name it `Dockerfile`. Use the following contents:

[source, text]
----
FROM jboss/wildfly:latest

RUN curl -L https://github.com/javaee-samples/javaee7-simple-sample/releases/download/v1.10/javaee7-simple-sample-1.10.war -o /opt/jboss/wildfly/standalone/deployments/javaee-simple-sample.war
----

Create an image:

[source, text]
----
docker image build -t javaee-sample .
----

Start the container:

[source, text]
----
docker container run -d -p 8080:8080 --name wildfly javaee-sample
----

Access the endpoint:

[source, text]
----
curl http://localhost:8080/javaee-simple-sample/resources/persons
----

See the output:

[source, text]
----
<persons>
	<person>
		<name>
		Penny
		</name>
	</person>
	<person>
		<name>
		Leonard
		</name>
	</person>
	<person>
		<name>
		Sheldon
		</name>
	</person>
	<person>
		<name>
		Amy
		</name>
	</person>
	<person>
		<name>
		Howard
		</name>
	</person>
	<person>
		<name>
		Bernadette
		</name>
	</person>
	<person>
		<name>
		Raj
		</name>
	</person>
	<person>
		<name>
		Priya
		</name>
	</person>
</persons>
----

Optional: `brew install XML-Coreutils` will install XML formatting utility on Mac. This output can then be piped to `xml-fmt` to display a formatted result.

== Stop container

Stop a specific container by id or name:

[source, text]
----
docker container stop <CONTAINER ID>
docker container stop <NAME>
----

Stop all running containers:

[source, text]
----
docker container stop $(docker container ps -q)
----

Stop only the exited containers:

[source, text]
----
docker container ps -a -f "exited=-1"
----

== Remove container

Remove a specific container by id or name:

[source, text]
----
docker container rm <CONTAINER_ID>
docker container rm <NAME>
----

Remove containers meeting a regular expression

[source, text]
----
docker container ps -a | grep wildfly | awk '{print $1}' | xargs docker container rm
----

Remove all containers, without any criteria

[source, text]
----
docker container rm $(docker container ps -aq)
----

== Additional ways to find port mapping

The exact mapped port can also be found using `docker port` command:

[source, text]
----
docker container port <CONTAINER_ID> or <NAME>
----

This shows the output as:

[source, text]
----
8080/tcp -> 0.0.0.0:8080
----

Port mapping can be also be found using `docker inspect` command:

[source, text]
----
docker container inspect --format='{{(index (index .NetworkSettings.Ports "8080/tcp") 0).HostPort}}' <CONTAINER ID>
----


================================================
FILE: Docker/additional-ressources/developer-tools/java/chapters/ch05-compose.adoc
================================================
:toc:

:imagesdir: images

[[Docker_Compose]]
= Multi-container application using Docker Compose

== What is Docker Compose

[quote, github.com/docker/compose]
Docker Compose is a tool for defining and running complex applications with Docker. With Compose, you define a multi-container application in a single file, then spin your application up in a single command which does everything that needs to be done to get it running.

An application using Docker containers will typically consist of multiple containers. With Docker Compose, there is no need to write shell scripts to start your containers. All the containers are defined in a configuration file using _services_, and then `docker-compose` script is used to start, stop, and restart the application and all the services in that application, and all the containers within that service. The complete list of commands is:

[options="header"]
|====
| Command | Purpose
| `build` | Build or rebuild services
| `help` | Get help on a command
| `kill` | Kill containers
| `logs` | View output from containers
| `port` | Print the public port for a port binding
| `ps` | List containers
| `pull` | Pulls service images
| `restart` | Restart services
| `rm` | Remove stopped containers
| `run` | Run a one-off command
| `scale` | Set number of containers for a service
| `start` | Start services
| `stop` | Stop services
| `up` | Create and start containers
| `migrate-to-labels  Recreate containers to add labels
|====

The application used in this section is a Java EE application talking to a database. The application publishes a REST endpoint that can be invoked using `curl. It is deployed using http://wildfly-swarm.io/[WildFly Swarm] that communicates to MySQL database.

WildFly Swarm and MySQL will be running in two separate containers, and thus making this a multi-container application.

== Configuration file

Th entry point to Docker Compose is a Compose file, usually called `docker-compose.yml`. Create a new directory `javaee`. In that directory, create a new file `docker-compose.yml` in it. Use the following contents:

```
version: '3.3'
services:
  db:
    container_name: db
    image: mysql:8
    environment:
      MYSQL_DATABASE: employees
      MYSQL_USER: mysql
      MYSQL_PASSWORD: mysql
      MYSQL_ROOT_PASSWORD: supersecret
    ports:
      - 3306:3306
  web:
    image: arungupta/docker-javaee:dockerconeu17
    ports:
      - 8080:8080
      - 9990:9990
    depends_on:
      - db
```

In this Compose file:

. Two services in this Compose are defined by the name `db` and `web` attributes
. Image name for each service defined using `image` attribute
. The `mysql:8` image starts the MySQL server.
. `environment` attribute defines environment variables to initialize MySQL server.
.. `MYSQL_DATABASE` allows you to specify the name of a database to be created on image startup.
.. `MYSQL_USER` and `MYSQL_PASSWORD` are used in conjunction to create a new user and to set that user's password. This user will be granted superuser permissions for the database specified by the `MYSQL_DATABASE` variable.
.. `MYSQL_ROOT_PASSWORD` is mandatory and specifies the password that will be set for the MySQL root superuser account.
. Java EE application uses the `db` service as specified in the `connection-url` as specified at https://github.com/arun-gupta/docker-javaee/blob/master/employees/src/main/resources/project-defaults.yml/.
. The `arungupta/docker-javaee:dockerconeu17` image starts WildFly Swarm application server. It consists of the Java EE application built from https://github.com/arun-gupta/docker-javaee. Clone that project if you want to build your own image.
. Port forwarding is achieved using `ports` attribute.
. `depends_on` attribute allows to express dependency between services. In this case, MySQL will be started before WildFly. Application-level health check are still user's responsibility.

== Start application

All services in the application can be started, in detached mode, by giving the command:

```
docker-compose up -d
```

An alternate Compose file name can be specified using `-f` option.

An alternate directory where the compose file exists can be specified using `-p` option.

This shows the output as:

```
docker-compose up -d
Creating network "javaee_default" with the default driver
Creating db ... 
Creating db ... done
Creating javaee_web_1 ... 
Creating javaee_web_1 ... done
```

The output may differ slightly if the images are downloaded as well.

Started services can be verified using the command `docker-compose ps`:

```
    Name                  Command               State                       Ports                     
------------------------------------------------------------------------------------------------------
db             docker-entrypoint.sh mysqld      Up      0.0.0.0:3306->3306/tcp                        
javaee_web_1   /bin/sh -c java -jar /opt/ ...   Up      0.0.0.0:8080->8080/tcp, 0.0.0.0:9990->9990/tcp
```

This provides a consolidated view of all the services, and containers within each of them.

Alternatively, the containers in this application, and any additional containers running on this Docker host can be verified by using the usual `docker container ls` command:

```
    Name                  Command               State                       Ports                     
------------------------------------------------------------------------------------------------------
db             docker-entrypoint.sh mysqld      Up      0.0.0.0:3306->3306/tcp                        
javaee_web_1   /bin/sh -c java -jar /opt/ ...   Up      0.0.0.0:8080->8080/tcp, 0.0.0.0:9990->9990/tcp
javaee $ docker container ls
CONTAINER ID        IMAGE                                   COMMAND                  CREATED             STATUS              PORTS                                            NAMES
e862a5eb9484        arungupta/docker-javaee:dockerconeu17   "/bin/sh -c 'java ..."   38 seconds ago      Up 36 seconds       0.0.0.0:8080->8080/tcp, 0.0.0.0:9990->9990/tcp   javaee_web_1
08792c20c066        mysql:8                                 "docker-entrypoint..."   39 seconds ago      Up 37 seconds       0.0.0.0:3306->3306/tcp                           db
```

Service logs can be seen using `docker-compose logs` command, and looks like:

[source, text]
----
Attaching to dockerjavaee_web_1, db
web_1  | 23:54:21,584 INFO  [org.jboss.msc] (main) JBoss MSC version 1.2.6.Final
web_1  | 23:54:21,688 INFO  [org.jboss.as] (MSC service thread 1-8) WFLYSRV0049: WildFly Core 2.0.10.Final "Kenny" starting
web_1  | 2017-10-06 23:54:22,687 INFO  [org.wildfly.extension.io] (ServerService Thread Pool -- 20) WFLYIO001: Worker 'default' has auto-configured to 8 core threads with 64 task threads based on your 4 available processors

. . .

web_1  | 2017-10-06 23:54:23,259 INFO  [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-3) WFLYJCA0001: Bound data source [java:jboss/datasources/ExampleDS]
web_1  | 2017-10-06 23:54:24,962 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: WildFly Core 2.0.10.Final "Kenny" started in 3406ms - Started 112 of 124 services (21 services are lazy, passive or on-demand)
web_1  | 2017-10-06 23:54:25,020 INFO  [org.wildfly.extension.undertow] (MSC service thread 1-4) WFLYUT0006: Undertow HTTP listener default listening on 0.0.0.0:8080
web_1  | 2017-10-06 23:54:26,146 INFO  [org.wildfly.swarm.runtime.deployer] (main) deploying docker-javaee.war
web_1  | 2017-10-06 23:54:26,169 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-3) WFLYSRV0027: Starting deployment of "docker-javaee.war" (runtime-name: "docker-javaee.war")
web_1  | 2017-10-06 23:54:27,748 INFO  [org.jboss.as.jpa] (MSC service thread 1-2) WFLYJPA0002: Read persistence.xml for MyPU
web_1  | 2017-10-06 23:54:27,887 WARN  [org.jboss.as.dependency.private] (MSC service thread 1-7) WFLYSRV0018: Deployment "deployment.docker-javaee.war" is using a private module ("org.jboss.jts:main") which may be changed or removed in future versions without notice.

. . .

web_1  | 2017-10-06 23:54:29,128 INFO  [stdout] (ServerService Thread Pool -- 4) Hibernate: create table EMPLOYEE_SCHEMA (id integer not null, name varchar(40), primary key (id))
web_1  | 2017-10-06 23:54:29,132 INFO  [stdout] (ServerService Thread Pool -- 4) Hibernate: INSERT INTO EMPLOYEE_SCHEMA(ID, NAME) VALUES (1, 'Penny')
web_1  | 2017-10-06 23:54:29,133 INFO  [stdout] (ServerService Thread Pool -- 4) Hibernate: INSERT INTO EMPLOYEE_SCHEMA(ID, NAME) VALUES (2, 'Sheldon')
web_1  | 2017-10-06 23:54:29,133 INFO  [stdout] (ServerService Thread Pool -- 4) Hibernate: INSERT INTO EMPLOYEE_SCHEMA(ID, NAME) VALUES (3, 'Amy')
web_1  | 2017-10-06 23:54:29,133 INFO  [stdout] (ServerService Thread Pool -- 4) Hibernate: INSERT INTO EMPLOYEE_SCHEMA(ID, NAME) VALUES (4, 'Leonard')

. . .

web_1  | 2017-10-06 23:54:30,050 INFO  [org.wildfly.extension.undertow] (ServerService Thread Pool -- 4) WFLYUT0021: Registered web context: /
web_1  | 2017-10-06 23:54:30,518 INFO  [org.jboss.as.server] (main) WFLYSRV0010: Deployed "docker-javaee.war" (runtime-name : "docker-javaee.war")
web_1  | 2017-10-06 23:56:01,766 INFO  [stdout] (default task-1) Hibernate: select employee0_.id as id1_0_, employee0_.name as name2_0_ from EMPLOYEE_SCHEMA employee0_
db     | Initializing database

. . .

db     | 
db     | 
db     | MySQL init process done. Ready for start up.
db     | 

. . .

db     | 2017-10-06T23:54:29.434423Z 0 [Note] /usr/sbin/mysqld: ready for connections. Version: '8.0.3-rc-log'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server (GPL)
db     | 2017-10-06T23:54:30.281973Z 0 [Note] InnoDB: Buffer pool(s) load completed at 171006 23:54:30
----

`depends_on` attribute in the Compose definition file ensures the container start up order. But application-level start up needs to be ensured by the applications running inside container. In our case, this can be achieved by WildFly Swarm using `swarm.datasources.data-sources.KEY.stale-connection-checker-class-name` as defined at https://reference.wildfly-swarm.io/fractions/datasources.html.

== Verify application

Now that the WildFly Swarm and MySQL have been configured, let's access the application. You need to specify IP address of the host where WildFly is running (`localhost` in our case).

The endpoint can be accessed in this case as:

    curl -v http://localhost:8080/resources/employees

The output is shown as:

```
curl -v http://localhost:8080/resources/employees
*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
> GET /resources/employees HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.51.0
> Accept: */*
> 
< HTTP/1.1 200 OK
< Connection: keep-alive
< Content-Type: application/xml
< Content-Length: 478
< Date: Sat, 07 Oct 2017 00:05:41 GMT
< 
* Curl_http_done: called premature == 0
* Connection #0 to host localhost left intact
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><collection><employee><id>1</id><name>Penny</name></employee><employee><id>2</id><name>Sheldon</name></employee><employee><id>3</id><name>Amy</name></employee><employee><id>4</id><name>Leonard</name></employee><employee><id>5</id><name>Bernadette</name></employee><employee><id>6</id><name>Raj</name></employee><employee><id>7</id><name>Howard</name></employee><employee><id>8</id><name>Priya</name></employee></collection>
```

This shows the result from querying the database.

A single resource can be obtained:

    curl -v http://localhost:8080/resources/employees/1

It shows the output:

```
curl -v http://localhost:8080/resources/employees/1
*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
> GET /resources/employees/1 HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.51.0
> Accept: */*
> 
< HTTP/1.1 200 OK
< Connection: keep-alive
< Content-Type: application/xml
< Content-Length: 104
< Date: Sat, 07 Oct 2017 00:06:33 GMT
< 
* Curl_http_done: called premature == 0
* Connection #0 to host localhost left intact
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><employee><id>1</id><name>Penny</name></employee>
```

== Shutdown application

Shutdown the application using `docker-compose down`:

```
Stopping javaee_web_1 ... done
Stopping db           ... done
Removing javaee_web_1 ... done
Removing db           ... done
Removing network javaee_default
```

This stops the container in each service and removes all the services. It also deletes any networks that were created as part of this application.



================================================
FILE: Docker/additional-ressources/developer-tools/java/chapters/ch06-swarm.adoc
================================================
:toc:

:imagesdir: images

[[Swarm_Mode]]
= Deploy application using Swarm mode

Docker Engine includes swarm mode for natively managing a cluster of Docker Engines. The Docker CLI can be used to create a swarm, deploy application services to a swarm, and manage swarm behavior. Complete details are available at: https://docs.docker.com/engine/swarm/. It's important to understand the https://docs.docker.com/engine/swarm/key-concepts/[Swarm mode key concepts] before starting with this chapter.

Swarm is typically a cluster of multiple Docker Engines. But for simplicity we'll run a single node Swarm.

This section will deploy an application that will provide a CRUD/REST interface on a data bucket in https://www.mysql.com/[MySQL]. This is achieved by using a Java EE application deployed on http://wildfly.org[WildFly] to access the database.

== Initialize Swarm

Initialize Swarm mode using the following command:

    docker swarm init

This starts a Swarm Manager. By default, a manager node is also a worker but can be configured to be a manager-only.

Find some information about this one-node cluster using the command `docker info`

```
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 17
Server Version: 17.09.0-ce
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host ipvlan macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: active
 NodeID: p9a1tqcjh58ro9ucgtqxa2wgq
 Is Manager: true
 ClusterID: r3xdxly8zv82e4kg38krd0vog
 Managers: 1
 Nodes: 1
 Orchestration:
  Task History Retention Limit: 5
 Raft:
  Snapshot Interval: 10000
  Number of Old Snapshots to Retain: 0
  Heartbeat Tick: 1
  Election Tick: 3
 Dispatcher:
  Heartbeat Period: 5 seconds
 CA Configuration:
  Expiry Duration: 3 months
  Force Rotate: 0
 Autolock Managers: false
 Root Rotation In Progress: false
 Node Address: 192.168.65.2
 Manager Addresses:
  192.168.65.2:2377
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 06b9cb35161009dcb7123345749fef02f7cea8e0
runc version: 3f2f8b84a77f73d38244dd690525642a72156c64
init version: 949e6fa
Security Options:
 seccomp
  Profile: default
Kernel Version: 4.9.49-moby
Operating System: Alpine Linux v3.5
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 1.952GiB
Name: moby
ID: TJSZ:O44Y:PWGZ:ZWZM:SA73:2UHI:VVKV:KLAH:5NPO:AXQZ:XWZD:6IRJ
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): true
 File Descriptors: 35
 Goroutines: 142
 System Time: 2017-10-05T20:57:14.037442426Z
 EventsListeners: 1
Registry: https://index.docker.io/v1/
Experimental: true
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false
```

This cluster has 1 node, and that is a manager. By default, the manager node is also a worker node. This means the containers can run on this node.

== Multi-container application

This section describes how to deploy a multi-container application using Docker Compose to Swarm mode use Docker CLI. 

Create a new directory and `cd` to it:

    mkdir webapp
    cd webapp

Create a new Compose definition `docker-compose.yml` using this link:ch05-compose.adoc#configuration-file[ configuration file].

This application can be started as:

    docker stack deploy --compose-file=docker-compose.yml webapp

This shows the output as:

```
Ignoring deprecated options:

container_name: Setting the container name is not supported.

Creating network webapp_default
Creating service webapp_db
Creating service webapp_web
```

WildFly Swarm and MySQL services are started on this node. Each service has a single container. If the Swarm mode is enabled on multiple nodes then the containers will be distributed across them.

A new overlay network is created. This can be verified using the command `docker network ls`. This network allows multiple containers on different hosts to communicate with each other.

== Verify service and containers in application

Verify that the WildFly and MySQL services are running using `docker service ls`:

```
ID                  NAME                MODE                REPLICAS            IMAGE                                   PORTS
j21lwelj529f        webapp_db           replicated          1/1                 mysql:8                                 *:3306->3306/tcp
m0m44axt35cg        webapp_web          replicated          1/1                 arungupta/docker-javaee:dockerconeu17   *:8080->8080/tcp,*:9990->9990/tcp
```

More details about the service can be obtained using `docker service inspect webapp_web`:

[source, yml]
----
[
    {
        "ID": "m0m44axt35cgjetcjwzls7u9r",
        "Version": {
            "Index": 22
        },
        "CreatedAt": "2017-10-07T00:17:44.038961419Z",
        "UpdatedAt": "2017-10-07T00:17:44.040746062Z",
        "Spec": {
            "Name": "webapp_web",
            "Labels": {
                "com.docker.stack.image": "arungupta/docker-javaee:dockerconeu17",
                "com.docker.stack.namespace": "webapp"
            },
            "TaskTemplate": {
                "ContainerSpec": {
                    "Image": "arungupta/docker-javaee:dockerconeu17@sha256:6a403c35d2ab4442f029849207068eadd8180c67e2166478bc3294adbf578251",
                    "Labels": {
                        "com.docker.stack.namespace": "webapp"
                    },
                    "Privileges": {
                        "CredentialSpec": null,
                        "SELinuxContext": null
                    },
                    "StopGracePeriod": 10000000000,
                    "DNSConfig": {}
                },
                "Resources": {},
                "RestartPolicy": {
                    "Condition": "any",
                    "Delay": 5000000000,
                    "MaxAttempts": 0
                },
                "Placement": {
                    "Platforms": [
                        {
                            "Architecture": "amd64",
                            "OS": "linux"
                        }
                    ]
                },
                "Networks": [
                    {
                        "Target": "bwnp1nvkkga68dirhp1ue7qey",
                        "Aliases": [
                            "web"
                        ]
                    }
                ],
                "ForceUpdate": 0,
                "Runtime": "container"
            },
            "Mode": {
                "Replicated": {
                    "Replicas": 1
                }
            },
            "UpdateConfig": {
                "Parallelism": 1,
                "FailureAction": "pause",
                "Monitor": 5000000000,
                "MaxFailureRatio": 0,
                "Order": "stop-first"
            },
            "RollbackConfig": {
                "Parallelism": 1,
                "FailureAction": "pause",
                "Monitor": 5000000000,
                "MaxFailureRatio": 0,
                "Order": "stop-first"
            },
            "EndpointSpec": {
                "Mode": "vip",
                "Ports": [
                    {
                        "Protocol": "tcp",
                        "TargetPort": 8080,
                        "PublishedPort": 8080,
                        "PublishMode": "ingress"
                    },
                    {
                        "Protocol": "tcp",
                        "TargetPort": 9990,
                        "PublishedPort": 9990,
                        "PublishMode": "ingress"
                    }
                ]
            }
        },
        "Endpoint": {
            "Spec": {
                "Mode": "vip",
                "Ports": [
                    {
                        "Protocol": "tcp",
                        "TargetPort": 8080,
                        "PublishedPort": 8080,
                        "PublishMode": "ingress"
                    },
                    {
                        "Protocol": "tcp",
                        "TargetPort": 9990,
                        "PublishedPort": 9990,
                        "PublishMode": "ingress"
                    }
                ]
            },
            "Ports": [
                {
                    "Protocol": "tcp",
                    "TargetPort": 8080,
                    "PublishedPort": 8080,
                    "PublishMode": "ingress"
                },
                {
                    "Protocol": "tcp",
                    "TargetPort": 9990,
                    "PublishedPort": 9990,
                    "PublishMode": "ingress"
                }
            ],
            "VirtualIPs": [
                {
                    "NetworkID": "vysfza7wgjepdlutuwuigbws1",
                    "Addr": "10.255.0.5/16"
                },
                {
                    "NetworkID": "bwnp1nvkkga68dirhp1ue7qey",
                    "Addr": "10.0.0.4/24"
                }
            ]
        }
    }
]
----

Logs for the service can be seen using `docker service logs -f webapp_web`:

```
webapp_web.1.lf3y5k7pkpt9@moby    | 00:17:47,296 INFO  [org.jboss.msc] (main) JBoss MSC version 1.2.6.Final
webapp_web.1.lf3y5k7pkpt9@moby    | 00:17:47,404 INFO  [org.jboss.as] (MSC service thread 1-8) WFLYSRV0049: WildFly Core 2.0.10.Final "Kenny" starting
webapp_web.1.lf3y5k7pkpt9@moby    | 2017-10-07 00:17:48,636 INFO  [org.wildfly.extension.io] (ServerService Thread Pool -- 20) WFLYIO001: Worker 'default' has auto-configured to 8 core threads with 64 task threads based on your 4 available processors

. . .

webapp_web.1.lf3y5k7pkpt9@moby    | 2017-10-07 00:17:56,619 INFO  [org.jboss.resteasy.resteasy_jaxrs.i18n] (ServerService Thread Pool -- 12) RESTEASY002225: Deploying javax.ws.rs.core.Application: class org.javaee.samples.employees.MyApplication
webapp_web.1.lf3y5k7pkpt9@moby    | 2017-10-07 00:17:56,621 WARN  [org.jboss.as.weld] (ServerService Thread Pool -- 12) WFLYWELD0052: Using deployment classloader to load proxy classes for module com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider:main. Package-private access will not work. To fix this the module should declare dependencies on [org.jboss.weld.core, org.jboss.weld.spi]
webapp_web.1.lf3y5k7pkpt9@moby    | 2017-10-07 00:17:56,682 INFO  [org.wildfly.extension.undertow] (ServerService Thread Pool -- 12) WFLYUT0021: Registered web context: /
webapp_web.1.lf3y5k7pkpt9@moby    | 2017-10-07 00:17:57,094 INFO  [org.jboss.as.server] (main) WFLYSRV0010: Deployed "docker-javaee.war" (runtime-name : "docker-javaee.war")
```

Make sure to wait for the last log statement to show.

== Access application

Now that the WildFly and MySQL servers have been configured, let's access the application. You need to specify IP address of the host where WildFly is running (`localhost` in our case).

The endpoint can be accessed in this case as:

    curl -v http://localhost:8080/resources/employees

The output is shown as:

```
*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
> GET /resources/employees HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.51.0
> Accept: */*
> 
< HTTP/1.1 200 OK
< Connection: keep-alive
< Content-Type: application/xml
< Content-Length: 478
< Date: Sat, 07 Oct 2017 00:22:59 GMT
< 
* Curl_http_done: called premature == 0
* Connection #0 to host localhost left intact
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><collection><employee><id>1</id><name>Penny</name></employee><employee><id>2</id><name>Sheldon</name></employee><employee><id>3</id><name>Amy</name></employee><employee><id>4</id><name>Leonard</name></employee><employee><id>5</id><name>Bernadette</name></employee><employee><id>6</id><name>Raj</name></employee><employee><id>7</id><name>Howard</name></employee><employee><id>8</id><name>Priya</name></employee></collection>
```

This shows all employees stored in the database.

== Stop application

If you only want to stop the application temporarily while keeping any networks that were created as part of this application, the recommended way is to set the amount of service replicas to 0.

    docker service scale webapp_db=0 webapp_web=0

It shows the output:

```
webapp_db scaled to 0
webapp_web scaled to 0
Since --detach=false was not specified, tasks will be scaled in the background.
In a future release, --detach=false will become the default.
```

This is especially useful if the stack contains volumes and you want to keep the data. It allows you to simply start the stack again with setting the replicas to a number higher than 0.

== Remove application completely

Shutdown the application using `docker stack rm webapp`:

```
Removing service webapp_db
Removing service webapp_web
Removing network webapp_default
```

This stops the container in each service and removes the services. It also deletes any networks that were created as part of this application.


================================================
FILE: Docker/additional-ressources/developer-tools/java/chapters/ch07-eclipse.adoc
================================================
:toc:

:imagesdir: images

[[Docker_Eclipse]]
== Docker and Eclipse

This chapter will show you basic Docker tooling with Eclipse:

- Pull/Push/Build Docker images
- Run/Start/Stop/Kill Docker containers
- Customize views

Watch a quick video explaining the key steps in https://www.youtube.com/watch?v=XmhEZiS26os.

=== Install Docker Tooling in Eclipse

Download http://www.eclipse.org/downloads/eclipse-packages/[Eclipse IDE for Java EE Developers] and install.

Go to "`Help`" menu, "`Install New Software...`".

Select Eclipse update site for the release, search for Docker, select "`Docker Tooling`".

image::docker-eclipse-update-site-selection.png[]

Click on "`Next>`", "`Next>`", accept the license agreement, click on "`Finish`" to start the installation.

Restart Eclipse for the installation to complete.

=== Docker Perspective and View

Go to "`Window`", "`Perspective`", "`Open Perspective`", "`Other...`", "`Docker Tooling`".

image::docker-eclipse-docker-perspective.png[]

Click on "`OK`" to see the perspective.

image::docker-eclipse-docker-perspective-default-look.png[]

This has three views:

- *Docker Explorer*: a tree view listing all connected Docker instances, with image and containers.
- *Docker Images*: a table view listing containers for selected Docker connection.
- *Docker Containers*: a table view listing containers for selected Docker connection

Click on the text in Docker Explorer to create a new connection. If you are on Mac/Windows, you are likely using Docker for Mac/Windows or Docker Toolbox to setup Docker Host. Eclipse allows to configure Docker Engine using both Docker for Mac/Windows and Docker Toolbox.

If you are using Docker for Mac/Windows, then the default values are shown:

image::docker-eclipse-docker-connection.png[]

Click on "`Test Connection`" to test the connection.

image::docker-eclipse-docker-connection-test.png[]

If you are using Toolbox, enter the values as shown:

image::docker-eclipse-docker-connection-toolbox.png[]

The exact value of TCP Connection can be found using `docker-machine ls` command. The path for authentication is the directory name where certificates for your Docker Machine, `couchbase` in this case, are stored.

Click on "`Test Connection`" to make sure the connection is successfully configured.

image::docker-eclipse-docker-connection-test-toolbox.png[]

In either case, the configuration can be completed once the connection is tested. Click on "`Finish`" to complete the configuration.

Docker Explorer is updated to show the connection.

Containers and Images configured for the Docker Machine are shown in tabs. They can be expanded to see the list in Explorer itself.

=== Pull an Image

Expand the connection to see "`Containers`" and "`Images`".

Right-click on "`Images`" and select "`Pull...`".

Type the image name and click on "`Finish`".

image::docker-eclipse-pull-image.png[]

This image is now shown in Explorer and Docker Images tab.

image::docker-eclipse-pulled-image.png[]

Any existing images on the Docker Host will be shown here.

=== Run a Container

Select an image, right-click on it, and click on "`Run...`". It shows the options that can be configured for running the container. Some of them are:

- Publish ports on Docker host interface (`-P` or `-p` in `docker run` command)
- Keep STDIN open and allocate pseudo-TTY (`-it` on CLI)
- Remove container after it exits (`--rm` on CLI)
- Volume mapping (`-v` on CLI)
- Environment variables (`-e` on CLI)

Uncheck "`Publish all exposed ports`" box to map to corresponding ports.

image::docker-eclipse-run-container-config.png[]

Click on "`Finish`" to run the container.

Right-click on the started container, select "`Display Log`" to show the log.

image::docker-eclipse-container-display-log.png[]

The container can be paused, stopped and killed from here as well.

To see more details about the container, right-click on the container, select "`Show In`", "`Properties`".

image::docker-eclipse-container-properties.png[]

=== Build an Image

In Docker Images tab, click on the hammer icon on top right.

Give the image name, specify an empty directory, click on "`Edit Dockerfile`" to edit the contents of Dockerfile

image::docker-eclipse-build-image.png[]

Click on "`Save`" and "`Finish`" to create the image.


================================================
FILE: Docker/additional-ressources/developer-tools/java/chapters/ch07-intellij.adoc
================================================
:toc:

:imagesdir: images

[[Docker_IntelliJ]]
== Docker and IntelliJ IDEA

This chapter will show you basic Docker tooling with IntelliJ IDEA:

- Pull Docker images
- Run, stop, delete a Container
- Build an Image

=== Install Docker Plugin in IDEA

Go to "`Preferences`", "`Plugins`", "`Install JetBrains plugin...`", search on "`docker`" and click on "`Install`"

image::docker-intellij-plugin-install.png[]

Restart IntelliJ IDEA to active plugin.

Click on "`Create New Project`", select "`Java`", "`Web Application`"

image::docker-intellij-create-java-project.png[]

Click on "`Next`", give the project a name "`dockercon`", click on "`Finish`". This will open up the project in IntelliJ window.

Go to "`Preferences`", "`Clouds`", add a new deployment by clicking on "`+`". Click on "`Import credentials from Docker Machine`", "`Detect`", and see a successful connection. You may have to check the IP address of your Docker Machine. Find the IP address of your Docker Machine as `docker-machine ip <machine-name>` and specify the correct IP address here.

image::docker-intellij-cloud-connection.png[]

Go to "`View`", "`Tool Windows`", "`Docker Tooling Window`". Click on "`Connect`"" to connect with Docker Machine. Make sure Docker Machine is running. 

WARNING: IDEA does not work with "`Docker for Mac`" at this time. (ADD BUG #)

image::docker-intellij-tool-window.png[]

=== Pull an Image

Select top-level node with the name "`Docker`", click on "`Pull image`"

image::docker-intellij-pull-image.png[]

Type an image name, such as `arungupta/couchbase`, and "`OK`"

image::docker-intellij-repository-name.png[]

Expand "`Containers`" and "`Images`" to see existing running containers and images.

The specified image is now downloaded and shown as well.

=== Run a Container

Select the downloaded image, click on "`Create container`"

Select "`After launch`" and enter the URL as `http://192.168.99.100:8091`. Make sure to match the IP address of your Docker Machine.

image::docker-intellij-deployment-after-launch.png[]

In "`Container`" tab, add "`Port bindings`" for `8091:8091`

image::docker-intellij-container-ports.png[]

Click on "`Run`" to run the container.

This will bring up the browser window and display the page http://192.168.99.100:8091 and looks like:

image::docker-intellij-run-container-browser.png[]

This image uses http://developer.couchbase.com/documentation/server/current/rest-api/rest-endpoints-all.html[Couchbase REST API] to configure the Couchbase server. 

Right-click on the running container, select "`Inspect`" to see more details about the container.

image::docker-intellij-container-inspect.png[]

Click on "`Stop container`" to stop the container and "`Delete container`" to delete the container.

=== Build an Image

. Refer to the instructions https://www.jetbrains.com/help/idea/2016.1/docker.html

. Right-click on the project, create a new directory `docker-dir`
. Artifact
.. Click on top-right for "`Project Structure`"
.. select "`Artifacts`"
.. change "`Type:`" to "`Web Application: Archive`"
.. change the name to `dockercon`
.. change `Output directory` to `docker-dir`
. Create "`Dockerfile`" in this directory. Use the contents
+
```
FROM jboss/wildfly

ADD dockercon.war /opt/jboss/wildfly/standalone/deployments/
```
+
. "`Run`", "`Edit Configurations`", add new "`Docker Deployment`"
.. "`Deployment`" tab
... Change the name to `dockercon`
... Select "`After launch`", change the URL to "`http://192.168.99.100:18080/dockercon/index.jsp`"
... In "`Before launch`", add "`Build Artifacts`" and select the artifact
.. "`Container`" tab
... Add "`Port bindings`" for "`8080:18080`"
. View, Tool Windows, Docker, connect to it
. Run the project


================================================
FILE: Docker/additional-ressources/developer-tools/java/chapters/ch07-netbeans.adoc
================================================
:toc:

:imagesdir: images

[[Docker_NetBeans]]
== Docker and NetBeans

This chapter will show you basic Docker tooling with NetBeans:

- Pull/Build Docker images
- Run/Start/Stop Docker containers

NOTE: NetBeans only supports configuring Docker Engine running using Docker Toolbox. This means that if you are running Docker for Mac or Docker for Windows then NetBeans cannot be used.

=== Configure Docker Host

In "`Services`" window, right-click on "`Docker`", click on "`Add Docker...`"

image::docker-netbeans-add-docker.png[]

Specify Docker Machine coordinates, click on "`Test Connection`" to validate the connection:

image::docker-netbeans-add-docker-instance.png[]

NOTE: No support for Docker for Mac/Windows, filed as https://netbeans.org/bugzilla/show_bug.cgi?id=262398[#262398].

Click on "`Finish`" to see:

image::docker-netbeans-added-docker-instance.png[]

Expand the connection to see "`Images`" and "`Containers`".

=== Pull an Image

Right-click on Docker node and select "`Pull...`".

image::docker-netbeans-pull-image.png[]

Type the image name to narrow down the search from Docker Store:

image::docker-netbeans-search-image.png[]

Click on "`Pull`" to pull the image.

Log is updated in the Output window:

image::docker-netbeans-pull-image-output.png[]

This image is now shown in Services tab

image::docker-netbeans-pulled-image.png[]

Any existing images on the Docker Host will be shown here as well.

=== Run a Container

Select an image, right-click on it, and click on "`Run...`".

image::docker-netbeans-run-container.png[]

This brings up a dialog that allows the options that can be configured for running the container. Some of them are:

- Container name
- Override the command
- Keep STDIN open and allocate pseudo-TTY (`-it` on CLI)
- Publish ports on Docker host interface (`-P` or `-p` in `docker run` command)

image::docker-netbeans-run-container-option1.png[]

Click on "`Next>`" to see the options to configure exposed ports. Click on "`Add`" to explicitly map host port "`8091`" to container port "`8091`".

image::docker-netbeans-run-container-option2.png[]

Click on "`Finish`" to run the container. "`Services`" window is updated as:

image::docker-netbeans-run-container-services.png[]

Log is shown in the "`Output`" window:

image::docker-netbeans-run-container-log.png[]

Right-click on the container, select "`Show Log`" to show the log generated by the container. The container can be paused and stopped from here as well.

=== Build an Image

On the configured Docker Host, right-click and select "`Build...`" to build a new image:

image::docker-netbeans-build-image.png[]

Specify a directory where `Dockerfile` exists, give the image name:

image::docker-netbeans-build-image-option1.png[]

Click on "`Next>`", choose the options that matter:

image::docker-netbeans-build-image-option2.png[]

Click on "`Finish`" to build the image. The image is shown in the "`Services`" window:

image::docker-netbeans-build-image-services.png[]



================================================
FILE: Docker/additional-ressources/developer-tools/java/chapters/ch08-aws.adoc
================================================
:toc:

:imagesdir: images

= Docker for AWS

https://docs.docker.com/docker-for-aws/[Docker for AWS] is a CloudFormation template that configures Docker in swarm-mode, running on EC2 instances backed by custom AMIs. This allows to create a cluster of Docker Engine in swarm-mode with a single click. This workshop will take the https://github.com/docker/labs/blob/master/developer-tools/java/chapters/ch06-swarm.adoc#multi-container-application[multi-container application] and deploy it on multiple hosts.

== Requirements

What is required for creating this CloudFormation template?

. https://docs.docker.com/docker-for-aws/iam-permissions/[Permissions]
. SSH key in AWS in the region where you want to deploy (required to access the completed Docker install). http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html[Amazon EC2 Key Pair] explains how to add SSH key to your account
. AWS account that support EC2-VPC

== Create cluster

https://console.aws.amazon.com/cloudformation/home#/stacks/new?stackName=Docker&templateURL=https://editions-us-east-1.s3.amazonaws.com/aws/stable/Docker.tmpl[Launch Stack] to create the CloudFormation template.

.Select template
image::docker-aws-1.png[]

Click on `Next`

.Swarm size
image::docker-aws-2.png[]

Select the number of Swarm manager (3) and worker (5) nodes. This wll create a 8 node cluster. Each node will initialize a new EC2 instance. Feel free to alter the number of master and worker nodes. For example, a more reasonable number for testing may be 1 master and 3 worker nodes.

Select the SSH key that will be used to access the cluster.

By default, the template is configured to redirect all log statements to CloudWatch. Until https://github.com/moby/moby/issues/30691[#30691] is fixed, the logs will only be available using CloudWatch. Alternatively, you may select to not redirect logs to CloudWatch. In this case, the usual command to get the logs will work.

Scroll down to select manager and worker properties.

.Swarm manager/worker properties
image::docker-aws-3.png[]

`m4.large` (2 vCPU and 8 GB memory) is a good start for manager. `m4.xlarge` (4 vCPU and 16 GB memory) is a good start for worker node. Feel free to choose `m3.medium` (1 vCPU and 3.75 GB memory) for manager and `m3.large` (2 vCPU and 7.5 GB memory) for a smaller cluster. Make sure the EC2 instance size is chosen to accommodate the processing and memory needs of containers that will run there.

Click on `Next`

.Swarm options
image::docker-aws-4.png[]

Take default for all the options and click on `Next`.

.Swarm review
image::docker-aws-5.png[]

.Swarm IAM accept
image::docker-aws-6.png[]

Accept the checkbox for CloudFormation to create IAM resources. Click on `Create` to create the Swarm cluster.

It will take a few minutes for the CloudFormation template to complete. The output will look like:

.Swarm CloudFormation complete
image::docker-aws-7.png[]

https://console.aws.amazon.com/ec2/v2/home?#Instances:search=docker;sort=instanceState[EC2 Console] will show the EC2 instances for manager and worker.

.EC2 console
image::docker-aws-8.png[]

Select one of the manager nodes, copy the public IP address:

[[Swarm_manager]]
.Swarm manager
image::docker-aws-9.png[]

Create a SSH tunnel using the command:

  ssh -i ~/.ssh/arun-us-east1.pem -o StrictHostKeyChecking=no -NL localhost:2374:/var/run/docker.sock docker@ec2-34-200-216-30.compute-1.amazonaws.com &

Get more details about the cluster using the command `docker -H localhost:2374 info`. This shows the output:

```
Containers: 5
 Running: 4
 Paused: 0
 Stopped: 1
Images: 5
Server Version: 17.09.0-ce
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: awslogs
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host ipvlan macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: active
 NodeID: rb6rju2eln0bn80z7lqocjkuy
 Is Manager: true
 ClusterID: t38bbbex5w3bpfmnogalxn5k1
 Managers: 3
 Nodes: 8
 Orchestration:
  Task History Retention Limit: 5
 Raft:
  Snapshot Interval: 10000
  Number of Old Snapshots to Retain: 0
  Heartbeat Tick: 1
  Election Tick: 3
 Dispatcher:
  Heartbeat Period: 5 seconds
 CA Configuration:
  Expiry Duration: 3 months
  Force Rotate: 0
 Autolock Managers: false
 Root Rotation In Progress: false
 Node Address: 172.31.46.94
 Manager Addresses:
  172.31.26.163:2377
  172.31.46.94:2377
  172.31.8.136:2377
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 06b9cb35161009dcb7123345749fef02f7cea8e0
runc version: 3f2f8b84a77f73d38244dd690525642a72156c64
init version: 949e6fa
Security Options:
 seccomp
  Profile: default
Kernel Version: 4.9.49-moby
Operating System: Alpine Linux v3.5
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 7.785GiB
Name: ip-172-31-46-94.ec2.internal
ID: F65G:UTHH:7YEM:XPEZ:NBIZ:XN25:ONG6:QN5R:7MGJ:I3RS:BAX3:UO7A
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): true
 File Descriptors: 299
 Goroutines: 399
 System Time: 2017-10-07T01:04:00.971903882Z
 EventsListeners: 0
Registry: https://index.docker.io/v1/
Labels:
 os=linux
 region=us-east-1
 availability_zone=us-east-1c
 instance_type=m4.large
 node_type=manager
Experimental: true
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false
```

List of nodes in the cluster can be seen using `docker -H localhost:2374 node ls`:

```
ID                            HOSTNAME                        STATUS              AVAILABILITY        MANAGER STATUS
xdhwdiglfs5wsvkcl0j65wl04     ip-172-31-4-89.ec2.internal     Ready               Active              
xbrejk2g7mk9v15hg9xzu3syq     ip-172-31-8-136.ec2.internal    Ready               Active              Leader
bhwc67r78cfqtquri82qdwtnk     ip-172-31-13-38.ec2.internal    Ready               Active              
ygxdfloly3x203x9p5wbpk34d     ip-172-31-17-74.ec2.internal    Ready               Active              
toyfec889wuqdix6z618mlj85     ip-172-31-26-163.ec2.internal   Ready               Active              Reachable
37lzvgrtlnnq0lnr3cip0fwhw     ip-172-31-28-204.ec2.internal   Ready               Active              
k2aprr08b3q28nvze9uv26821     ip-172-31-39-252.ec2.internal   Ready               Active              
rb6rju2eln0bn80z7lqocjkuy *   ip-172-31-46-94.ec2.internal    Ready               Active              Reachable
```

== Multi-container application to multi-host

Use the link:ch05-compose.adoc#configuration-file[Compose file] to deploy a multi-container application to this Docker cluster. This will deploy a multi-container application to multiple hosts.

Create a new directory and `cd` to it:

    mkdir webapp
    cd webapp

Create a new Compose definition `docker-compose.yml` using the configuration file from https://github.com/docker/labs/blob/master/developer-tools/java/chapters/ch05-compose.adoc#configuration-file.

The command is:

```
docker -H localhost:2374 stack deploy --compose-file=docker-compose.yml webapp
```

The output is:

```
Ignoring deprecated options:

container_name: Setting the container name is not supported.

Creating network webapp_default
Creating service webapp_web
Creating service webapp_db
```

WildFly Swarm and MySQL services are started on this cluster. Each service has a single container. A new overlay network is created. This allows multiple containers on different hosts to communicate with each other.

== Verify service and containers in application

Verify that the WildFly and Couchbase services are running using `docker -H localhost:2374 service ls`:

```
ID                  NAME                MODE                REPLICAS            IMAGE                                   PORTS
q4d578ime45e        webapp_db           replicated          1/1                 mysql:8                                 *:3306->3306/tcp
qt5qrzp1jpyq        webapp_web          replicated          1/1                 arungupta/docker-javaee:dockerconeu17   *:8080->8080/tcp,*:9990->9990/tcp
```

`REPLICAS` colum shows that one of one replica for the container is running for each service. It might take a few minutes for the service to be running as the image needs to be downloaded on the host where the container is started.

Let's find out which node the services are running. Do this for the web application first:

```
docker -H localhost:2374 service ps webapp_web
ID                  NAME                IMAGE                                   NODE                            DESIRED STATE       CURRENT STATE         ERROR               PORTS
npmunk4ll9f4        webapp_web.1        arungupta/docker-javaee:dockerconeu17   ip-172-31-39-252.ec2.internal   Running             Running 2 hours ago
```

The `NODE` column shows the internal IP address of the node where this service is running.

Now, do this for the database:

```
docker -H localhost:2374 service ps webapp_db
ID                  NAME                IMAGE               NODE                           DESIRED STATE       CURRENT STATE         ERROR               PORTS
vzaji4xdi2qh        webapp_db.1         mysql:8             ip-172-31-17-74.ec2.internal   Running             Running 2 hours ago   
```

The `NODE` column for this service shows that the service is running on a different node.

More details about the service can be obtained using `docker -H localhost:2374 service inspect webapp_web`:

```
[
    {
        "ID": "qt5qrzp1jpyq1ur7qhg55ijf1",
        "Version": {
            "Index": 58
        },
        "CreatedAt": "2017-10-07T01:09:32.519975146Z",
        "UpdatedAt": "2017-10-07T01:09:32.535587602Z",
        "Spec": {
            "Name": "webapp_web",
            "Labels": {
                "com.docker.stack.image": "arungupta/docker-javaee:dockerconeu17",
                "com.docker.stack.namespace": "webapp"
            },
            "TaskTemplate": {
                "ContainerSpec": {
                    "Image": "arungupta/docker-javaee:dockerconeu17@sha256:6a403c35d2ab4442f029849207068eadd8180c67e2166478bc3294adbf578251",
                    "Labels": {
                        "com.docker.stack.namespace": "webapp"
                    },
                    "Privileges": {
                        "CredentialSpec": null,
                        "SELinuxContext": null
                    },
                    "StopGracePeriod": 10000000000,
                    "DNSConfig": {}
                },
                "Resources": {},
                "RestartPolicy": {
                    "Condition": "any",
                    "Delay": 5000000000,
                    "MaxAttempts": 0
                },
                "Placement": {
                    "Platforms": [
                        {
                            "Architecture": "amd64",
                            "OS": "linux"
                        }
                    ]
                },
                "Networks": [
                    {
                        "Target": "b0ig9m1qsjax95tp9m1i2m4yo",
                        "Aliases": [
                            "web"
                        ]
                    }
                ],
                "ForceUpdate": 0,
                "Runtime": "container"
            },
            "Mode": {
                "Replicated": {
                    "Replicas": 1
                }
            },
            "UpdateConfig": {
                "Parallelism": 1,
                "FailureAction": "pause",
                "Monitor": 5000000000,
                "MaxFailureRatio": 0,
                "Order": "stop-first"
            },
            "RollbackConfig": {
                "Parallelism": 1,
                "FailureAction": "pause",
                "Monitor": 5000000000,
                "MaxFailureRatio": 0,
                "Order": "stop-first"
            },
            "EndpointSpec": {
                "Mode": "vip",
                "Ports": [
                    {
                        "Protocol": "tcp",
                        "TargetPort": 8080,
                        "PublishedPort": 8080,
                        "PublishMode": "ingress"
                    },
                    {
                        "Protocol": "tcp",
                        "TargetPort": 9990,
                        "PublishedPort": 9990,
                        "PublishMode": "ingress"
                    }
                ]
            }
        },
        "Endpoint": {
            "Spec": {
                "Mode": "vip",
                "Ports": [
                    {
                        "Protocol": "tcp",
                        "TargetPort": 8080,
                        "PublishedPort": 8080,
                        "PublishMode": "ingress"
                    },
                    {
                        "Protocol": "tcp",
                        "TargetPort": 9990,
                        "PublishedPort": 9990,
                        "PublishMode": "ingress"
                    }
                ]
            },
            "Ports": [
                {
                    "Protocol": "tcp",
                    "TargetPort": 8080,
                    "PublishedPort": 8080,
                    "PublishMode": "ingress"
                },
                {
                    "Protocol": "tcp",
                    "TargetPort": 9990,
                    "PublishedPort": 9990,
                    "PublishMode": "ingress"
                }
            ],
            "VirtualIPs": [
                {
                    "NetworkID": "i41xh4kmuwl5vc47h536l3mxs",
                    "Addr": "10.255.0.10/16"
                },
                {
                    "NetworkID": "b0ig9m1qsjax95tp9m1i2m4yo",
                    "Addr": "10.0.0.2/24"
                }
            ]
        }
    }
]
```

Logs for the service are redirected to CloudWatch and thus cannot be seen using `docker service logs`. This will be fixed with https://github.com/moby/moby/issues/30691[#30691]. Let's view the logs using using https://console.aws.amazon.com/cloudwatch/home?#logs:prefix=Docker[CloudWatch Logs].

.CloudWatch log group
image::docker-aws-10.png[]

Select the log group:

.CloudWatch log stream
image::docker-aws-11.png[]

Pick `webapp_web.xxx` log stream to see the log statements from WildFly Swarm:

.CloudWatch application log stream
image::docker-aws-12.png[]

== Access application

Application is accessed using manager's IP address and on port 8080. By default, the port 8080 is not open. 

In https://console.aws.amazon.com/ec2/v2/home?#Instances:search=docker;sort=instanceState[EC2 Console], select an EC2 instance with name `Docker-Manager`, click on `Docker-Managerxxx` in `Security groups`. Click on `Inbound`, `Edit`, `Add Rule`, and create a rule to enable TCP traffic on port 8080.

.Open port 8080 in Docker manager
image::docker-aws-13.png[]

Click on `Save` to save the rules.

Now, the application is accessible using the command `curl -v http://ec2-34-200-216-30.compute-1.amazonaws.com:8080/resources/employees` and shows output:

```
*   Trying 34.200.216.30...
* TCP_NODELAY set
* Connected to ec2-34-200-216-30.compute-1.amazonaws.com (34.200.216.30) port 8080 (#0)
> GET /resources/employees HTTP/1.1
> Host: ec2-34-200-216-30.compute-1.amazonaws.com:8080
> User-Agent: curl/7.51.0
> Accept: */*
> 
< HTTP/1.1 200 OK
< Connection: keep-alive
< Content-Type: application/xml
< Content-Length: 478
< Date: Sat, 07 Oct 2017 02:53:11 GMT
< 
* Curl_http_done: called premature == 0
* Connection #0 to host ec2-34-200-216-30.compute-1.amazonaws.com left intact
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><collection><employee><id>1</id><name>Penny</name></employee><employee><id>2</id><name>Sheldon</name></employee><employee><id>3</id><name>Amy</name></employee><employee><id>4</id><name>Leonard</name></employee><employee><id>5</id><name>Bernadette</name></employee><employee><id>6</id><name>Raj</name></employee><employee><id>7</id><name>Howard</name></employee><employee><id>8</id><name>Priya</name></employee></collection>
```

== Shutdown application

Shutdown the application using the command `docker -H localhost:2374 stack rm webapp`:

```
Removing service webapp_db
Removing service webapp_web
Removing network webapp_default
```

This stops the container in each service and removes the services. It also deletes any networks that were created as part of this application.

== Shutdown cluster

Docker cluster can be shutdown by deleting the stack created by CloudFormation:

.Delete CloudFormation template
image::docker-aws-14.png[]



================================================
FILE: Docker/additional-ressources/developer-tools/java/chapters/ch08-azure.adoc
================================================
:toc:

:imagesdir: images

= Docker for Azure



================================================
FILE: Docker/additional-ressources/developer-tools/java/chapters/ch08-cloud.adoc
================================================
:toc:

:imagesdir: images

= Docker Cloud

== Key Concepts

Docker Cloud is a SaaS that allows you to build, deploy and manage Docker containers in physical servers, virtual machine or cloud providers.

The main concepts of Docker Cloud are: 

- *Nodes* are individual Linux hosts/VMs used to deploy and run your applications. New nodes can be provisioned to increase the capacity. Docker Cloud does not provide hosting services. Nodes are provisioned using physical servers, virtual machine or cloud providers.
- *Node Clusters* are logical groups of nodes of the same type. Node Clusters allow to scale the infrastructure easily by provisioning more nodes.
- *Services* are logical groups of containers from the same image. Services make it simple to scale your application across different nodes.

This chapter will show how to use TomEE Docker image and deploy it using Docker Cloud CLI.

=== Docker Cloud CLI

Install Docker Cloud CLI following the https://docs.docker.com/docker-cloud/installing-cli/[instructions].

== Create new Docker Cloud Node

Create a new node cluster:

[source, text]
----
docker-cloud nodecluster create -t 1 --tag wildfly wildfly-node aws us-west-1 m3.large
----

This node cluster has a single node (`-t 1`) and uses the tag "`wildfly`" (`--tag wildfly`). Last four parameters are nodecluster name (`couchbase-node`), provider (`aws`), region (`us-west-1`) and node type (`m3.large`).

Each node in this node cluster will be given the assigned tag. This will be used later to assign services to a specific node or node cluster.

Deploying a node can take a few minutes. Current status can also be seen https://cloud.docker.com/app/arungupta/nodecluster/list/1?page_size=10[Docker Cloud dashboard]:

image::docker-cloud-nodecluster.png[]

== Create a new Docker Cloud Service

Create a Docker Cloud Service:

[source, text]
----
docker-cloud service create --name wildfly --tag wildfly -p 8080:8080 jboss/wildfly
124aa470-4e44-4f19-b0f0-d0c2616510a7
----

https://cloud.docker.com/app/arungupta/service/list/1?name__icontains=wildfly&page=1&page_size=10[Docker Cloud dashboard] will look like:

image::docker-cloud-services.png[]

Start the Service:

[source, text]
----
docker-cloud service start 124aa470-4e44-4f19-b0f0-d0c2616510a7
----

Check the service logs:

[source, text]
----
docker-cloud service logs 124aa470-4e44-4f19-b0f0-d0c2616510a7
----

It shows the output as:

[source, text]
----
wildfly-1 | 2017-02-04T00:00:22.752881989Z =========================================================================
wildfly-1 | 2017-02-04T00:00:22.752982683Z 
wildfly-1 | 2017-02-04T00:00:22.753058247Z   JBoss Bootstrap Environment
wildfly-1 | 2017-02-04T00:00:22.753149954Z 
wildfly-1 | 2017-02-04T00:00:22.753228180Z   JBOSS_HOME: /opt/jboss/wildfly
wildfly-1 | 2017-02-04T00:00:22.753313935Z 
wildfly-1 | 2017-02-04T00:00:22.753385039Z   JAVA: /usr/lib/jvm/java/bin/java
wildfly-1 | 2017-02-04T00:00:22.753537123Z 
wildfly-1 | 2017-02-04T00:00:22.753926931Z   JAVA_OPTS:  -server -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true

. . .

wildfly-1 | 2017-02-04T00:00:28.062486850Z 00:00:28,062 INFO  [org.jboss.ws.common.management] (MSC service thread 1-2) JBWS022052: Starting JBossWS 5.1.5.Final (Apache CXF 3.1.6) 
wildfly-1 | 2017-02-04T00:00:28.360806943Z 00:00:28,359 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0060: Http management interface listening on http://127.0.0.1:9990/management
wildfly-1 | 2017-02-04T00:00:28.361466490Z 00:00:28,360 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0051: Admin console listening on http://127.0.0.1:9990
wildfly-1 | 2017-02-04T00:00:28.362342136Z 00:00:28,361 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: WildFly Full 10.1.0.Final (WildFly Core 2.2.0.Final) started in 5505ms - Started 331 of 577 services (393 services are lazy, passive or on-demand)
----

== Access WildFly Server in Docker Cloud

Inspect the Docker Cloud service for the exposed container ports:

```
docker-cloud service inspect 124aa470-4e44-4f19-b0f0-d0c2616510a7 | jq ".container_ports"
```

This shows the output as:

```
[
  {
    "protocol": "tcp",
    "outer_port": 8080,
    "inner_port": 8080,
    "port_name": "http-alt",
    "published": true,
    "endpoint_uri": "http://wildfly.124aa470.svc.dockerapp.io:8080/"
  }
]
```

Access the main page of TomEE at http://wildfly.124aa470.svc.dockerapp.io:8080/ to see:

image::docker-cloud-wildfly.png[]

== Terminate the Docker Cloud Service and Node

Check the list of Docker Cloud services running using the command `docker-cloud service ps`:

```
NAME     UUID      STATUS       #CONTAINERS  IMAGE                 DEPLOYED       PUBLIC DNS                           STACK
wildfly  124aa470  ▶ Running              1  jboss/wildfly:latest  7 minutes ago  wildfly.124aa470.svc.dockerapp.io
```

Use the UUID to terminate the service:

[source, text]
----
docker-cloud service terminate 124aa470
----

Check the list of nodes using `docker-cloud node ls` command:

```
UUID      FQDN                                                    LASTSEEN        STATUS      CLUSTER       DOCKER_VER
0240951d  0240951d-27b6-4295-8ff8-ea443d668765.node.dockerapp.io  28 seconds ago  ▶ Deployed  wildfly-node  1.11.2-cs5
```

Terminate the node as:

```
docker-cloud node rm 0240951d
```

Check the list of nodecluster using `docker-cloud nodecluster ls` command:

```
NAME          UUID      REGION     TYPE      DEPLOYED        STATUS           CURRENT#NODES    TARGET#NODES
wildfly-node  fb2f6292  us-west-1  m3.large  23 minutes ago  Empty cluster                0               0
```

Remove the nodecluster as:

```
docker-cloud nodecluster rm wildfly-node
```




================================================
FILE: Docker/additional-ressources/developer-tools/java/chapters/ch09-cicd.adoc
================================================
:toc:

:imagesdir: images

= CI/CD using Docker

*PURPOSE*: This chapter explains how to use Jenkins and Docker to run continuous integration and continuous delivery.

There are several possible approaches to run Docker builds with Jenkins:

. Install Jenkins on your Docker host machine. Run Docker commands from your build, either using one of the several Jenkins Docker plugins, or by running Docker commands from a build step.
. Install Jenkins on your host machine and have a Jenkins slave machine with Docker installed to run your Docker builds
. Run Jenkins on Docker and use the underlying Docker installed on the host to run Docker commands.

NOTE: Another option is running Jenkins on Docker and do a complete Docker installation inside the Jenkins Docker container. This technique is called Docker in Docker and it is usually a bad idea. There are several discussions about the problems with this approach, like this one: http://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/ . A better approach is using Docker outside of Docker, as explained here: http://container-solutions.com/running-docker-in-jenkins-in-docker/

== Run Jenkins on Docker

In this example, we will run Jenkins on Docker and use the underlying Docker installed on the host to run Docker commands. This technique is known as Docker outside of Docker.

First, clone the project:

    git clone https://github.com/fabianenardon/jenkins-docker-demo

Then, in the project folder, run:

    docker-compose up

NOTE: if running on Windows, run `dos2unix plugins.txt` before running `docker-compose up`, to avoid possible errors if your file is in the Windows format.

Wait for jenkins to start and then go to the browser and open `http://localhost:8081`. Jenkins should be running.

The Jenkins installation on this lab comes pre-configured. To login use the username `jenkins` and the password `jenkins`.

== Running integration tests Jenkins

For this Continuous Integration demo, we will run a simple application that saves data on MongoDB. We will then run integration tests to check if the data was correctly saved on the database.

When running integration tests, you want to test your application in an environment as close to production as possible, so you can test interactions between the several components, services, databases, network communication, etc. Fortunately, docker can help you a lot with integration tests. There are several strategies to run integration tests, but in this application we are going to use the following:

. Start the services with a `docker-compose.yml` file created for testing purposes. This file won't have any volumes mapped, so when the test is over, no state will be saved. The test `docker-compose.yml` file won't publish any port on the host machine, so we can run simultaneous tests.
. Run the application, using the services started with the `docker-compose.yml` test file.
. Run Maven integration tests to check if the application execution produced the expected results. This will be done by checking what was saved on the MongoDB database.
. Stop the services. No state will be stored, so next time you run the integration tests, you will have a clean environment.

Create a new job on jenkins:

. Select Freestyle project
+
image::docker-ci-cd-01.png[]
+
. In Source Code Management, select Git and add the repository URL: `https://github.com/fabianenardon/mongo-docker-demo.git`
+
image::docker-ci-cd-02.png[]
+
. In Build, select Add build step and select Execute shell
+
image::docker-ci-cd-03.png[]
+
. In the shell Command, add these instructions:
+
[source, text]
----
cd sample

# Generates the images
sudo /var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/maven/bin/mvn clean install -Papp-docker-image

# Starts the mongo service. The -p option allows multiple builds to run at the same time, 
# since we can start multiple instances of the containers
sudo docker-compose -p app-$BUILD_NUMBER --file src/test/resources/docker-compose.yml up -d mongo

# Waits for containers to start
sleep 30

# Run the application
sudo docker-compose -p app-$BUILD_NUMBER --file src/test/resources/docker-compose.yml \
     run mongo-docker-demo \
     java -jar /maven/jar/mongo-docker-demo-1.0-SNAPSHOT-jar-with-dependencies.jar mongo 

# Run the integration tests
sudo docker-compose -p app-$BUILD_NUMBER --file src/test/resources/docker-compose.yml \
     run mongo-docker-demo-tests \
     mvn -f /maven/code/pom.xml -Dmaven.repo.local=/m2/repository \
     -Pintegration-test verify 
----
+
. Click on Add post-build action and select Execute a set of scripts
+
image::docker-ci-cd-04.png[]
+
. In Post-build Actions, select Execute shell
+
image::docker-ci-cd-05.png[]
+
. In the Command box, add:
+
[source, text]
----
cd sample
sudo docker-compose -p app-$BUILD_NUMBER --file src/test/resources/docker-compose.yml down
----
+
. Uncheck the `Execute script only if build succeeds` and `Execute script only if build fails` options, so this script will run always when the build ends. This way, we make sure to always stop the services.
+
[NOTE]
====
. The `-p app-$BUILD_NUMBER` option allows multiple builds to run at the same time, since we can start multiple instances of the containers. We are using Jenkins $BUILD_NUMBER variable to isolate the containers. This way, each set of services will run on its own network.
. We are running the commands with sudo because we are actually running the Docker socket on the host. Jenkins runs with the jenkins user and we added the jenkins user to the sudoers list in our image. Obviously, this can have security consequences in a production environment, since one could create a build that would access root level services on the host. You can avoid this by configuring the jenkins user on the host, so it will have access to the Docker socket and then run the commands without sudo.
====
+
. Save the build and then click on `Build now` to run it. You should see a progress bar when the build is running. You can click on the progress bar to see the build console output.
+
image::docker-ci-cd-06.png[]
+
. If the build is successful, you should see this on the build console output:
+
image::docker-ci-cd-07.png[]

== Run integration tests outside Jenkins

When creating integration tests, it is useful to be able to run and debug them outside Jenkins. In order to do that, you can simply run the same commands you ran in the Jenkins build:

[source, text]
----
cd jenkins_home/workspace/ci-test/sample

# Generates the images
mvn -f pom.xml clean install -Papp-docker-image

# Starts mongo service
docker-compose --file src/test/resources/docker-compose.yml up -d mongo 

# Waits for services do start
sleep 30

# Run our application
docker-compose --file src/test/resources/docker-compose.yml \
               run mongo-docker-demo \
               java -jar /maven/jar/mongo-docker-demo-1.0-SNAPSHOT-jar-with-dependencies.jar mongo 

# Run our integration tests
docker-compose --file src/test/resources/docker-compose.yml \
               run mongo-docker-demo-tests mvn -f /maven/code/pom.xml \
               -Dmaven.repo.local=/m2/repository -Pintegration-test verify 

# Stop all the services
docker-compose --file src/test/resources/docker-compose.yml down
----

== Debug integration tests outside Jenkins

You can debug integration tests. This can be achieved by making your test wait for a connection at a port for debugging. You can then attach your IDE to this port and debug. The source code for this project is available at https://github.com/fabianenardon/mongo-docker-demo.git.

You need to start Mongo service and run the application again as shown in previous section.

Here is how you can debug tests in NetBeans:

. Run the integration tests in debug mode with the command shown below:
+
```
# Run integration tests in debug mode
docker run -v ~/.m2/repository:/m2/repository \
       -p 5005:5005 --link mongo:mongo \
       --net resources_default mongo-docker-demo-tests \
       mvn -f /maven/code/pom.xml \
       -Dmaven.repo.local=/m2/repository \
       -Pintegration-test verify -Dmaven.failsafe.debug
```
+
This command will wait for a connection at port 5005 for debugger.
+
. Open the project in NetBeans and setup breakpoint in your test code:
+
image::docker-ci-cd-08.png[]
+
. Use `Debug` menu item to attach the debugger:
+
image::docker-ci-cd-09.png[]
+
. Attach the debugger by specifying the correct value of `host` and `port`:
+
image::docker-ci-cd-10.png[]
+
. Hit a breakpoint in tests:
+
image::docker-ci-cd-11.png[]

== Continuous delivery with Jenkins

Continuous Delivery strategies depend greatly on the application architecture. With a dockerized application like the one in our demo, the continuous delivery strategy could be to publish a new version of the application image if the tests passed. This way, next time the application runs on production, the new image will be downloaded and automatically deployed. You can publish images with Jenkins just like you invoked all the other docker commands in the build.




================================================
FILE: Docker/additional-ressources/developer-tools/java/chapters/ch10-monitoring.adoc
================================================
:toc:

:imagesdir: images

= Monitoring Docker Containers

This chapter will cover different ways to monitor a Docker container.

== Docker CLI

`docker container stats` command displays a live stream of container(s) runtime metrics. The command supports CPU, memory usage, memory limit, and network IO metrics.

. Start a container: `docker container run --name web -d jboss/wildfly:10.1.0.Final`
. Check the container stats using `docker container stats web`. It shows the output as:
+
```
CONTAINER           CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
web                 0.14%               274.9MiB / 1.952GiB   13.75%              828B / 0B           96.7MB / 4.1kB      53
```
+
The output is continually updated. It shows:
+
.. Container name
.. Percent CPU utilization
.. Total memory usage vs amount available to the container
.. Percent memory utilization
.. Network activity
.. Disk activity
.. PIDS??
+
. Check stats for multiple containers
.. Terminate single instance of the container
+
```
docker container stop web
docker container rm web
```
+
.. Create a service with multiple replicas of the container
+
```
docker swarm init
docker service create --name=web jboss/wildfly
```
+
.. Now check the stats again:
+
```
docker stats
```
+
to see the output:
+
```
CONTAINER           CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
1f9d5a1c08a8        0.24%               294.9MiB / 1.952GiB   14.75%              828B / 0B           96.5MB / 4.1kB      115
```
+
Note that the container id is shown instead of container's name in this case.
+
. Scale the service to 3 replicas:
+
```
docker service scale web=3
```
+
. The stats are now shown for all three containers:
+
```
CONTAINER           CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
1f9d5a1c08a8        0.14%               287.8MiB / 1.952GiB   14.40%              1.03kB / 0B         96.5MB / 4.1kB      53
a3395efbb6ff        0.77%               263.4MiB / 1.952GiB   13.18%              578B / 0B           0B / 4.1kB          114
f484ff2f4c12        0.06%               294.8MiB / 1.952GiB   14.75%              578B / 0B           0B / 4.1kB          114
```
+
. Display only container id and percent CPU utilization using the command `docker container stats --format "{{.Container}}: {{.CPUPerc}}"`:
+
```
55198043b6aa: 0.10%
5b5dd33b675d: 0.11%
6e98a9597e6a: 0.10%
```
+
. Format the output in a table. The results should include container name, percent CPU utilization and percent memory utilization. This can be achieved using the command:
+
```
docker container stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"
```
+
It shows the output:
+
```
NAME                              CPU %               MEM USAGE / LIMIT
web.2.1ic0vevvvu2nwwyc6css58ref   0.10%               267.5MiB / 1.952GiB
web.3.pwcgr58s1xo28gwa1znlrn2s3   0.11%               274.7MiB / 1.952GiB
web.1.bg1dcwagl9tzz0azuegxzoys8   0.12%               274MiB / 1.952GiB
```
+
. Display only the first result using the command `docker container stats --no-stream`:
+
```
CONTAINER           CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
55198043b6aa        0.12%               267.5MiB / 1.952GiB   13.39%              1.44kB / 0B         0B / 4.1kB          51
5b5dd33b675d        0.07%               274.7MiB / 1.952GiB   13.75%              1.51kB / 0B         0B / 4.1kB          51
6e98a9597e6a        0.26%               274.1MiB / 1.952GiB   13.71%              1.69kB / 0B         0B / 4.1kB          51
```

== Docker Remote API

Docker Remote API provides a lot more details about the health of the container. It can be invoked using the following format:

    curl --unix-socket /var/run/docker.sock http://localhost/containers/<name>/stats

On Docker for Mac, enabling remote HTTP API still requires a few steps. So this command uses the `--unix-socket` option to invoke the Remote API.

A specific invocation for a container can be done as:

    curl --unix-socket /var/run/docker.sock http://localhost/containers/web.1.bg1dcwagl9tzz0azuegxzoys8/stats

Note, the container name is from the previous run of the service. It will show the output:

```
{"read":"2017-10-13T14:08:38.045217731Z","preread":"0001-01-01T00:00:00Z","pids_stats":{"current":51},"blkio_stats":{"io_service_bytes_recursive":[{"major":8,"minor":0,"op":"Read","value":0},{"major":8,"minor":0,"op":"Write","value":4096},{"major":8,"minor":0,"op":"Sync","value":0},{"major":8,"minor":0,"op":"Async","value":4096},{"major":8,"minor":0,"op":"Total","value":4096}],"io_serviced_recursive":[{"major":8,"minor":0,"op":"Read","value":0},{"major":8,"minor":0,"op":"Write","value":1},{"major":8,"minor":0,"op":"Sync","value":0},{"major":8,"minor":0,"op":"Async","value":1},{"major":8,"minor":0,"op":"Total","value":1}],"io_queue_recursive":[],"io_service_time_recursive":[],"io_wait_time_recursive":[],"io_merged_recursive":[],"io_time_recursive":[],"sectors_recursive":[]},"num_procs":0,"storage_stats":{},"cpu_stats":{"cpu_usage":{"total_usage":11130296115,"percpu_usage":[2687118654,3014514615,2971860160,2456802686],"usage_in_kernelmode":2700000000,"usage_in_usermode":7630000000},"system_cpu_usage":952826800000000,"online_cpus":4,"throttling_data":{"periods":0,"throttled_periods":0,"throttled_time":0}},"precpu_stats":{"cpu_usage":{"total_usage":0,"usage_in_kernelmode":0,"usage_in_usermode":0},"throttling_data":{"periods":0,"throttled_periods":0,"throttled_time":0}},"memory_stats":{"usage":288051200,"max_usage":297189376,"stats":{"active_anon":283893760,"active_file":0,"cache":135168,"dirty":16384,"hierarchical_memory_limit":9223372036854771712,"hierarchical_memsw_limit":9223372036854771712,"inactive_anon":0,"inactive_file":135168,"mapped_file":32768,"pgfault":83204,"pgmajfault":0,"pgpgin":78441,"pgpgout":9093,"rss":283914240,"rss_huge":0,"swap":0,"total_active_anon":283893760,"total_active_file":0,"total_cache":135168,"total_dirty":16384,"total_inactive_anon":0,"total_inactive_file":135168,"total_mapped_file":32768,"total_pgfault":83204,"total_pgmajfault":0,"total_pgpgin":78441,"total_pgpgout":9093,"total_rss":283914240,"total_rss_huge":0,"total_swap":0,"total_unevictable":0,"total_writeback":0,"unevictable":0,"writeback":0},"limit":2095874048},"name":"/web.1.bg1dcwagl9tzz0azuegxzoys8","id":"6e98a9597e6af085e73a4d211fff9a164aa012727a46525d4fbaa164b572e23f","networks":{"eth0":{"rx_bytes":1882,"rx_packets":37,"rx_errors":0,"rx_dropped":0,"tx_bytes":0,"tx_packets":0,"tx_errors":0,"tx_dropped":0}}}
```

As you can see, far more details about container's health are shown here. These stats are refereshed every one second. The continuous refresh of metrics can be terminated using `Ctrl + C`.

== Docker Events

`docker system events` provide real time events for the Docker host.

. In one terminal (T1), type `docker system events`. The command does not show output and waits for any event worth reporting to occur. The list of events is listed at https://docs.docker.com/engine/reference/commandline/events/#/extended-description.
. In a new terminal (T2), kill existing container using `docker service scale web=2`.
. T1 shows the updated list of events as:
+
```
2017-10-13T07:12:00.223791013-07:00 service update r4i0x8ujnn2q8osj8dowgvw72 (name=web, replicas.new=2, replicas.old=3)
2017-10-13T07:12:00.332724880-07:00 container kill 5b5dd33b675d3b6be3e6aaf0ecde928b3ac882b0a221ff71e57c86faae8181ab (build-date=20170911, com.docker.swarm.node.id=wgujclh0492kkszpil81d3ugb, com.docker.swarm.service.id=r4i0x8ujnn2q8osj8dowgvw72, com.docker.swarm.service.name=web, com.docker.swarm.task=, com.docker.swarm.task.id=pwcgr58s1xo28gwa1znlrn2s3, com.docker.swarm.task.name=web.3.pwcgr58s1xo28gwa1znlrn2s3, image=jboss/wildfly:latest@sha256:d3af084d024753e4799809c10cd188f675a5b254a8e279b34709035b95d27dc7, license=GPLv2, name=web.3.pwcgr58s1xo28gwa1znlrn2s3, signal=15, vendor=CentOS)
2017-10-13T07:12:00.613143701-07:00 container die 5b5dd33b675d3b6be3e6aaf0ecde928b3ac882b0a221ff71e57c86faae8181ab (build-date=20170911, com.docker.swarm.node.id=wgujclh0492kkszpil81d3ugb, com.docker.swarm.service.id=r4i0x8ujnn2q8osj8dowgvw72, com.docker.swarm.service.name=web, com.docker.swarm.task=, com.docker.swarm.task.id=pwcgr58s1xo28gwa1znlrn2s3, com.docker.swarm.task.name=web.3.pwcgr58s1xo28gwa1znlrn2s3, exitCode=0, image=jboss/wildfly:latest@sha256:d3af084d024753e4799809c10cd188f675a5b254a8e279b34709035b95d27dc7, license=GPLv2, name=web.3.pwcgr58s1xo28gwa1znlrn2s3, vendor=CentOS)
2017-10-13T07:12:00.897831488-07:00 network disconnect 8f8e6ce771d6db6065f2472a7e83612ff6a657de3b6d08dab0617b8a596234fa (container=5b5dd33b675d3b6be3e6aaf0ecde928b3ac882b0a221ff71e57c86faae8181ab, name=bridge, type=bridge)
2017-10-13T07:12:01.017523717-07:00 container stop 5b5dd33b675d3b6be3e6aaf0ecde928b3ac882b0a221ff71e57c86faae8181ab (build-date=20170911, com.docker.swarm.node.id=wgujclh0492kkszpil81d3ugb, com.docker.swarm.service.id=r4i0x8ujnn2q8osj8dowgvw72, com.docker.swarm.service.name=web, com.docker.swarm.task=, com.docker.swarm.task.id=pwcgr58s1xo28gwa1znlrn2s3, com.docker.swarm.task.name=web.3.pwcgr58s1xo28gwa1znlrn2s3, image=jboss/wildfly:latest@sha256:d3af084d024753e4799809c10cd188f675a5b254a8e279b34709035b95d27dc7, license=GPLv2, name=web.3.pwcgr58s1xo28gwa1znlrn2s3, vendor=CentOS)
2017-10-13T07:12:01.023414108-07:00 container destroy 5b5dd33b675d3b6be3e6aaf0ecde928b3ac882b0a221ff71e57c86faae8181ab (build-date=20170911, com.docker.swarm.node.id=wgujclh0492kkszpil81d3ugb, com.docker.swarm.service.id=r4i0x8ujnn2q8osj8dowgvw72, com.docker.swarm.service.name=web, com.docker.swarm.task=, com.docker.swarm.task.id=pwcgr58s1xo28gwa1znlrn2s3, com.docker.swarm.task.name=web.3.pwcgr58s1xo28gwa1znlrn2s3, image=jboss/wildfly:latest@sha256:d3af084d024753e4799809c10cd188f675a5b254a8e279b34709035b95d27dc7, license=GPLv2, name=web.3.pwcgr58s1xo28gwa1znlrn2s3, vendor=CentOS)
```
+
The output shows a list of events, one in each line. The events shown here are `container kill`, `container die`, `network disconnect`, `container stop`, and `container destroy`. Date and timestamp for each event is displayed at the beginning of the line. Other event specific information is displayed as well.
+
. In T2, scale the service back to 3 replicas: `docker service scale web=3`
. The output in T1 is updated to show:
+
```
2017-10-13T07:13:47.161848609-07:00 service update r4i0x8ujnn2q8osj8dowgvw72 (name=web, replicas.new=3, replicas.old=2)
2017-10-13T07:13:47.429074382-07:00 container create 0574d1fd74bef2e6fc54174e1fbeda25efd7ed270dce1d6dbede4ead19c7c485 (build-date=20170911, com.docker.swarm.node.id=wgujclh0492kkszpil81d3ugb, com.docker.swarm.service.id=r4i0x8ujnn2q8osj8dowgvw72, com.docker.swarm.service.name=web, com.docker.swarm.task=, com.docker.swarm.task.id=xcmylcwlag5vot4tp3l5z6oam, com.docker.swarm.task.name=web.3.xcmylcwlag5vot4tp3l5z6oam, image=jboss/wildfly:latest@sha256:d3af084d024753e4799809c10cd188f675a5b254a8e279b34709035b95d27dc7, license=GPLv2, name=web.3.xcmylcwlag5vot4tp3l5z6oam, vendor=CentOS)
2017-10-13T07:13:47.445010259-07:00 network connect 8f8e6ce771d6db6065f2472a7e83612ff6a657de3b6d08dab0617b8a596234fa (container=0574d1fd74bef2e6fc54174e1fbeda25efd7ed270dce1d6dbede4ead19c7c485, name=bridge, type=bridge)
2017-10-13T07:13:47.778855117-07:00 container start 0574d1fd74bef2e6fc54174e1fbeda25efd7ed270dce1d6dbede4ead19c7c485 (build-date=20170911, com.docker.swarm.node.id=wgujclh0492kkszpil81d3ugb, com.docker.swarm.service.id=r4i0x8ujnn2q8osj8dowgvw72, com.docker.swarm.service.name=web, com.docker.swarm.task=, com.docker.swarm.task.id=xcmylcwlag5vot4tp3l5z6oam, com.docker.swarm.task.name=web.3.xcmylcwlag5vot4tp3l5z6oam, image=jboss/wildfly:latest@sha256:d3af084d024753e4799809c10cd188f675a5b254a8e279b34709035b95d27dc7, license=GPLv2, name=web.3.xcmylcwlag5vot4tp3l5z6oam, vendor=CentOS)
```
+
The list of events shown here are `container create`, `network connect`, and `container start`.

=== Use filters

The list of events can be restricted by filters specified using `--filter` or `-f` option. The currently supported filters are:

. container (`container=<name or id>`)
. daemon (`daemon=<name or id>`)
. event (`event=<event action>`)
. image (`image=<tag or id>`)
. label (`label=<key>` or `label=<key>=<value>`)
. network (`network=<name or id>`)
. plugin (`plugin=<name or id>`)
. type (`type=<container or image or volume or network or daemon>`)
. volume (`volume=<name or id>`)

Let's look at the list of running containers first using `docker container ls`, and then learn how to apply these filters.

Here is the list of running containers from the service:

```
CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS               NAMES
074447f26452        jboss/wildfly:latest   "/opt/jboss/wildfl..."   3 minutes ago       Up 3 minutes        8080/tcp            web.1.ytyv0gqi7dzxtetssrlsgvvbu
0574d1fd74be        jboss/wildfly:latest   "/opt/jboss/wildfl..."   8 minutes ago       Up 8 minutes        8080/tcp            web.3.xcmylcwlag5vot4tp3l5z6oam
55198043b6aa        jboss/wildfly:latest   "/opt/jboss/wildfl..."   25 minutes ago      Up 25 minutes       8080/tcp            web.2.1ic0vevvvu2nwwyc6css58ref
```

Let's apply the filters.

. Show events for a container by name
.. In T1, give the command to listen to a specific container as:
+
```
docker system events -f container=web.1.ytyv0gqi7dzxtetssrlsgvvbu
```
+
You may have to terminate previous run of `docker system events` using `Ctrl` + `C` to give this new command. 
+
.. In T2, terminate the second replica of the service as `docker container rm -f web.2.1ic0vevvvu2nwwyc6css58ref`. 
.. T1 does not show any events because its only listening for events from the first replica of the service.
. Show events for an event
.. In T1, give the command `docker system events -f event=create`.
.. In T2, scale the service by one more replica:
+
```
docker service scale web=4
```
.. T1 shows the event for container creation
+
```
2017-10-13T07:24:22.971050949-07:00 container create 84e4604ffd983cfcc53ad619b4c11156518834fe23e4a0a8b299905b978a0022 (build-date=20170911, com.docker.swarm.node.id=wgujclh0492kkszpil81d3ugb, com.docker.swarm.service.id=r4i0x8ujnn2q8osj8dowgvw72, com.docker.swarm.service.name=web, com.docker.swarm.task=, com.docker.swarm.task.id=38unfmcsxmnvr844gysn28lwa, com.docker.swarm.task.name=web.4.38unfmcsxmnvr844gysn28lwa, image=jboss/wildfly:latest@sha256:d3af084d024753e4799809c10cd188f675a5b254a8e279b34709035b95d27dc7, license=GPLv2, name=web.4.38unfmcsxmnvr844gysn28lwa, vendor=CentOS)
```
+
This is accurate as a new container is created and the event is shown in T1 console.
.. In T2, scale the service back to 2 using the command `docker servie scale web=2`
.. T1 does not show any additional events because its only looking for create events
.. More samples are explained at https://docs.docker.com/engine/reference/commandline/events/#/filter-events-by-criteria.

== Prometheus

https://prometheus.io/[Prometheus] is an open-source systems monitoring and alerting toolkit. Prometheus collects metrics from monitored targets by scraping metrics from HTTP endpoints on these targets. Docker instance can be configured as Prometheus target.

Different targets to scrape are defined in the https://prometheus.io/docs/operating/configuration/[Prometheus configuration file]. Targets may be statically configured via the `static_configs` parameter in the configuration fle or dynamically discovered using one of the supported service-discovery mechanisms (Consul, DNS, Etcd, etc.).

Prometheus collects metrics from monitored targets by scraping metrics from HTTP endpoints on these targets. Since Prometheus also exposes data in the same manner about itself, it can also scrape and monitor its own health.

=== Docker metrics for Prometheus

Docker exposes Prometheus-compatible metrics on port `9323`. This support is only available as an experimental feature.

. For Docker for Mac, click on Docker icon in the status menu
. Select `Preferences...`, `Daemon`, `Advanced` tab
. Update daemon settings:
+
```
{
  "metrics-addr" : "0.0.0.0:9323",
  "experimental" : true
}
```
+
. Click on `Apply & Restart` to restart the daemon
+
image::prometheus-metrics-config.png[]
+
. Show the complete list of metrics using `curl http://localhost:9323/metrics`
. Show the list of engine metrics using `curl http://localhost:9323/metrics | grep engine`

==== Start Prometheus

In this section, we'll start Prometheus and use it to scrape it's own health.

. Create a new directory `prometheus` and change to that directory
. Create a text file `prometheus.yml` and use the following content
+
```
# A scrape configuration scraping a Node Exporter and the Prometheus server
# itself.
scrape_configs:
  # Scrape Prometheus itself every 5 seconds.
  - job_name: 'prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9090']
```
+
This configuration file scrapes data from the Prometheus container which will be started subsequently on port 9090.
+
. Start a single-replica Prometheus service:
+
```
docker service create \
  --replicas 1 \
  --name metrics \
  --mount type=bind,source=`pwd`/prometheus.yml,destination=/etc/prometheus/prometheus.yml \
  --publish 9090:9090/tcp \
  prom/prometheus
```
+
This will start the Prometheus container on port 9090.
+
. Prometheus dashboard is at http://localhost:9090. Check the list of enabled targets at http://localhost:9090/targets (also accessible from `Status` -> `Targets` menu).
+
image::prometheus-metrics-target.png[]
+
It shows that the Prometheus endpoint is available for scraping.
+
. Click on `Graph` and click on `-insert metric at cursor-` to see the list of metrics available:
+
image::prometheus-metrics1.png[]
+
These are all the metrics published by the Prometheus endpoint.
+
. Choose `http_request_total` metrics, click on `Execute`
+
image::prometheus-metrics2.png[]
+
. Switch from `Console` to `Graph`
+
image::prometheus-metrics3.png[]
+
. Change the duration from `1h` to `5m`
+
image::prometheus-metrics4.png[]
+
. Click on `Add Graph`, select a different metric, say `http_requests_duration_microseconds`, and click on `Execute`
+
image::prometheus-metrics5.png[]
+
. Switch from `Console` to `Graph` and change the duration from `1h` to `5m`
+
image::prometheus-metrics6.png[]
+
. Stop the container: `docker container rm -f metrics`

Multiple graphs can be added this way.

=== Node health

In this section, we'll start Prometheus node exporter that will publish machine metrics. Then we'll use Prometheus to scrape its health information about the node running Docker.

==== Start Node Exporter

. All containers need to use the same overlay network so that they can communicate with each other. Let's create an overlay network:
+
```
docker network create --driver overlay prom
```
+
. Start Prometheus node exporter:
+
```
docker service create --name node \
 --mode global \
 --mount type=bind,source=/proc,target=/host/proc \
 --mount type=bind,source=/sys,target=/host/sys \
 --mount type=bind,source=/,target=/rootfs \
 --network prom \
 --publish 9100:9100 \
 prom/node-exporter:v0.15.0 \
  --path.procfs /host/proc \
  --path.sysfs /host/sys \
  --collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($|/)"
```
+
A few observations in this command:
+
.. This is started as a global service such that it is started on all nodes of the cluster.
.. As explained in https://github.com/prometheus/node_exporter/issues/610, node exporter only works with host network on Mac OSX. This is not needed if you are running on Linux.
.. It uses the overlay network previously created.
.. It needs access to host's filesystems such that the metrics about the node can be published.

==== Restart Prometheus

. Update `prometheus.yml` to the following text:
+
```
global:
  scrape_interval: 10s
scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets:
        - 'localhost:9090'
  - job_name: 'node resources'
    dns_sd_configs:
      - names: ['tasks.node']
        type: 'A'
        port: 9100
    params:
      collect[]:
        - cpu
        - meminfo
        - diskstats
        - netdev
        - netstat

  - job_name: 'node storage'
    scrape_interval: 1m
    dns_sd_configs:
      - names: ['tasks.node']
        type: 'A'
        port: 9100
    params:
      collect[]:
        - filefd
        - filesystem
        - xfs
```
+
A few observations:
+
.. DNS-based service discovery is used to discover the scraper for node-exporter. This is further explained at https://prometheus.io/docs/operating/configuration/#<dns_sd_config>[dns_sd_configs]. A record-based queries are used to discover the service.
.. Two different jobs are created even though they are scraping from the same endpoint. This provides a more logical way to represent data.
+
. Terminate previously running Prometheus service:
+
```
docker service rm metrics
```
+
. Restart the Prometheus service, this time using the overlay network, as:
+
```
docker service create \
  --replicas 1 \
  --name metrics \
  --network prom \
  --mount type=bind,source=`pwd`/prometheus.yml,destination=/etc/prometheus/prometheus.yml \
  --publish 9090:9090/tcp \
  prom/prometheus
```

==== Check metrics

. Confirm that both the services have started:
+
```
ID                  NAME                MODE                REPLICAS            IMAGE                       PORTS
lzl41s2i66jd        metrics             replicated          1/1                 prom/prometheus:latest      *:9090->9090/tcp
dro3ncpyuchp        node                global              1/1                 prom/node-exporter:latest   
```
+
. Confirm that all the targets are configured correctly at http://localhost:9090/targets[Prometheus dashboard]:
+
image::prometheus-metrics-target2.png[]
+
. Now a lot more metrics, this time from the node, are also available:
+
image::prometheus-metrics7.png[]
+
Console output and graphs for all these metrics is now available:
+
image::prometheus-metrics8.png[]
+
Complete list of metrics is available at https://github.com/prometheus/node_exporter.

=== Query using PromQL (TODO)

Add some fun queries from https://prometheus.io/docs/querying/basics/.

== cAdvisor

https://github.com/google/cadvisor[cAdvisor] (Container Advisor) provides resource usage and performance characteristics running containers. Let's take a look on how cAdvisor can be used to get these metrics from containers.

. Run `cAdvisor`
+
```
docker container run \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:rw \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker/:/var/lib/docker:ro \
  --publish=8080:8080 \
  --detach=true \
  --name=cadvisor \
  google/cadvisor:latest
```
+
. Dashboard is available at http://localhost:8080
+
image::cadvisor-default-dashboard.png[]
+
. A high-level CPU and Memory utilization is shown. More details about CPU, memory, network and filesystem usage is shown in the same page. CPU usage looks like as shown:
+
image::cadvisor-cpu-snapshot.png[]
+
. All Docker containers are in `/docker` sub-container.
+
image::cadvisor-docker-metrics.png[]
+
Click on any of the containers and see more details about the container.

cAdvisor samples once a second and has historical data for only one minute. The data generated from https://github.com/google/cadvisor/blob/master/docs/storage/influxdb.md[cAdvisor can be exported to InfluxDB]. Optionally, you may use a Grafana front end to visualize the data as explained in https://www.brianchristner.io/how-to-setup-docker-monitoring/[How to setup Docker monitoring].

=== Prometheus and cAdvisor

cAdvisor also exposes container statistics as Prometheus metrics out of the box. By default, these metrics are served under the `/metrics` HTTP endpoint. Let's take a look at how these container metrics can be observed using Prometheus.

. Terminate previously running cAdvisor:
+
```
docker container rm -f cadvisor
```
+
. Start a new cAdvisor service, using the `prom` overlay network created earlier:
+
```
docker service create \
  --name cadvisor \
  --network prom \
  --mode global \
  --mount type=bind,source=/,target=/rootfs \
  --mount type=bind,source=/var/run,target=/var/run \
  --mount type=bind,source=/sys,target=/sys \
  --mount type=bind,source=/var/lib/docker,target=/var/lib/docker \
  google/cadvisor:latest
```
+
. Terminate the previously running Prometheus service:
+
```
docker service rm metrics
```
+
. The update `prometheus.yml` configuration file is:
+
```
global:
  scrape_interval: 10s
scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets:
        - 'localhost:9090'

  - job_name: 'node resources'
    dns_sd_configs:
      - names: ['tasks.node']
        type: 'A'
        port: 9100
    params:
      collect[]:
        - cpu
        - meminfo
        - diskstats
        - netdev
        - netstat

  - job_name: 'node storage'
    scrape_interval: 1m
    dns_sd_configs:
      - names: ['tasks.node']
        type: 'A'
        port: 9100
    params:
      collect[]:
        - filefd
        - filesystem
        - xfs

  - job_name: 'cadvisor'
    dns_sd_configs:
      - names: ['tasks.cadvisor']
        type: 'A'
        port: 8080
```
+
. Start the new Prometheus service
+
```
docker service create \
  --replicas 1 \
  --name metrics \
  --network prom \
  --mount type=bind,source=`pwd`/prometheus.yml,destination=/etc/prometheus/prometheus.yml \
  --publish 9090:9090/tcp \
  prom/prometheus
```
+
. Confirm that all the targets are configured correctly at http://localhost:9090/targets[Prometheus dashboard]:
+
image::prometheus-metrics-target3.png[]
+
Note, all four scrape endpoints are shown here.
+
. In Graphs, now, a lot more metrics, this time from cAdvisor, are also available:
+
image::prometheus-metrics9.png[]
+
Console output and graphs for all these metrics is now available:
+
image::prometheus-metrics10.png[]
+
Complete list of metrics is available at https://github.com/google/cadvisor.

Here is a basic query written using https://prometheus.io/docs/querying/basics/[PromQL] worth trying:

```
sum by (container_label_com_docker_swarm_node_id) (
  irate(
    container_cpu_usage_seconds_total{
      container_label_com_docker_swarm_service_name="metrics"
      }[1m]
  )
)
```

This shows the average amount of CPU used per minute by the service `metrics` aggregated over multiple CPUs. The graph will look as shown:

image::prometheus-metrics11.png[]


== Monitor Java Applications

This section will explain how an existing Java application can be updated to publish metrics and monitored by Prometheus.

Prometheus collects metrics from monitored targets by scraping metrics HTTP endpoints on these targets.

As discussed earlier, Prometheus collects metrics from monitored targets by scraping from an HTTP endpoint on these targets. By default, these metrics are expected to be published at `/metrics`. Any existing Java application can be updated to publish Prometheus-style metrics at this endpoint.

An link:ch05-compose.adoc#configuration-file[earlier chapter] explained a simple Java EE application that talks to a MySQL database. This application also publishes Prometheus-style metrics for the underlying JVM at `/metrics`. It also publishes application-specific metrics such as total number of times `GET /` and `GET /{id}` is called.

The complete set of JVM metrics are explained at https://github.com/prometheus/client_java. Refer to https://github.com/arun-gupta/docker-javaee/tree/master/employees/src/main/java/org/javaee/samples/employees/metrics for more details on how these metrics are enabled. 

=== Start Java application

. Use the link:ch05-compose.adoc#configuration-file[Compose file] to deploy a simple the Java EE application. This will start WildFly Swarm application and MySQL database.
+
    docker stack deploy --compose-file=docker-compose.yml webapp
+
This will create `webapp_default` overlay network, and start the `webapp_web` and `webapp_db` services.
+
. Verify the network:
+
```
$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
u6ybdaqx5h5y        webapp_default      overlay             swarm
```
+
Other networks may be shown here as well.
+
. Verify the services:
+
```
$ docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE                            PORTS
ucztcpf1vw0a        webapp_db           replicated          1/1                 mysql:8                          *:3306->3306/tcp
jttfgvr09kre        webapp_web          replicated          1/1                 arungupta/docker-javaee:latest   *:8080->8080/tcp,*:9990->9990/tcp
```
+
. Verify that the endpoint is accessible:
+
```
$ curl http://localhost:8080/resources/employees
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><collection><employee><id>1</id><name>Penny</name></employee><employee><id>2</id><name>Sheldon</name></employee><employee><id>3</id><name>Amy</name></employee><employee><id>4</id><name>Leonard</name></employee><employee><id>5</id><name>Bernadette</name></employee><employee><id>6</id><name>Raj</name></employee><employee><id>7</id><name>Howard</name></employee><employee><id>8</id><name>Priya</name></employee></collection>
```
+
. Access the metrics published by the endpoint using `curl http://localhost:8080/metrics` to see the output:
+
```
# HELP jvm_info JVM version info
# TYPE jvm_info gauge
jvm_info{version="1.8.0_141-8u141-b15-1~deb9u1-b15",vendor="Oracle Corporation",} 1.0
# HELP jvm_gc_collection_seconds Time spent in a given JVM garbage collector in seconds.
# TYPE jvm_gc_collection_seconds summary
jvm_gc_collection_seconds_count{gc="PS Scavenge",} 25.0
jvm_gc_collection_seconds_sum{gc="PS Scavenge",} 0.386
jvm_gc_collection_seconds_count{gc="PS MarkSweep",} 6.0
jvm_gc_collection_seconds_sum{gc="PS MarkSweep",} 0.546
# HELP process_cpu_seconds_total Total user and system CPU time spent in seconds.
# TYPE process_cpu_seconds_total counter
process_cpu_seconds_total 25.5
# HELP process_start_time_seconds Start time of the process since unix epoch in seconds.
# TYPE process_start_time_seconds gauge
process_start_time_seconds 1.508056592419E9
# HELP process_open_fds Number of open file descriptors.
# TYPE process_open_fds gauge
process_open_fds 499.0
# HELP process_max_fds Maximum number of open file descriptors.
# TYPE process_max_fds gauge
process_max_fds 1048576.0
# HELP process_virtual_memory_bytes Virtual memory size in bytes.
# TYPE process_virtual_memory_bytes gauge
process_virtual_memory_bytes 4.244393984E9
# HELP process_resident_memory_bytes Resident memory size in bytes.
# TYPE process_resident_memory_bytes gauge
process_resident_memory_bytes 5.06601472E8
# HELP jvm_classes_loaded The number of classes that are currently loaded in the JVM
# TYPE jvm_classes_loaded gauge
jvm_classes_loaded 13096.0
# HELP jvm_classes_loaded_total The total number of classes that have been loaded since the JVM has started execution
# TYPE jvm_classes_loaded_total counter
jvm_classes_loaded_total 13096.0
# HELP jvm_classes_unloaded_total The total number of classes that have been unloaded since the JVM has started execution
# TYPE jvm_classes_unloaded_total counter
jvm_classes_unloaded_total 0.0
# HELP jvm_threads_current Current thread count of a JVM
# TYPE jvm_threads_current gauge
jvm_threads_current 60.0
# HELP jvm_threads_daemon Daemon thread count of a JVM
# TYPE jvm_threads_daemon gauge
jvm_threads_daemon 12.0
# HELP jvm_threads_peak Peak thread count of a JVM
# TYPE jvm_threads_peak gauge
jvm_threads_peak 67.0
# HELP jvm_threads_started_total Started thread count of a JVM
# TYPE jvm_threads_started_total counter
jvm_threads_started_total 93.0
# HELP jvm_threads_deadlocked Cycles of JVM-threads that are in deadlock waiting to acquire object monitors or ownable synchronizers
# TYPE jvm_threads_deadlocked gauge
jvm_threads_deadlocked 0.0
# HELP jvm_threads_deadlocked_monitor Cycles of JVM-threads that are in deadlock waiting to acquire object monitors
# TYPE jvm_threads_deadlocked_monitor gauge
jvm_threads_deadlocked_monitor 0.0
# HELP jvm_memory_bytes_used Used bytes of a given JVM memory area.
# TYPE jvm_memory_bytes_used gauge
jvm_memory_bytes_used{area="heap",} 1.2072508E8
jvm_memory_bytes_used{area="nonheap",} 9.3550048E7
# HELP jvm_memory_bytes_committed Committed (bytes) of a given JVM memory area.
# TYPE jvm_memory_bytes_committed gauge
jvm_memory_bytes_committed{area="heap",} 2.69484032E8
jvm_memory_bytes_committed{area="nonheap",} 1.0133504E8
# HELP jvm_memory_bytes_max Max (bytes) of a given JVM memory area.
# TYPE jvm_memory_bytes_max gauge
jvm_memory_bytes_max{area="heap",} 4.66092032E8
jvm_memory_bytes_max{area="nonheap",} -1.0
# HELP jvm_memory_pool_bytes_used Used bytes of a given JVM memory pool.
# TYPE jvm_memory_pool_bytes_used gauge
jvm_memory_pool_bytes_used{pool="Code Cache",} 1.4589888E7
jvm_memory_pool_bytes_used{pool="Metaspace",} 6.9998048E7
jvm_memory_pool_bytes_used{pool="Compressed Class Space",} 8962112.0
jvm_memory_pool_bytes_used{pool="PS Eden Space",} 2.3732032E7
jvm_memory_pool_bytes_used{pool="PS Survivor Space",} 6073592.0
jvm_memory_pool_bytes_used{pool="PS Old Gen",} 9.0919456E7
# HELP jvm_memory_pool_bytes_committed Committed bytes of a given JVM memory pool.
# TYPE jvm_memory_pool_bytes_committed gauge
jvm_memory_pool_bytes_committed{pool="Code Cache",} 1.47456E7
jvm_memory_pool_bytes_committed{pool="Metaspace",} 7.5800576E7
jvm_memory_pool_bytes_committed{pool="Compressed Class Space",} 1.0788864E7
jvm_memory_pool_bytes_committed{pool="PS Eden Space",} 9.2274688E7
jvm_memory_pool_bytes_committed{pool="PS Survivor Space",} 3.8797312E7
jvm_memory_pool_bytes_committed{pool="PS Old Gen",} 1.38412032E8
# HELP jvm_memory_pool_bytes_max Max bytes of a given JVM memory pool.
# TYPE jvm_memory_pool_bytes_max gauge
jvm_memory_pool_bytes_max{pool="Code Cache",} 2.5165824E8
jvm_memory_pool_bytes_max{pool="Metaspace",} -1.0
jvm_memory_pool_bytes_max{pool="Compressed Class Space",} 1.073741824E9
jvm_memory_pool_bytes_max{pool="PS Eden Space",} 9.699328E7
jvm_memory_pool_bytes_max{pool="PS Survivor Space",} 3.8797312E7
jvm_memory_pool_bytes_max{pool="PS Old Gen",} 3.49700096E8
```
+
It shows all the JVM metrics that are published by the https://github.com/prometheus/client_java[Prometheus JVM Client]. The metrics generated by the application are not shown yet. It requires for the application to be accessed first.

Let's access the JVM metrics in Prometheus dashboard first, and then we'll access the app to show app-specific metrics.

=== Start Prometheus service

. Make sure to terminate any previously running Prometheus endpoints:
+
   docker service rm metrics
+
. Create a directory `prometheus` and change into that directory.
. Create a text file `prometheus.yml` and add the following content:
+
```
global:
  scrape_interval: 10s
scrape_configs:
  - job_name: 'webapp'
    dns_sd_configs:
      - names: ['tasks.webapp_web']
        type: 'A'
        port: 8080
```
+
This defines the configuration for the HTTP endpoint that publishes Prometheus-style metrics from the Java application.
+
. Start Prometheus service:
+
```
docker service create \
  --replicas 1 \
  --network webapp_default \
  --name metrics \
  --mount type=bind,source=`pwd`/prometheus.yml,destination=/etc/prometheus/prometheus.yml \
  --publish 9090:9090 \
  prom/prometheus
```
+
Note, this service is using the `webapp_default` overlay network that is created when the application stack was deployed.
+
. Access Prometheus dashboard at http://localhost:9090
. Check the configured targets at http://localhost:9090/targets:
+
image::prometheus-metrics-target4.png[]
+
It shows that the application metrics HTTP endpoint is configured as a Prometheus target.

=== View application metrics

. On Prometheus dashboard, click on `-insert metric at cursor-` to see the list of metrics available:
+
image::prometheus-metrics12.png[]
+
JVM metrics shown earlier are displayed here as well.
+
. Select `jvm_memory_pool_bytes_used` metric and click on `Execute` to view the metric.
+
image::prometheus-metrics13.png[]
+
. Select `Graph` to view the graphical representation
+
image::prometheus-metrics14.png[]
+
. Now access the application using `curl http://localhost:8080/resources/employees` a few times.
. Refresh Prometheus dashboard and see the updated list of metrics:
+
image::prometheus-metrics15.png[]
+
Note, `app*` and `requests*` that are generated by the application.
+
. Select `requests_get_all` metric and view the graph:
+
image::prometheus-metrics16.png[]
+
. Access the application a few times using `curl http://localhost:8080/resources/employees/5` and then watch the `requests_get_one` metric.

== Grafana

https://github.com/grafana/grafana[Grafana] is an open source metric analytics & visualization suite. It supports many different storage backends, called as Data Source. Prometheus can be added as Grafana data source. It even provides support for runnning Prometheus queries from the Grafana dashboard as well. More details can be found in http://docs.grafana.org/features/datasources/prometheus/[Using Prometheus in Grafana].

=== Start Grafana

This section will explain how to start Grafana, use Prometheus as the data source, and view some container metrics.

. Start Grafana:
+
```
docker container run \
  -d \
  -p 3000:3000 \
  --name=grafana \
  -e "GF_SECURITY_ADMIN_PASSWORD=secret" \
  grafana/grafana
```
+
Use the login name `admin` and password `secret`.
+
Read more details about different http://docs.grafana.org/installation/configuration/[configuration options].
+
. Access Grafana dashboard at http://localhost:3000. Use the login and password as credentials to see Grafana console.
+
image::grafana-metrics1.png[]

=== Add Prometheus as data source

. Click the `Add data source` button in the top header.
. Specify the parameters as shown:
+
image::grafana-metrics2.png[]
+
. Click on `Add` to test and save the data source:
+
image::grafana-metrics3.png[]
+
The green bar indicates that the data source was added successfully.

=== Create chart with Prometheus data source

. Click on `Create your first dashboard`, save it and give it a name, say `Docker and Java dashboard`
. Click on `Graph`, edit, under the `Metrics` tab, select your Prometheus data source.
. Enter the following Prometheus query expressions in the query field. The graphs will referesh in a few seconds and will look like as shown:
+
image::grafana-metrics4.png[]



================================================
FILE: Docker/additional-ressources/developer-tools/java/chapters/ch11-bigdata.adoc
================================================
:toc:

:imagesdir: images

= Big Data Processing with Docker and Hadoop

*PURPOSE*: This chapter explains how to use Docker to create a Hadoop cluster and a Big Data application in Java. It highlights several concepts like service scale, dynamic port allocation, container links, integration tests, debugging, etc.

Big Data applications usually involve distributed processing using tools like Hadoop or Spark. These services can be scaled up, running with several nodes to support more parallelism. Running tools like Hadoop and Spark on Docker makes it easy to scale them up and down. This is very useful to simulate a cluster on development time and also to run integration tests before taking your application to production.

The application on this example reads a file, count how many words are on that file using a MapReduce job implemented on Hadoop and then saves the result on a MongoDB database. In order to do that, we will run a Hadoop cluster and a MongoDB server on Docker.

[NOTE]
====
http://hadoop.apache.org/[Apache Hadoop] is an open-source software framework used for distributed storage and processing of big data sets using the MapReduce programming model. The core of Apache Hadoop consists of a storage part, known as Hadoop Distributed File System (HDFS), and a processing part which is a MapReduce programming model. Hadoop splits files into large blocks and distributes them across nodes in a cluster. It then transfers packaged code into nodes to process the data in parallel. The Hadoop framework itself is mostly written in Java.
====

== Clone the sample application

Clone the project at `https://github.com/fabianenardon/hadoop-docker-demo`

Inspect the `sample/docker/docker-compose.yml` file. It defines a MongoDB service and the services needed to run a Hadoop cluster. It also defines a service for our application. See how the services are linked together.

== Build the application

[source, text]
----
cd sample
mvn clean install -Papp-docker-image
----

In the command above, `-Papp-docker-image` will fire up the `app-docker-image` profile, defined in the application `pom.xml`. This profile will create a dockerized version of the application, creating two images:

. `docker-hadoop-example`: docker image used to run the application
. `docker-hadoop-example-tests`: docker image used to run integration tests

== Start all the services

Go to the `sample/docker` folder and start the services:

    cd docker
    docker-compose up -d

See the logs and wait until everything is up:

    docker-compose logs -f

Here is a sample output:

```
Attaching to docker_nodemanager_1, docker-hadoop-example, yarn, secondarynamenode, docker_datanode_1, namenode, mongo
docker-hadoop-example    | Usage: hdfs [--config confdir] [--loglevel loglevel] COMMAND
docker-hadoop-example    |        where COMMAND is one of:

. . .

nodemanager_1            | 17/10/11 18:26:27 INFO nodemanager.NodeManager: STARTUP_MSG: 
docker-hadoop-example    |   zkfc                 run the ZK Failover Controller daemon
nodemanager_1            | /************************************************************
docker-hadoop-example    |   datanode             run a DFS datanode
nodemanager_1            | STARTUP_MSG: Starting NodeManager
docker-hadoop-example    |   dfsadmin             run a DFS admin client
datanode_1               | 17/10/11 18:26:25 INFO datanode.DataNode: STARTUP_MSG: 
nodemanager_1            | STARTUP_MSG:   host = db2d63621ba4/172.23.0.8
namenode                 | FORMATTING NAMENODE

. . .

secondarynamenode        | STARTUP_MSG: Starting SecondaryNameNode
datanode_1               | STARTUP_MSG:   build = https://git-wip-us.apache.org/repos/asf/hadoop.git -r b165c4fe8a74265c792ce23f546c64604acf0e41; compiled by 'jenkins' on 2016-01-26T00:08Z
docker-hadoop-example    |   oev                  apply the offline edits viewer to an edits file
namenode                 | STARTUP_MSG:   build = https://git-wip-us.apache.org/repos/asf/hadoop.git -r b165c4fe8a74265c792ce23f546c64604acf0e41; compiled by 'jenkins' on 2016-01-26T00:08Z
nodemanager_1            | 17/10/11 18:26:27 INFO nodemanager.NodeManager: registered UNIX signal handlers for [TERM, HUP, INT]
secondarynamenode        | STARTUP_MSG:   host = secondarynamenode/172.23.0.5
datanode_1               | STARTUP_MSG:   java = 1.8.0_112

. . .

namenode                 | 17/10/11 18:27:31 INFO namenode.TransferFsImage: Transfer took 0.00s at 0.00 KB/s
namenode                 | 17/10/11 18:27:31 INFO namenode.TransferFsImage: Downloaded file fsimage.ckpt_0000000000000000015 size 946 bytes.
namenode                 | 17/10/11 18:27:31 INFO namenode.NNStorageRetentionManager: Going to retain 2 images with txid >= 0
secondarynamenode        | 17/10/11 18:27:32 INFO namenode.TransferFsImage: Uploaded image with txid 15 to namenode at http://namenode:50070 in 0.115 seconds
secondarynamenode        | 17/10/11 18:27:32 WARN namenode.SecondaryNameNode: Checkpoint done. New Image Size: 946
```

In order to see if everything is up, open `http://localhost:8088/cluster`. You should see 1 active node when everything is up and running.

image::docker-bigdata-03.png[]

== Running the application

This application reads a text file from HDFS and counts how many words it has. The result is saved on MongoDB.

First, create a folder on HDFS. We will save the file to be processed on it:

    docker-compose exec yarn hdfs dfs -mkdir /files/

In the command above, we are executing `hdfs dfs -mkdir /files/` on the service `yarn`. This command creates a new folder called `/files/` on HDFS, the distributed file system used by Hadoop.

Put the file we are going to process on HDFS:

[source, text]
----
docker-compose run docker-hadoop-example \
               hdfs dfs -put /maven/test-data/text_for_word_count.txt /files/
----

The `text_for_word_count.txt` file was added to the application image by maven when we built it, so we can use it to test. The command above will transfer the `text_for_word_count.txt` file from the local disk to the `/files/` folder on HDFS, so the Hadoop process can access it.

Run our application

[source, text]
----
docker-compose run docker-hadoop-example \
        hadoop jar /maven/jar/docker-hadoop-example-1.0-SNAPSHOT-mr.jar \
        hdfs://namenode:9000 /files mongo yarn:8050
----

The command above will run our jar file on the Hadoop cluster. The `hdfs://namenode:9000` parameter is the HDFS address. The `/files` parameter is where the file to process can be found on HDFS. The `mongo` parameter is the MongoDB host addre
Download .txt
gitextract_zw7rzu5x/

├── .gitmodules
├── CNAME
├── Cloud/
│   └── README.md
├── DevOps/
│   └── README.md
├── DevOpsDays/
│   └── readme.md
├── Docker/
│   ├── 12factor/
│   │   ├── 00_application.md
│   │   ├── 01_codebase.md
│   │   ├── 02_dependencies.md
│   │   ├── 03_configuration.md
│   │   ├── 04_external_services.md
│   │   ├── 05_build_release_run.md
│   │   ├── 06_processes.md
│   │   ├── 07_port_binding.md
│   │   ├── 08_concurrency.md
│   │   ├── 09_disposability.md
│   │   ├── 10_dev_prod_parity.md
│   │   ├── 11_logs.md
│   │   ├── 12_admin_processes.md
│   │   └── README.md
│   ├── Docker-Orchestration/
│   │   └── readme.md
│   ├── README.md
│   ├── additional-ressources/
│   │   ├── README.md
│   │   ├── developer-tools/
│   │   │   ├── README.md
│   │   │   ├── README_es.md
│   │   │   ├── java/
│   │   │   │   ├── chapters/
│   │   │   │   │   ├── appa-common-commands.adoc
│   │   │   │   │   ├── appb-troubleshooting.adoc
│   │   │   │   │   ├── appc-references.adoc
│   │   │   │   │   ├── ch01-setup.adoc
│   │   │   │   │   ├── ch02-basic-concepts.adoc
│   │   │   │   │   ├── ch03-build-image-java-9.adoc
│   │   │   │   │   ├── ch03-build-image.adoc
│   │   │   │   │   ├── ch04-run-container.adoc
│   │   │   │   │   ├── ch05-compose.adoc
│   │   │   │   │   ├── ch06-swarm.adoc
│   │   │   │   │   ├── ch07-eclipse.adoc
│   │   │   │   │   ├── ch07-intellij.adoc
│   │   │   │   │   ├── ch07-netbeans.adoc
│   │   │   │   │   ├── ch08-aws.adoc
│   │   │   │   │   ├── ch08-azure.adoc
│   │   │   │   │   ├── ch08-cloud.adoc
│   │   │   │   │   ├── ch09-cicd.adoc
│   │   │   │   │   ├── ch10-monitoring.adoc
│   │   │   │   │   └── ch11-bigdata.adoc
│   │   │   │   ├── readme.adoc
│   │   │   │   └── scripts/
│   │   │   │       └── docker-compose-pull-images.yml
│   │   │   ├── java-debugging/
│   │   │   │   ├── Eclipse-README.md
│   │   │   │   ├── Eclipse-README_es.md
│   │   │   │   ├── IntelliJ-README.md
│   │   │   │   ├── IntelliJ-README_es.md
│   │   │   │   ├── NetBeans-README.md
│   │   │   │   ├── NetBeans-README_es.md
│   │   │   │   ├── README.md
│   │   │   │   ├── README_es.md
│   │   │   │   ├── app/
│   │   │   │   │   ├── .gitignore
│   │   │   │   │   ├── pom.xml
│   │   │   │   │   └── src/
│   │   │   │   │       └── main/
│   │   │   │   │           ├── java/
│   │   │   │   │           │   └── com/
│   │   │   │   │           │       └── docker/
│   │   │   │   │           │           └── UserSignup/
│   │   │   │   │           │               ├── controller/
│   │   │   │   │           │               │   └── UserController.java
│   │   │   │   │           │               ├── model/
│   │   │   │   │           │               │   ├── User.java
│   │   │   │   │           │               │   └── UserLogin.java
│   │   │   │   │           │               ├── repository/
│   │   │   │   │           │               │   └── UserRepository.java
│   │   │   │   │           │               ├── service/
│   │   │   │   │           │               │   ├── UserService.java
│   │   │   │   │           │               │   └── UserServiceImpl.java
│   │   │   │   │           │               └── util/
│   │   │   │   │           │                   └── Rot13.java
│   │   │   │   │           ├── resources/
│   │   │   │   │           │   ├── META-INF/
│   │   │   │   │           │   │   └── persistence.xml
│   │   │   │   │           │   ├── jpaContext.xml
│   │   │   │   │           │   └── messages.properties
│   │   │   │   │           └── webapp/
│   │   │   │   │               ├── WEB-INF/
│   │   │   │   │               │   ├── config/
│   │   │   │   │               │   │   └── servletConfig.xml
│   │   │   │   │               │   ├── jsp/
│   │   │   │   │               │   │   ├── failure.jsp
│   │   │   │   │               │   │   ├── login.jsp
│   │   │   │   │               │   │   ├── signup.jsp
│   │   │   │   │               │   │   └── success.jsp
│   │   │   │   │               │   └── web.xml
│   │   │   │   │               ├── assets/
│   │   │   │   │               │   └── css/
│   │   │   │   │               │       └── bootstrap-united.css
│   │   │   │   │               ├── bootstrap/
│   │   │   │   │               │   ├── css/
│   │   │   │   │               │   │   ├── bootstrap-theme.css
│   │   │   │   │               │   │   └── bootstrap.css
│   │   │   │   │               │   └── js/
│   │   │   │   │               │       └── bootstrap.js
│   │   │   │   │               ├── datepicker/
│   │   │   │   │               │   ├── css/
│   │   │   │   │               │   │   └── datepicker.css
│   │   │   │   │               │   ├── js/
│   │   │   │   │               │   │   └── bootstrap-datepicker.js
│   │   │   │   │               │   └── less/
│   │   │   │   │               │       └── datepicker.less
│   │   │   │   │               ├── index.jsp
│   │   │   │   │               └── jquery-1.8.3.js
│   │   │   │   ├── docker-compose.yml
│   │   │   │   ├── images/
│   │   │   │   │   └── resizeImg.py
│   │   │   │   ├── registration-database/
│   │   │   │   │   ├── Dockerfile
│   │   │   │   │   ├── README.md
│   │   │   │   │   └── docker-entrypoint-initdb.d/
│   │   │   │   │       └── initialize_db.sql
│   │   │   │   └── registration-webserver/
│   │   │   │       ├── Dockerfile
│   │   │   │       ├── README.md
│   │   │   │       └── tomcat/
│   │   │   │           ├── mysql-connector-java-5.1.36-bin.jar
│   │   │   │           ├── run.sh
│   │   │   │           └── tomcat-users.xml
│   │   │   ├── nodejs/
│   │   │   │   └── porting/
│   │   │   │       ├── 1_node_application.md
│   │   │   │       ├── 2_application_image.md
│   │   │   │       ├── 3_publish_image.md
│   │   │   │       ├── 4_single_host_networking.md
│   │   │   │       ├── 5_multiple_hosts_networking.md
│   │   │   │       ├── 6_deploy_on_swarm.md
│   │   │   │       ├── README.md
│   │   │   │       └── summary.md
│   │   │   ├── nodejs-debugging/
│   │   │   │   ├── .gitignore
│   │   │   │   ├── README.md
│   │   │   │   ├── VSCode-README.md
│   │   │   │   └── app/
│   │   │   │       ├── Dockerfile
│   │   │   │       ├── app.js
│   │   │   │       ├── docker-compose.yml
│   │   │   │       ├── index.html
│   │   │   │       ├── layouts/
│   │   │   │       │   └── main.handlebars
│   │   │   │       └── package.json
│   │   │   └── ruby/
│   │   │       └── README.md
│   │   ├── dockercon-us-2017/
│   │   │   ├── README.md
│   │   │   ├── docker-cloud/
│   │   │   │   └── README.md
│   │   │   ├── docker-enterprise/
│   │   │   │   └── README.md
│   │   │   ├── docker-networking/
│   │   │   │   └── README.md
│   │   │   ├── docker-orchestration/
│   │   │   │   └── README.md
│   │   │   ├── securing-apps-docker-enterprise/
│   │   │   │   └── README.md
│   │   │   ├── template.md
│   │   │   ├── windows-101/
│   │   │   │   ├── README.md
│   │   │   │   └── tweet-app/
│   │   │   │       ├── Dockerfile
│   │   │   │       ├── index.html
│   │   │   │       └── start.ps1
│   │   │   ├── windows-modernize-aspnet-dev/
│   │   │   │   ├── .gitignore
│   │   │   │   ├── README.md
│   │   │   │   ├── v1-src/
│   │   │   │   │   ├── ProductLaunch/
│   │   │   │   │   │   ├── ProductLaunch.Core/
│   │   │   │   │   │   │   ├── Env.cs
│   │   │   │   │   │   │   ├── ProductLaunch.Core.csproj
│   │   │   │   │   │   │   └── Properties/
│   │   │   │   │   │   │       └── AssemblyInfo.cs
│   │   │   │   │   │   ├── ProductLaunch.EndToEndTests/
│   │   │   │   │   │   │   ├── App.config
│   │   │   │   │   │   │   ├── ProductLaunch.EndToEndTests.csproj
│   │   │   │   │   │   │   ├── Properties/
│   │   │   │   │   │   │   │   └── AssemblyInfo.cs
│   │   │   │   │   │   │   ├── ProspectSignUp.feature
│   │   │   │   │   │   │   ├── ProspectSignUp.feature.cs
│   │   │   │   │   │   │   ├── ProspectSignUpSteps.cs
│   │   │   │   │   │   │   └── packages.config
│   │   │   │   │   │   ├── ProductLaunch.Entities/
│   │   │   │   │   │   │   ├── Country.cs
│   │   │   │   │   │   │   ├── ProductLaunch.Entities.csproj
│   │   │   │   │   │   │   ├── Properties/
│   │   │   │   │   │   │   │   └── AssemblyInfo.cs
│   │   │   │   │   │   │   ├── Prospect.cs
│   │   │   │   │   │   │   └── Role.cs
│   │   │   │   │   │   ├── ProductLaunch.MessageHandlers.IndexProspect/
│   │   │   │   │   │   │   ├── App.config
│   │   │   │   │   │   │   ├── Config.cs
│   │   │   │   │   │   │   ├── Documents/
│   │   │   │   │   │   │   │   └── Prospect.cs
│   │   │   │   │   │   │   ├── Indexer/
│   │   │   │   │   │   │   │   └── Index.cs
│   │   │   │   │   │   │   ├── ProductLaunch.MessageHandlers.IndexProspect.csproj
│   │   │   │   │   │   │   ├── Program.cs
│   │   │   │   │   │   │   ├── Properties/
│   │   │   │   │   │   │   │   └── AssemblyInfo.cs
│   │   │   │   │   │   │   └── packages.config
│   │   │   │   │   │   ├── ProductLaunch.MessageHandlers.SaveProspect/
│   │   │   │   │   │   │   ├── App.config
│   │   │   │   │   │   │   ├── ProductLaunch.MessageHandlers.SaveProspect.csproj
│   │   │   │   │   │   │   ├── Program.cs
│   │   │   │   │   │   │   ├── Properties/
│   │   │   │   │   │   │   │   └── AssemblyInfo.cs
│   │   │   │   │   │   │   └── packages.config
│   │   │   │   │   │   ├── ProductLaunch.Messaging/
│   │   │   │   │   │   │   ├── Config.cs
│   │   │   │   │   │   │   ├── MessageHelper.cs
│   │   │   │   │   │   │   ├── MessageQueue.cs
│   │   │   │   │   │   │   ├── Messages/
│   │   │   │   │   │   │   │   ├── Events/
│   │   │   │   │   │   │   │   │   └── ProspectSignedUpEvent.cs
│   │   │   │   │   │   │   │   └── Message.cs
│   │   │   │   │   │   │   ├── ProductLaunch.Messaging.csproj
│   │   │   │   │   │   │   ├── Properties/
│   │   │   │   │   │   │   │   └── AssemblyInfo.cs
│   │   │   │   │   │   │   └── packages.config
│   │   │   │   │   │   ├── ProductLaunch.Model/
│   │   │   │   │   │   │   ├── App.config
│   │   │   │   │   │   │   ├── Initializers/
│   │   │   │   │   │   │   │   └── StaticDataInitializer.cs
│   │   │   │   │   │   │   ├── ProductLaunch.Model.csproj
│   │   │   │   │   │   │   ├── ProductLaunchContext.cs
│   │   │   │   │   │   │   ├── Properties/
│   │   │   │   │   │   │   │   └── AssemblyInfo.cs
│   │   │   │   │   │   │   └── packages.config
│   │   │   │   │   │   ├── ProductLaunch.Model.Tests/
│   │   │   │   │   │   │   ├── App.config
│   │   │   │   │   │   │   ├── ProductLaunch.Model.Tests.csproj
│   │   │   │   │   │   │   ├── ProductLaunchContextTest.cs
│   │   │   │   │   │   │   ├── Properties/
│   │   │   │   │   │   │   │   └── AssemblyInfo.cs
│   │   │   │   │   │   │   └── packages.config
│   │   │   │   │   │   ├── ProductLaunch.Web/
│   │   │   │   │   │   │   ├── About.aspx
│   │   │   │   │   │   │   ├── About.aspx.cs
│   │   │   │   │   │   │   ├── About.aspx.designer.cs
│   │   │   │   │   │   │   ├── App_Start/
│   │   │   │   │   │   │   │   ├── BundleConfig.cs
│   │   │   │   │   │   │   │   └── RouteConfig.cs
│   │   │   │   │   │   │   ├── ApplicationInsights.config
│   │   │   │   │   │   │   ├── Bundle.config
│   │   │   │   │   │   │   ├── Config.cs
│   │   │   │   │   │   │   ├── Contact.aspx
│   │   │   │   │   │   │   ├── Contact.aspx.cs
│   │   │   │   │   │   │   ├── Contact.aspx.designer.cs
│   │   │   │   │   │   │   ├── Content/
│   │   │   │   │   │   │   │   ├── Site.css
│   │   │   │   │   │   │   │   └── bootstrap.css
│   │   │   │   │   │   │   ├── Default.aspx
│   │   │   │   │   │   │   ├── Default.aspx.cs
│   │   │   │   │   │   │   ├── Default.aspx.designer.cs
│   │   │   │   │   │   │   ├── Global.asax
│   │   │   │   │   │   │   ├── Global.asax.cs
│   │   │   │   │   │   │   ├── ProductLaunch.Web.csproj
│   │   │   │   │   │   │   ├── Project_Readme.html
│   │   │   │   │   │   │   ├── Properties/
│   │   │   │   │   │   │   │   └── AssemblyInfo.cs
│   │   │   │   │   │   │   ├── Scripts/
│   │   │   │   │   │   │   │   ├── WebForms/
│   │   │   │   │   │   │   │   │   ├── DetailsView.js
│   │   │   │   │   │   │   │   │   ├── Focus.js
│   │   │   │   │   │   │   │   │   ├── GridView.js
│   │   │   │   │   │   │   │   │   ├── MSAjax/
│   │   │   │   │   │   │   │   │   │   ├── MicrosoftAjax.js
│   │   │   │   │   │   │   │   │   │   ├── MicrosoftAjaxApplicationServices.js
│   │   │   │   │   │   │   │   │   │   ├── MicrosoftAjaxComponentModel.js
│   │   │   │   │   │   │   │   │   │   ├── MicrosoftAjaxCore.js
│   │   │   │   │   │   │   │   │   │   ├── MicrosoftAjaxGlobalization.js
│   │   │   │   │   │   │   │   │   │   ├── MicrosoftAjaxHistory.js
│   │   │   │   │   │   │   │   │   │   ├── MicrosoftAjaxNetwork.js
│   │   │   │   │   │   │   │   │   │   ├── MicrosoftAjaxSerialization.js
│   │   │   │   │   │   │   │   │   │   ├── MicrosoftAjaxTimer.js
│   │   │   │   │   │   │   │   │   │   ├── MicrosoftAjaxWebForms.js
│   │   │   │   │   │   │   │   │   │   └── MicrosoftAjaxWebServices.js
│   │   │   │   │   │   │   │   │   ├── Menu.js
│   │   │   │   │   │   │   │   │   ├── MenuStandards.js
│   │   │   │   │   │   │   │   │   ├── SmartNav.js
│   │   │   │   │   │   │   │   │   ├── TreeView.js
│   │   │   │   │   │   │   │   │   ├── WebForms.js
│   │   │   │   │   │   │   │   │   ├── WebParts.js
│   │   │   │   │   │   │   │   │   └── WebUIValidation.js
│   │   │   │   │   │   │   │   ├── _references.js
│   │   │   │   │   │   │   │   ├── bootstrap.js
│   │   │   │   │   │   │   │   ├── jquery-1.10.2.intellisense.js
│   │   │   │   │   │   │   │   ├── jquery-1.10.2.js
│   │   │   │   │   │   │   │   ├── modernizr-2.6.2.js
│   │   │   │   │   │   │   │   └── respond.js
│   │   │   │   │   │   │   ├── SignUp.aspx
│   │   │   │   │   │   │   ├── SignUp.aspx.cs
│   │   │   │   │   │   │   ├── SignUp.aspx.designer.cs
│   │   │   │   │   │   │   ├── Site.Master
│   │   │   │   │   │   │   ├── Site.Master.cs
│   │   │   │   │   │   │   ├── Site.Master.designer.cs
│   │   │   │   │   │   │   ├── Site.Mobile.Master
│   │   │   │   │   │   │   ├── Site.Mobile.Master.cs
│   │   │   │   │   │   │   ├── Site.Mobile.Master.designer.cs
│   │   │   │   │   │   │   ├── ThankYou.aspx
│   │   │   │   │   │   │   ├── ThankYou.aspx.cs
│   │   │   │   │   │   │   ├── ThankYou.aspx.designer.cs
│   │   │   │   │   │   │   ├── ViewSwitcher.ascx
│   │   │   │   │   │   │   ├── ViewSwitcher.ascx.cs
│   │   │   │   │   │   │   ├── ViewSwitcher.ascx.designer.cs
│   │   │   │   │   │   │   ├── Web.Debug.config
│   │   │   │   │   │   │   ├── Web.Release.config
│   │   │   │   │   │   │   ├── Web.config
│   │   │   │   │   │   │   └── packages.config
│   │   │   │   │   │   ├── ProductLaunch.sln
│   │   │   │   │   │   └── build.ps1
│   │   │   │   │   ├── build.ps1
│   │   │   │   │   └── docker/
│   │   │   │   │       ├── builder/
│   │   │   │   │       │   └── Dockerfile
│   │   │   │   │       └── web/
│   │   │   │   │           ├── Dockerfile
│   │   │   │   │           └── Web.config
│   │   │   │   └── v2-src/
│   │   │   │       ├── ProductLaunch/
│   │   │   │       │   ├── ProductLaunch.Core/
│   │   │   │       │   │   ├── Env.cs
│   │   │   │       │   │   ├── ProductLaunch.Core.csproj
│   │   │   │       │   │   └── Properties/
│   │   │   │       │   │       └── AssemblyInfo.cs
│   │   │   │       │   ├── ProductLaunch.EndToEndTests/
│   │   │   │       │   │   ├── App.config
│   │   │   │       │   │   ├── ProductLaunch.EndToEndTests.csproj
│   │   │   │       │   │   ├── Properties/
│   │   │   │       │   │   │   └── AssemblyInfo.cs
│   │   │   │       │   │   ├── ProspectSignUp.feature
│   │   │   │       │   │   ├── ProspectSignUp.feature.cs
│   │   │   │       │   │   ├── ProspectSignUpSteps.cs
│   │   │   │       │   │   └── packages.config
│   │   │   │       │   ├── ProductLaunch.Entities/
│   │   │   │       │   │   ├── Country.cs
│   │   │   │       │   │   ├── ProductLaunch.Entities.csproj
│   │   │   │       │   │   ├── Properties/
│   │   │   │       │   │   │   └── AssemblyInfo.cs
│   │   │   │       │   │   ├── Prospect.cs
│   │   │   │       │   │   └── Role.cs
│   │   │   │       │   ├── ProductLaunch.MessageHandlers.IndexProspect/
│   │   │   │       │   │   ├── App.config
│   │   │   │       │   │   ├── Config.cs
│   │   │   │       │   │   ├── Documents/
│   │   │   │       │   │   │   └── Prospect.cs
│   │   │   │       │   │   ├── Indexer/
│   │   │   │       │   │   │   └── Index.cs
│   │   │   │       │   │   ├── ProductLaunch.MessageHandlers.IndexProspect.csproj
│   │   │   │       │   │   ├── Program.cs
│   │   │   │       │   │   ├── Properties/
│   │   │   │       │   │   │   └── AssemblyInfo.cs
│   │   │   │       │   │   └── packages.config
│   │   │   │       │   ├── ProductLaunch.MessageHandlers.SaveProspect/
│   │   │   │       │   │   ├── App.config
│   │   │   │       │   │   ├── ProductLaunch.MessageHandlers.SaveProspect.csproj
│   │   │   │       │   │   ├── Program.cs
│   │   │   │       │   │   ├── Properties/
│   │   │   │       │   │   │   └── AssemblyInfo.cs
│   │   │   │       │   │   └── packages.config
│   │   │   │       │   ├── ProductLaunch.Messaging/
│   │   │   │       │   │   ├── Config.cs
│   │   │   │       │   │   ├── MessageHelper.cs
│   │   │   │       │   │   ├── MessageQueue.cs
│   │   │   │       │   │   ├── Messages/
│   │   │   │       │   │   │   ├── Events/
│   │   │   │       │   │   │   │   └── ProspectSignedUpEvent.cs
│   │   │   │       │   │   │   └── Message.cs
│   │   │   │       │   │   ├── ProductLaunch.Messaging.csproj
│   │   │   │       │   │   ├── Properties/
│   │   │   │       │   │   │   └── AssemblyInfo.cs
│   │   │   │       │   │   └── packages.config
│   │   │   │       │   ├── ProductLaunch.Model/
│   │   │   │       │   │   ├── App.config
│   │   │   │       │   │   ├── Config.cs
│   │   │   │       │   │   ├── Initializers/
│   │   │   │       │   │   │   └── StaticDataInitializer.cs
│   │   │   │       │   │   ├── ProductLaunch.Model.csproj
│   │   │   │       │   │   ├── ProductLaunchContext.cs
│   │   │   │       │   │   ├── Properties/
│   │   │   │       │   │   │   └── AssemblyInfo.cs
│   │   │   │       │   │   └── packages.config
│   │   │   │       │   ├── ProductLaunch.Model.Tests/
│   │   │   │       │   │   ├── App.config
│   │   │   │       │   │   ├── ProductLaunch.Model.Tests.csproj
│   │   │   │       │   │   ├── ProductLaunchContextTest.cs
│   │   │   │       │   │   ├── Properties/
│   │   │   │       │   │   │   └── AssemblyInfo.cs
│   │   │   │       │   │   └── packages.config
│   │   │   │       │   ├── ProductLaunch.Web/
│   │   │   │       │   │   ├── About.aspx
│   │   │   │       │   │   ├── About.aspx.cs
│   │   │   │       │   │   ├── About.aspx.designer.cs
│   │   │   │       │   │   ├── App_Start/
│   │   │   │       │   │   │   ├── BundleConfig.cs
│   │   │   │       │   │   │   └── RouteConfig.cs
│   │   │   │       │   │   ├── ApplicationInsights.config
│   │   │   │       │   │   ├── Bundle.config
│   │   │   │       │   │   ├── Contact.aspx
│   │   │   │       │   │   ├── Contact.aspx.cs
│   │   │   │       │   │   ├── Contact.aspx.designer.cs
│   │   │   │       │   │   ├── Content/
│   │   │   │       │   │   │   ├── Site.css
│   │   │   │       │   │   │   └── bootstrap.css
│   │   │   │       │   │   ├── Default.aspx
│   │   │   │       │   │   ├── Default.aspx.cs
│   │   │   │       │   │   ├── Default.aspx.designer.cs
│   │   │   │       │   │   ├── Global.asax
│   │   │   │       │   │   ├── Global.asax.cs
│   │   │   │       │   │   ├── ProductLaunch.Web.csproj
│   │   │   │       │   │   ├── Project_Readme.html
│   │   │   │       │   │   ├── Properties/
│   │   │   │       │   │   │   └── AssemblyInfo.cs
│   │   │   │       │   │   ├── Scripts/
│   │   │   │       │   │   │   ├── WebForms/
│   │   │   │       │   │   │   │   ├── DetailsView.js
│   │   │   │       │   │   │   │   ├── Focus.js
│   │   │   │       │   │   │   │   ├── GridView.js
│   │   │   │       │   │   │   │   ├── MSAjax/
│   │   │   │       │   │   │   │   │   ├── MicrosoftAjax.js
│   │   │   │       │   │   │   │   │   ├── MicrosoftAjaxApplicationServices.js
│   │   │   │       │   │   │   │   │   ├── MicrosoftAjaxComponentModel.js
│   │   │   │       │   │   │   │   │   ├── MicrosoftAjaxCore.js
│   │   │   │       │   │   │   │   │   ├── MicrosoftAjaxGlobalization.js
│   │   │   │       │   │   │   │   │   ├── MicrosoftAjaxHistory.js
│   │   │   │       │   │   │   │   │   ├── MicrosoftAjaxNetwork.js
│   │   │   │       │   │   │   │   │   ├── MicrosoftAjaxSerialization.js
│   │   │   │       │   │   │   │   │   ├── MicrosoftAjaxTimer.js
│   │   │   │       │   │   │   │   │   ├── MicrosoftAjaxWebForms.js
│   │   │   │       │   │   │   │   │   └── MicrosoftAjaxWebServices.js
│   │   │   │       │   │   │   │   ├── Menu.js
│   │   │   │       │   │   │   │   ├── MenuStandards.js
│   │   │   │       │   │   │   │   ├── SmartNav.js
│   │   │   │       │   │   │   │   ├── TreeView.js
│   │   │   │       │   │   │   │   ├── WebForms.js
│   │   │   │       │   │   │   │   ├── WebParts.js
│   │   │   │       │   │   │   │   └── WebUIValidation.js
│   │   │   │       │   │   │   ├── _references.js
│   │   │   │       │   │   │   ├── bootstrap.js
│   │   │   │       │   │   │   ├── jquery-1.10.2.intellisense.js
│   │   │   │       │   │   │   ├── jquery-1.10.2.js
│   │   │   │       │   │   │   ├── modernizr-2.6.2.js
│   │   │   │       │   │   │   └── respond.js
│   │   │   │       │   │   ├── SignUp.aspx
│   │   │   │       │   │   ├── SignUp.aspx.cs
│   │   │   │       │   │   ├── SignUp.aspx.designer.cs
│   │   │   │       │   │   ├── Site.Master
│   │   │   │       │   │   ├── Site.Master.cs
│   │   │   │       │   │   ├── Site.Master.designer.cs
│   │   │   │       │   │   ├── Site.Mobile.Master
│   │   │   │       │   │   ├── Site.Mobile.Master.cs
│   │   │   │       │   │   ├── Site.Mobile.Master.designer.cs
│   │   │   │       │   │   ├── ThankYou.aspx
│   │   │   │       │   │   ├── ThankYou.aspx.cs
│   │   │   │       │   │   ├── ThankYou.aspx.designer.cs
│   │   │   │       │   │   ├── ViewSwitcher.ascx
│   │   │   │       │   │   ├── ViewSwitcher.ascx.cs
│   │   │   │       │   │   ├── ViewSwitcher.ascx.designer.cs
│   │   │   │       │   │   ├── Web.Debug.config
│   │   │   │       │   │   ├── Web.Release.config
│   │   │   │       │   │   ├── Web.config
│   │   │   │       │   │   └── packages.config
│   │   │   │       │   ├── ProductLaunch.sln
│   │   │   │       │   └── build.ps1
│   │   │   │       ├── build.ps1
│   │   │   │       ├── docker/
│   │   │   │       │   ├── builder/
│   │   │   │       │   │   └── Dockerfile
│   │   │   │       │   ├── save-prospect/
│   │   │   │       │   │   └── Dockerfile
│   │   │   │       │   └── web/
│   │   │   │       │       ├── Dockerfile
│   │   │   │       │       └── bootstrap.ps1
│   │   │   │       └── docker-compose.yml
│   │   │   ├── windows-modernize-aspnet-ops/
│   │   │   │   ├── README.md
│   │   │   │   ├── v1.0/
│   │   │   │   │   └── Dockerfile
│   │   │   │   └── v1.1/
│   │   │   │       └── Dockerfile
│   │   │   └── workshop-slides/
│   │   │       └── README.md
│   │   ├── slides/
│   │   │   ├── docker-introduction.key
│   │   │   └── docker-java-dockercon-2017.key
│   │   └── windows/
│   │       ├── .gitattributes
│   │       ├── .gitignore
│   │       ├── aspnet-web/
│   │       │   ├── README.md
│   │       │   ├── docker-compose.yml
│   │       │   └── webserver/
│   │       │       ├── Dockerfile
│   │       │       └── app/
│   │       │           ├── Program.cs
│   │       │           ├── Startup.cs
│   │       │           ├── project.json
│   │       │           └── run.bat
│   │       ├── modernize-traditional-apps/
│   │       │   ├── README.md
│   │       │   ├── modernize-aspnet/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── README.md
│   │       │   │   ├── part-1.md
│   │       │   │   ├── part-2.md
│   │       │   │   ├── part-3.md
│   │       │   │   ├── part-4.md
│   │       │   │   ├── part-5.md
│   │       │   │   ├── v1-src/
│   │       │   │   │   ├── ProductLaunch/
│   │       │   │   │   │   ├── ProductLaunch.Core/
│   │       │   │   │   │   │   ├── Env.cs
│   │       │   │   │   │   │   ├── ProductLaunch.Core.csproj
│   │       │   │   │   │   │   └── Properties/
│   │       │   │   │   │   │       └── AssemblyInfo.cs
│   │       │   │   │   │   ├── ProductLaunch.EndToEndTests/
│   │       │   │   │   │   │   ├── App.config
│   │       │   │   │   │   │   ├── ProductLaunch.EndToEndTests.csproj
│   │       │   │   │   │   │   ├── Properties/
│   │       │   │   │   │   │   │   └── AssemblyInfo.cs
│   │       │   │   │   │   │   ├── ProspectSignUp.feature
│   │       │   │   │   │   │   ├── ProspectSignUp.feature.cs
│   │       │   │   │   │   │   ├── ProspectSignUpSteps.cs
│   │       │   │   │   │   │   └── packages.config
│   │       │   │   │   │   ├── ProductLaunch.Entities/
│   │       │   │   │   │   │   ├── Country.cs
│   │       │   │   │   │   │   ├── ProductLaunch.Entities.csproj
│   │       │   │   │   │   │   ├── Properties/
│   │       │   │   │   │   │   │   └── AssemblyInfo.cs
│   │       │   │   │   │   │   ├── Prospect.cs
│   │       │   │   │   │   │   └── Role.cs
│   │       │   │   │   │   ├── ProductLaunch.MessageHandlers.IndexProspect/
│   │       │   │   │   │   │   ├── App.config
│   │       │   │   │   │   │   ├── Config.cs
│   │       │   │   │   │   │   ├── Documents/
│   │       │   │   │   │   │   │   └── Prospect.cs
│   │       │   │   │   │   │   ├── Indexer/
│   │       │   │   │   │   │   │   └── Index.cs
│   │       │   │   │   │   │   ├── ProductLaunch.MessageHandlers.IndexProspect.csproj
│   │       │   │   │   │   │   ├── Program.cs
│   │       │   │   │   │   │   ├── Properties/
│   │       │   │   │   │   │   │   └── AssemblyInfo.cs
│   │       │   │   │   │   │   └── packages.config
│   │       │   │   │   │   ├── ProductLaunch.MessageHandlers.SaveProspect/
│   │       │   │   │   │   │   ├── App.config
│   │       │   │   │   │   │   ├── ProductLaunch.MessageHandlers.SaveProspect.csproj
│   │       │   │   │   │   │   ├── Program.cs
│   │       │   │   │   │   │   ├── Properties/
│   │       │   │   │   │   │   │   └── AssemblyInfo.cs
│   │       │   │   │   │   │   └── packages.config
│   │       │   │   │   │   ├── ProductLaunch.Messaging/
│   │       │   │   │   │   │   ├── Config.cs
│   │       │   │   │   │   │   ├── MessageHelper.cs
│   │       │   │   │   │   │   ├── MessageQueue.cs
│   │       │   │   │   │   │   ├── Messages/
│   │       │   │   │   │   │   │   ├── Events/
│   │       │   │   │   │   │   │   │   └── ProspectSignedUpEvent.cs
│   │       │   │   │   │   │   │   └── Message.cs
│   │       │   │   │   │   │   ├── ProductLaunch.Messaging.csproj
│   │       │   │   │   │   │   ├── Properties/
│   │       │   │   │   │   │   │   └── AssemblyInfo.cs
│   │       │   │   │   │   │   └── packages.config
│   │       │   │   │   │   ├── ProductLaunch.Model/
│   │       │   │   │   │   │   ├── App.config
│   │       │   │   │   │   │   ├── Initializers/
│   │       │   │   │   │   │   │   └── StaticDataInitializer.cs
│   │       │   │   │   │   │   ├── ProductLaunch.Model.csproj
│   │       │   │   │   │   │   ├── ProductLaunchContext.cs
│   │       │   │   │   │   │   ├── Properties/
│   │       │   │   │   │   │   │   └── AssemblyInfo.cs
│   │       │   │   │   │   │   └── packages.config
│   │       │   │   │   │   ├── ProductLaunch.Model.Tests/
│   │       │   │   │   │   │   ├── App.config
│   │       │   │   │   │   │   ├── ProductLaunch.Model.Tests.csproj
│   │       │   │   │   │   │   ├── ProductLaunchContextTest.cs
│   │       │   │   │   │   │   ├── Properties/
│   │       │   │   │   │   │   │   └── AssemblyInfo.cs
│   │       │   │   │   │   │   └── packages.config
│   │       │   │   │   │   ├── ProductLaunch.Web/
│   │       │   │   │   │   │   ├── About.aspx
│   │       │   │   │   │   │   ├── About.aspx.cs
│   │       │   │   │   │   │   ├── About.aspx.designer.cs
│   │       │   │   │   │   │   ├── App_Start/
│   │       │   │   │   │   │   │   ├── BundleConfig.cs
│   │       │   │   │   │   │   │   └── RouteConfig.cs
│   │       │   │   │   │   │   ├── ApplicationInsights.config
│   │       │   │   │   │   │   ├── Bundle.config
│   │       │   │   │   │   │   ├── Config.cs
│   │       │   │   │   │   │   ├── Contact.aspx
│   │       │   │   │   │   │   ├── Contact.aspx.cs
│   │       │   │   │   │   │   ├── Contact.aspx.designer.cs
│   │       │   │   │   │   │   ├── Content/
│   │       │   │   │   │   │   │   ├── Site.css
│   │       │   │   │   │   │   │   └── bootstrap.css
│   │       │   │   │   │   │   ├── Default.aspx
│   │       │   │   │   │   │   ├── Default.aspx.cs
│   │       │   │   │   │   │   ├── Default.aspx.designer.cs
│   │       │   │   │   │   │   ├── Global.asax
│   │       │   │   │   │   │   ├── Global.asax.cs
│   │       │   │   │   │   │   ├── ProductLaunch.Web.csproj
│   │       │   │   │   │   │   ├── Project_Readme.html
│   │       │   │   │   │   │   ├── Properties/
│   │       │   │   │   │   │   │   └── AssemblyInfo.cs
│   │       │   │   │   │   │   ├── Scripts/
│   │       │   │   │   │   │   │   ├── WebForms/
│   │       │   │   │   │   │   │   │   ├── DetailsView.js
│   │       │   │   │   │   │   │   │   ├── Focus.js
│   │       │   │   │   │   │   │   │   ├── GridView.js
│   │       │   │   │   │   │   │   │   ├── MSAjax/
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjax.js
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjaxApplicationServices.js
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjaxComponentModel.js
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjaxCore.js
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjaxGlobalization.js
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjaxHistory.js
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjaxNetwork.js
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjaxSerialization.js
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjaxTimer.js
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjaxWebForms.js
│   │       │   │   │   │   │   │   │   │   └── MicrosoftAjaxWebServices.js
│   │       │   │   │   │   │   │   │   ├── Menu.js
│   │       │   │   │   │   │   │   │   ├── MenuStandards.js
│   │       │   │   │   │   │   │   │   ├── SmartNav.js
│   │       │   │   │   │   │   │   │   ├── TreeView.js
│   │       │   │   │   │   │   │   │   ├── WebForms.js
│   │       │   │   │   │   │   │   │   ├── WebParts.js
│   │       │   │   │   │   │   │   │   └── WebUIValidation.js
│   │       │   │   │   │   │   │   ├── _references.js
│   │       │   │   │   │   │   │   ├── bootstrap.js
│   │       │   │   │   │   │   │   ├── jquery-1.10.2.intellisense.js
│   │       │   │   │   │   │   │   ├── jquery-1.10.2.js
│   │       │   │   │   │   │   │   ├── modernizr-2.6.2.js
│   │       │   │   │   │   │   │   └── respond.js
│   │       │   │   │   │   │   ├── SignUp.aspx
│   │       │   │   │   │   │   ├── SignUp.aspx.cs
│   │       │   │   │   │   │   ├── SignUp.aspx.designer.cs
│   │       │   │   │   │   │   ├── Site.Master
│   │       │   │   │   │   │   ├── Site.Master.cs
│   │       │   │   │   │   │   ├── Site.Master.designer.cs
│   │       │   │   │   │   │   ├── Site.Mobile.Master
│   │       │   │   │   │   │   ├── Site.Mobile.Master.cs
│   │       │   │   │   │   │   ├── Site.Mobile.Master.designer.cs
│   │       │   │   │   │   │   ├── ThankYou.aspx
│   │       │   │   │   │   │   ├── ThankYou.aspx.cs
│   │       │   │   │   │   │   ├── ThankYou.aspx.designer.cs
│   │       │   │   │   │   │   ├── ViewSwitcher.ascx
│   │       │   │   │   │   │   ├── ViewSwitcher.ascx.cs
│   │       │   │   │   │   │   ├── ViewSwitcher.ascx.designer.cs
│   │       │   │   │   │   │   ├── Web.Debug.config
│   │       │   │   │   │   │   ├── Web.Release.config
│   │       │   │   │   │   │   ├── Web.config
│   │       │   │   │   │   │   └── packages.config
│   │       │   │   │   │   ├── ProductLaunch.sln
│   │       │   │   │   │   └── build.ps1
│   │       │   │   │   ├── build.ps1
│   │       │   │   │   └── docker/
│   │       │   │   │       ├── builder/
│   │       │   │   │       │   └── Dockerfile
│   │       │   │   │       └── web/
│   │       │   │   │           ├── Dockerfile
│   │       │   │   │           └── Web.config
│   │       │   │   ├── v2-src/
│   │       │   │   │   ├── ProductLaunch/
│   │       │   │   │   │   ├── ProductLaunch.Core/
│   │       │   │   │   │   │   ├── Env.cs
│   │       │   │   │   │   │   ├── ProductLaunch.Core.csproj
│   │       │   │   │   │   │   └── Properties/
│   │       │   │   │   │   │       └── AssemblyInfo.cs
│   │       │   │   │   │   ├── ProductLaunch.EndToEndTests/
│   │       │   │   │   │   │   ├── App.config
│   │       │   │   │   │   │   ├── ProductLaunch.EndToEndTests.csproj
│   │       │   │   │   │   │   ├── Properties/
│   │       │   │   │   │   │   │   └── AssemblyInfo.cs
│   │       │   │   │   │   │   ├── ProspectSignUp.feature
│   │       │   │   │   │   │   ├── ProspectSignUp.feature.cs
│   │       │   │   │   │   │   ├── ProspectSignUpSteps.cs
│   │       │   │   │   │   │   └── packages.config
│   │       │   │   │   │   ├── ProductLaunch.Entities/
│   │       │   │   │   │   │   ├── Country.cs
│   │       │   │   │   │   │   ├── ProductLaunch.Entities.csproj
│   │       │   │   │   │   │   ├── Properties/
│   │       │   │   │   │   │   │   └── AssemblyInfo.cs
│   │       │   │   │   │   │   ├── Prospect.cs
│   │       │   │   │   │   │   └── Role.cs
│   │       │   │   │   │   ├── ProductLaunch.MessageHandlers.IndexProspect/
│   │       │   │   │   │   │   ├── App.config
│   │       │   │   │   │   │   ├── Config.cs
│   │       │   │   │   │   │   ├── Documents/
│   │       │   │   │   │   │   │   └── Prospect.cs
│   │       │   │   │   │   │   ├── Indexer/
│   │       │   │   │   │   │   │   └── Index.cs
│   │       │   │   │   │   │   ├── ProductLaunch.MessageHandlers.IndexProspect.csproj
│   │       │   │   │   │   │   ├── Program.cs
│   │       │   │   │   │   │   ├── Properties/
│   │       │   │   │   │   │   │   └── AssemblyInfo.cs
│   │       │   │   │   │   │   └── packages.config
│   │       │   │   │   │   ├── ProductLaunch.MessageHandlers.SaveProspect/
│   │       │   │   │   │   │   ├── App.config
│   │       │   │   │   │   │   ├── ProductLaunch.MessageHandlers.SaveProspect.csproj
│   │       │   │   │   │   │   ├── Program.cs
│   │       │   │   │   │   │   ├── Properties/
│   │       │   │   │   │   │   │   └── AssemblyInfo.cs
│   │       │   │   │   │   │   └── packages.config
│   │       │   │   │   │   ├── ProductLaunch.Messaging/
│   │       │   │   │   │   │   ├── Config.cs
│   │       │   │   │   │   │   ├── MessageHelper.cs
│   │       │   │   │   │   │   ├── MessageQueue.cs
│   │       │   │   │   │   │   ├── Messages/
│   │       │   │   │   │   │   │   ├── Events/
│   │       │   │   │   │   │   │   │   └── ProspectSignedUpEvent.cs
│   │       │   │   │   │   │   │   └── Message.cs
│   │       │   │   │   │   │   ├── ProductLaunch.Messaging.csproj
│   │       │   │   │   │   │   ├── Properties/
│   │       │   │   │   │   │   │   └── AssemblyInfo.cs
│   │       │   │   │   │   │   └── packages.config
│   │       │   │   │   │   ├── ProductLaunch.Model/
│   │       │   │   │   │   │   ├── App.config
│   │       │   │   │   │   │   ├── Config.cs
│   │       │   │   │   │   │   ├── Initializers/
│   │       │   │   │   │   │   │   └── StaticDataInitializer.cs
│   │       │   │   │   │   │   ├── ProductLaunch.Model.csproj
│   │       │   │   │   │   │   ├── ProductLaunchContext.cs
│   │       │   │   │   │   │   ├── Properties/
│   │       │   │   │   │   │   │   └── AssemblyInfo.cs
│   │       │   │   │   │   │   └── packages.config
│   │       │   │   │   │   ├── ProductLaunch.Model.Tests/
│   │       │   │   │   │   │   ├── App.config
│   │       │   │   │   │   │   ├── ProductLaunch.Model.Tests.csproj
│   │       │   │   │   │   │   ├── ProductLaunchContextTest.cs
│   │       │   │   │   │   │   ├── Properties/
│   │       │   │   │   │   │   │   └── AssemblyInfo.cs
│   │       │   │   │   │   │   └── packages.config
│   │       │   │   │   │   ├── ProductLaunch.Web/
│   │       │   │   │   │   │   ├── About.aspx
│   │       │   │   │   │   │   ├── About.aspx.cs
│   │       │   │   │   │   │   ├── About.aspx.designer.cs
│   │       │   │   │   │   │   ├── App_Start/
│   │       │   │   │   │   │   │   ├── BundleConfig.cs
│   │       │   │   │   │   │   │   └── RouteConfig.cs
│   │       │   │   │   │   │   ├── ApplicationInsights.config
│   │       │   │   │   │   │   ├── Bundle.config
│   │       │   │   │   │   │   ├── Contact.aspx
│   │       │   │   │   │   │   ├── Contact.aspx.cs
│   │       │   │   │   │   │   ├── Contact.aspx.designer.cs
│   │       │   │   │   │   │   ├── Content/
│   │       │   │   │   │   │   │   ├── Site.css
│   │       │   │   │   │   │   │   └── bootstrap.css
│   │       │   │   │   │   │   ├── Default.aspx
│   │       │   │   │   │   │   ├── Default.aspx.cs
│   │       │   │   │   │   │   ├── Default.aspx.designer.cs
│   │       │   │   │   │   │   ├── Global.asax
│   │       │   │   │   │   │   ├── Global.asax.cs
│   │       │   │   │   │   │   ├── ProductLaunch.Web.csproj
│   │       │   │   │   │   │   ├── Project_Readme.html
│   │       │   │   │   │   │   ├── Properties/
│   │       │   │   │   │   │   │   └── AssemblyInfo.cs
│   │       │   │   │   │   │   ├── Scripts/
│   │       │   │   │   │   │   │   ├── WebForms/
│   │       │   │   │   │   │   │   │   ├── DetailsView.js
│   │       │   │   │   │   │   │   │   ├── Focus.js
│   │       │   │   │   │   │   │   │   ├── GridView.js
│   │       │   │   │   │   │   │   │   ├── MSAjax/
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjax.js
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjaxApplicationServices.js
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjaxComponentModel.js
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjaxCore.js
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjaxGlobalization.js
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjaxHistory.js
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjaxNetwork.js
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjaxSerialization.js
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjaxTimer.js
│   │       │   │   │   │   │   │   │   │   ├── MicrosoftAjaxWebForms.js
│   │       │   │   │   │   │   │   │   │   └── MicrosoftAjaxWebServices.js
│   │       │   │   │   │   │   │   │   ├── Menu.js
│   │       │   │   │   │   │   │   │   ├── MenuStandards.js
│   │       │   │   │   │   │   │   │   ├── SmartNav.js
│   │       │   │   │   │   │   │   │   ├── TreeView.js
│   │       │   │   │   │   │   │   │   ├── WebForms.js
│   │       │   │   │   │   │   │   │   ├── WebParts.js
│   │       │   │   │   │   │   │   │   └── WebUIValidation.js
│   │       │   │   │   │   │   │   ├── _references.js
│   │       │   │   │   │   │   │   ├── bootstrap.js
│   │       │   │   │   │   │   │   ├── jquery-1.10.2.intellisense.js
│   │       │   │   │   │   │   │   ├── jquery-1.10.2.js
│   │       │   │   │   │   │   │   ├── modernizr-2.6.2.js
│   │       │   │   │   │   │   │   └── respond.js
│   │       │   │   │   │   │   ├── SignUp.aspx
│   │       │   │   │   │   │   ├── SignUp.aspx.cs
│   │       │   │   │   │   │   ├── SignUp.aspx.designer.cs
│   │       │   │   │   │   │   ├── Site.Master
│   │       │   │   │   │   │   ├── Site.Master.cs
│   │       │   │   │   │   │   ├── Site.Master.designer.cs
│   │       │   │   │   │   │   ├── Site.Mobile.Master
│   │       │   │   │   │   │   ├── Site.Mobile.Master.cs
│   │       │   │   │   │   │   ├── Site.Mobile.Master.designer.cs
│   │       │   │   │   │   │   ├── ThankYou.aspx
│   │       │   │   │   │   │   ├── ThankYou.aspx.cs
│   │       │   │   │   │   │   ├── ThankYou.aspx.designer.cs
│   │       │   │   │   │   │   ├── ViewSwitcher.ascx
│   │       │   │   │   │   │   ├── ViewSwitcher.ascx.cs
│   │       │   │   │   │   │   ├── ViewSwitcher.ascx.designer.cs
│   │       │   │   │   │   │   ├── Web.Debug.config
│   │       │   │   │   │   │   ├── Web.Release.config
│   │       │   │   │   │   │   ├── Web.config
│   │       │   │   │   │   │   └── packages.config
│   │       │   │   │   │   ├── ProductLaunch.sln
│   │       │   │   │   │   └── build.ps1
│   │       │   │   │   ├── build.ps1
│   │       │   │   │   ├── docker/
│   │       │   │   │   │   ├── builder/
│   │       │   │   │   │   │   └── Dockerfile
│   │       │   │   │   │   ├── save-prospect/
│   │       │   │   │   │   │   └── Dockerfile
│   │       │   │   │   │   └── web/
│   │       │   │   │   │       ├── Dockerfile
│   │       │   │   │   │       └── bootstrap.ps1
│   │       │   │   │   └── docker-compose.yml
│   │       │   │   └── v3-src/
│   │       │   │       ├── ProductLaunch/
│   │       │   │       │   ├── ProductLaunch.Core/
│   │       │   │       │   │   ├── Env.cs
│   │       │   │       │   │   ├── ProductLaunch.Core.csproj
│   │       │   │       │   │   └── Properties/
│   │       │   │       │   │       └── AssemblyInfo.cs
│   │       │   │       │   ├── ProductLaunch.EndToEndTests/
│   │       │   │       │   │   ├── App.config
│   │       │   │       │   │   ├── ProductLaunch.EndToEndTests.csproj
│   │       │   │       │   │   ├── Properties/
│   │       │   │       │   │   │   └── AssemblyInfo.cs
│   │       │   │       │   │   ├── ProspectSignUp.feature
│   │       │   │       │   │   ├── ProspectSignUp.feature.cs
│   │       │   │       │   │   ├── ProspectSignUpSteps.cs
│   │       │   │       │   │   └── packages.config
│   │       │   │       │   ├── ProductLaunch.Entities/
│   │       │   │       │   │   ├── Country.cs
│   │       │   │       │   │   ├── ProductLaunch.Entities.csproj
│   │       │   │       │   │   ├── Properties/
│   │       │   │       │   │   │   └── AssemblyInfo.cs
│   │       │   │       │   │   ├── Prospect.cs
│   │       │   │       │   │   └── Role.cs
│   │       │   │       │   ├── ProductLaunch.MessageHandlers.IndexProspect/
│   │       │   │       │   │   ├── App.config
│   │       │   │       │   │   ├── Config.cs
│   │       │   │       │   │   ├── Documents/
│   │       │   │       │   │   │   └── Prospect.cs
│   │       │   │       │   │   ├── Indexer/
│   │       │   │       │   │   │   └── Index.cs
│   │       │   │       │   │   ├── ProductLaunch.MessageHandlers.IndexProspect.csproj
│   │       │   │       │   │   ├── Program.cs
│   │       │   │       │   │   ├── Properties/
│   │       │   │       │   │   │   └── AssemblyInfo.cs
│   │       │   │       │   │   └── packages.config
│   │       │   │       │   ├── ProductLaunch.MessageHandlers.SaveProspect/
│   │       │   │       │   │   ├── App.config
│   │       │   │       │   │   ├── ProductLaunch.MessageHandlers.SaveProspect.csproj
│   │       │   │       │   │   ├── Program.cs
│   │       │   │       │   │   ├── Properties/
│   │       │   │       │   │   │   └── AssemblyInfo.cs
│   │       │   │       │   │   └── packages.config
│   │       │   │       │   ├── ProductLaunch.Messaging/
│   │       │   │       │   │   ├── Config.cs
│   │       │   │       │   │   ├── MessageHelper.cs
│   │       │   │       │   │   ├── MessageQueue.cs
│   │       │   │       │   │   ├── Messages/
│   │       │   │       │   │   │   ├── Events/
│   │       │   │       │   │   │   │   └── ProspectSignedUpEvent.cs
│   │       │   │       │   │   │   └── Message.cs
│   │       │   │       │   │   ├── ProductLaunch.Messaging.csproj
│   │       │   │       │   │   ├── Properties/
│   │       │   │       │   │   │   └── AssemblyInfo.cs
│   │       │   │       │   │   └── packages.config
│   │       │   │       │   ├── ProductLaunch.Model/
│   │       │   │       │   │   ├── App.config
│   │       │   │       │   │   ├── Config.cs
│   │       │   │       │   │   ├── Initializers/
│   │       │   │       │   │   │   └── StaticDataInitializer.cs
│   │       │   │       │   │   ├── ProductLaunch.Model.csproj
│   │       │   │       │   │   ├── ProductLaunchContext.cs
│   │       │   │       │   │   ├── Properties/
│   │       │   │       │   │   │   └── AssemblyInfo.cs
│   │       │   │       │   │   └── packages.config
│   │       │   │       │   ├── ProductLaunch.Model.Tests/
│   │       │   │       │   │   ├── App.config
│   │       │   │       │   │   ├── ProductLaunch.Model.Tests.csproj
│   │       │   │       │   │   ├── ProductLaunchContextTest.cs
│   │       │   │       │   │   ├── Properties/
│   │       │   │       │   │   │   └── AssemblyInfo.cs
│   │       │   │       │   │   └── packages.config
│   │       │   │       │   ├── ProductLaunch.Web/
│   │       │   │       │   │   ├── About.aspx
│   │       │   │       │   │   ├── About.aspx.cs
│   │       │   │       │   │   ├── About.aspx.designer.cs
│   │       │   │       │   │   ├── App_Start/
│   │       │   │       │   │   │   ├── BundleConfig.cs
│   │       │   │       │   │   │   └── RouteConfig.cs
│   │       │   │       │   │   ├── ApplicationInsights.config
│   │       │   │       │   │   ├── Bundle.config
│   │       │   │       │   │   ├── Config.cs
│   │       │   │       │   │   ├── Contact.aspx
│   │       │   │       │   │   ├── Contact.aspx.cs
│   │       │   │       │   │   ├── Contact.aspx.designer.cs
│   │       │   │       │   │   ├── Content/
│   │       │   │       │   │   │   ├── Site.css
│   │       │   │       │   │   │   └── bootstrap.css
│   │       │   │       │   │   ├── Default.aspx
│   │       │   │       │   │   ├── Default.aspx.cs
│   │       │   │       │   │   ├── Default.aspx.designer.cs
│   │       │   │       │   │   ├── Global.asax
│   │       │   │       │   │   ├── Global.asax.cs
│   │       │   │       │   │   ├── ProductLaunch.Web.csproj
│   │       │   │       │   │   ├── Project_Readme.html
│   │       │   │       │   │   ├── Properties/
│   │       │   │       │   │   │   └── AssemblyInfo.cs
│   │       │   │       │   │   ├── Scripts/
│   │       │   │       │   │   │   ├── WebForms/
│   │       │   │       │   │   │   │   ├── DetailsView.js
│   │       │   │       │   │   │   │   ├── Focus.js
│   │       │   │       │   │   │   │   ├── GridView.js
│   │       │   │       │   │   │   │   ├── MSAjax/
│   │       │   │       │   │   │   │   │   ├── MicrosoftAjax.js
│   │       │   │       │   │   │   │   │   ├── MicrosoftAjaxApplicationServices.js
│   │       │   │       │   │   │   │   │   ├── MicrosoftAjaxComponentModel.js
│   │       │   │       │   │   │   │   │   ├── MicrosoftAjaxCore.js
│   │       │   │       │   │   │   │   │   ├── MicrosoftAjaxGlobalization.js
│   │       │   │       │   │   │   │   │   ├── MicrosoftAjaxHistory.js
│   │       │   │       │   │   │   │   │   ├── MicrosoftAjaxNetwork.js
│   │       │   │       │   │   │   │   │   ├── MicrosoftAjaxSerialization.js
│   │       │   │       │   │   │   │   │   ├── MicrosoftAjaxTimer.js
│   │       │   │       │   │   │   │   │   ├── MicrosoftAjaxWebForms.js
│   │       │   │       │   │   │   │   │   └── MicrosoftAjaxWebServices.js
│   │       │   │       │   │   │   │   ├── Menu.js
│   │       │   │       │   │   │   │   ├── MenuStandards.js
│   │       │   │       │   │   │   │   ├── SmartNav.js
│   │       │   │       │   │   │   │   ├── TreeView.js
│   │       │   │       │   │   │   │   ├── WebForms.js
│   │       │   │       │   │   │   │   ├── WebParts.js
│   │       │   │       │   │   │   │   └── WebUIValidation.js
│   │       │   │       │   │   │   ├── _references.js
│   │       │   │       │   │   │   ├── bootstrap.js
│   │       │   │       │   │   │   ├── jquery-1.10.2.intellisense.js
│   │       │   │       │   │   │   ├── jquery-1.10.2.js
│   │       │   │       │   │   │   ├── modernizr-2.6.2.js
│   │       │   │       │   │   │   └── respond.js
│   │       │   │       │   │   ├── SignUp.aspx
│   │       │   │       │   │   ├── SignUp.aspx.cs
│   │       │   │       │   │   ├── SignUp.aspx.designer.cs
│   │       │   │       │   │   ├── Site.Master
│   │       │   │       │   │   ├── Site.Master.cs
│   │       │   │       │   │   ├── Site.Master.designer.cs
│   │       │   │       │   │   ├── Site.Mobile.Master
│   │       │   │       │   │   ├── Site.Mobile.Master.cs
│   │       │   │       │   │   ├── Site.Mobile.Master.designer.cs
│   │       │   │       │   │   ├── ThankYou.aspx
│   │       │   │       │   │   ├── ThankYou.aspx.cs
│   │       │   │       │   │   ├── ThankYou.aspx.designer.cs
│   │       │   │       │   │   ├── ViewSwitcher.ascx
│   │       │   │       │   │   ├── ViewSwitcher.ascx.cs
│   │       │   │       │   │   ├── ViewSwitcher.ascx.designer.cs
│   │       │   │       │   │   ├── Web.Debug.config
│   │       │   │       │   │   ├── Web.Release.config
│   │       │   │       │   │   ├── Web.config
│   │       │   │       │   │   └── packages.config
│   │       │   │       │   ├── ProductLaunch.sln
│   │       │   │       │   └── build.ps1
│   │       │   │       ├── build.ps1
│   │       │   │       ├── docker/
│   │       │   │       │   ├── builder/
│   │       │   │       │   │   └── Dockerfile
│   │       │   │       │   ├── docker-compose.yml
│   │       │   │       │   ├── homepage/
│   │       │   │       │   │   ├── Dockerfile
│   │       │   │       │   │   └── index.html
│   │       │   │       │   ├── save-prospect/
│   │       │   │       │   │   └── Dockerfile
│   │       │   │       │   └── web/
│   │       │   │       │       ├── Dockerfile
│   │       │   │       │       └── bootstrap.ps1
│   │       │   │       └── docker-compose.yml
│   │       │   └── modernize-aspnet-ops/
│   │       │       ├── .gitignore
│   │       │       ├── README.md
│   │       │       ├── part-1.md
│   │       │       ├── part-2.md
│   │       │       ├── part-3.md
│   │       │       ├── part-4.md
│   │       │       ├── v1.0/
│   │       │       │   ├── Dockerfile
│   │       │       │   └── build.ps1
│   │       │       ├── v1.1/
│   │       │       │   ├── Dockerfile
│   │       │       │   └── build.ps1
│   │       │       └── v1.2/
│   │       │           ├── build.ps1
│   │       │           ├── docker/
│   │       │           │   ├── builder/
│   │       │           │   │   └── Dockerfile
│   │       │           │   └── web/
│   │       │           │       ├── Dockerfile
│   │       │           │       ├── EnableIisRemoteManagement.ps1
│   │       │           │       └── UpgradeSample.Web/
│   │       │           │           ├── Default.aspx
│   │       │           │           ├── Global.asax
│   │       │           │           └── Web.config
│   │       │           └── src/
│   │       │               ├── UpgradeSample.Setup/
│   │       │               │   ├── Product.wxs
│   │       │               │   └── UpgradeSample.Setup.wixproj
│   │       │               ├── UpgradeSample.Web/
│   │       │               │   ├── Default.aspx
│   │       │               │   ├── Global.asax
│   │       │               │   ├── Global.asax.cs
│   │       │               │   ├── Properties/
│   │       │               │   │   └── AssemblyInfo.cs
│   │       │               │   ├── UpgradeSample.Web.csproj
│   │       │               │   ├── Web.Debug.config
│   │       │               │   ├── Web.Release.config
│   │       │               │   └── Web.config
│   │       │               ├── UpgradeSample.sln
│   │       │               ├── build.ps1
│   │       │               └── package-msi.ps1
│   │       ├── readme.md
│   │       ├── registry/
│   │       │   ├── Dockerfile
│   │       │   ├── Dockerfile.builder
│   │       │   ├── README.md
│   │       │   ├── part-1.md
│   │       │   ├── part-2.md
│   │       │   ├── part-3.md
│   │       │   └── part-4.md
│   │       ├── sql-server/
│   │       │   ├── .dockerignore
│   │       │   ├── .gitignore
│   │       │   ├── Dockerfile.builder
│   │       │   ├── Dockerfile.v1
│   │       │   ├── Dockerfile.v2
│   │       │   ├── Initialize-Database.ps1
│   │       │   ├── README.md
│   │       │   ├── assets.sql
│   │       │   ├── build.ps1
│   │       │   ├── part-1.md
│   │       │   ├── part-2.md
│   │       │   ├── part-3.md
│   │       │   ├── part-4.md
│   │       │   └── src/
│   │       │       ├── Assets.Database-v1/
│   │       │       │   ├── Assets.Database.refactorlog
│   │       │       │   ├── Assets.Database.sln
│   │       │       │   ├── Assets.Database.sqlproj
│   │       │       │   ├── Schema Objects/
│   │       │       │   │   ├── AssetTypes.sql
│   │       │       │   │   ├── Assets.sql
│   │       │       │   │   └── Locations.sql
│   │       │       │   └── Scripts/
│   │       │       │       ├── PostDeployment/
│   │       │       │       │   ├── InsertAssetTypes.sql
│   │       │       │       │   └── InsertLocations.sql
│   │       │       │       └── Script.PostDeployment.sql
│   │       │       └── Assets.Database-v2/
│   │       │           ├── Assets.Database.refactorlog
│   │       │           ├── Assets.Database.sln
│   │       │           ├── Assets.Database.sqlproj
│   │       │           ├── Schema Objects/
│   │       │           │   ├── AssetTypes.sql
│   │       │           │   ├── Assets.sql
│   │       │           │   ├── Locations.sql
│   │       │           │   └── Users.sql
│   │       │           └── Scripts/
│   │       │               ├── PostDeployment/
│   │       │               │   ├── InsertAssetTypes.sql
│   │       │               │   └── InsertLocations.sql
│   │       │               └── Script.PostDeployment.sql
│   │       └── windows-containers/
│   │           ├── MultiContainerApp.md
│   │           ├── README.md
│   │           ├── Setup-AWS.md
│   │           ├── Setup-Azure.md
│   │           ├── Setup-Server2016.md
│   │           ├── Setup-Win10.md
│   │           ├── Setup.md
│   │           └── WindowsContainers.md
│   ├── kickstart/
│   │   ├── chapters/
│   │   │   ├── alpine.md
│   │   │   ├── bridge-network.md
│   │   │   ├── devops.md
│   │   │   ├── docker-devpops.md
│   │   │   ├── images-and-volumes.md
│   │   │   ├── mongo-2.md
│   │   │   ├── mongo.md
│   │   │   ├── networking-basics.md
│   │   │   ├── nextsteps.md
│   │   │   ├── nodered.md
│   │   │   ├── prometheus.md
│   │   │   ├── secrets.md
│   │   │   ├── setup.md
│   │   │   ├── votingapp-compose.md
│   │   │   ├── votingapp-swarm.md
│   │   │   ├── webapps-part1.md
│   │   │   └── webapps-part2.md
│   │   ├── flask-app/
│   │   │   ├── Dockerfile
│   │   │   ├── app.py
│   │   │   ├── requirements.txt
│   │   │   └── templates/
│   │   │       └── index.html
│   │   ├── readme.md
│   │   └── static-site/
│   │       ├── Dockerfile
│   │       └── Hello_docker.html
│   ├── networking/
│   │   ├── A1-network-basics.md
│   │   ├── A2-bridge-networking.md
│   │   ├── A3-overlay-networking.md
│   │   ├── A4-HTTP Routing Mesh.md
│   │   ├── README.md
│   │   ├── concepts/
│   │   │   ├── 01-cnm.md
│   │   │   ├── 02-drivers.md
│   │   │   ├── 03-linux-networking.md
│   │   │   ├── 04-docker-network-cp.md
│   │   │   ├── 05-bridge-networks.md
│   │   │   ├── 06-overlay-networks.md
│   │   │   ├── 07-macvlan.md
│   │   │   ├── 08-host-networking.md
│   │   │   ├── 09-physical-networking.md
│   │   │   ├── 10-load-balancing.md
│   │   │   ├── 11-security.md
│   │   │   ├── 12-ipaddress-management.md
│   │   │   ├── 13-troubleshooting.md
│   │   │   ├── 14-network-models.md
│   │   │   └── README.md
│   │   ├── scratch.md
│   │   └── tutorials.md
│   ├── registry/
│   │   ├── README.md
│   │   ├── part-1.md
│   │   ├── part-2.md
│   │   └── part-3.md
│   ├── security/
│   │   ├── README.md
│   │   ├── apparmor/
│   │   │   ├── README.md
│   │   │   └── wordpress/
│   │   │       ├── Dockerfile
│   │   │       ├── docker-compose.yml
│   │   │       ├── html/
│   │   │       │   ├── index.php
│   │   │       │   ├── license.txt
│   │   │       │   ├── readme.html
│   │   │       │   ├── wp-activate.php
│   │   │       │   ├── wp-admin/
│   │   │       │   │   ├── about.php
│   │   │       │   │   ├── admin-ajax.php
│   │   │       │   │   ├── admin-footer.php
│   │   │       │   │   ├── admin-functions.php
│   │   │       │   │   ├── admin-header.php
│   │   │       │   │   ├── admin-post.php
│   │   │       │   │   ├── admin.php
│   │   │       │   │   ├── async-upload.php
│   │   │       │   │   ├── comment.php
│   │   │       │   │   ├── credits.php
│   │   │       │   │   ├── css/
│   │   │       │   │   │   ├── about-rtl.css
│   │   │       │   │   │   ├── about.css
│   │   │       │   │   │   ├── admin-menu-rtl.css
│   │   │       │   │   │   ├── admin-menu.css
│   │   │       │   │   │   ├── color-picker-rtl.css
│   │   │       │   │   │   ├── color-picker.css
│   │   │       │   │   │   ├── colors/
│   │   │       │   │   │   │   ├── _admin.scss
│   │   │       │   │   │   │   ├── _mixins.scss
│   │   │       │   │   │   │   ├── _variables.scss
│   │   │       │   │   │   │   ├── blue/
│   │   │       │   │   │   │   │   ├── colors-rtl.css
│   │   │       │   │   │   │   │   ├── colors.css
│   │   │       │   │   │   │   │   └── colors.scss
│   │   │       │   │   │   │   ├── coffee/
│   │   │       │   │   │   │   │   ├── colors-rtl.css
│   │   │       │   │   │   │   │   ├── colors.css
│   │   │       │   │   │   │   │   └── colors.scss
│   │   │       │   │   │   │   ├── ectoplasm/
│   │   │       │   │   │   │   │   ├── colors-rtl.css
│   │   │       │   │   │   │   │   ├── colors.css
│   │   │       │   │   │   │   │   └── colors.scss
│   │   │       │   │   │   │   ├── light/
│   │   │       │   │   │   │   │   ├── colors-rtl.css
│   │   │       │   │   │   │   │   ├── colors.css
│   │   │       │   │   │   │   │   └── colors.scss
│   │   │       │   │   │   │   ├── midnight/
│   │   │       │   │   │   │   │   ├── colors-rtl.css
│   │   │       │   │   │   │   │   ├── colors.css
│   │   │       │   │   │   │   │   └── colors.scss
│   │   │       │   │   │   │   ├── ocean/
│   │   │       │   │   │   │   │   ├── colors-rtl.css
│   │   │       │   │   │   │   │   ├── colors.css
│   │   │       │   │   │   │   │   └── colors.scss
│   │   │       │   │   │   │   └── sunrise/
│   │   │       │   │   │   │       ├── colors-rtl.css
│   │   │       │   │   │   │       ├── colors.css
│   │   │       │   │   │   │       └── colors.scss
│   │   │       │   │   │   ├── common-rtl.css
│   │   │       │   │   │   ├── common.css
│   │   │       │   │   │   ├── customize-controls-rtl.css
│   │   │       │   │   │   ├── customize-controls.css
│   │   │       │   │   │   ├── customize-nav-menus-rtl.css
│   │   │       │   │   │   ├── customize-nav-menus.css
│   │   │       │   │   │   ├── customize-widgets-rtl.css
│   │   │       │   │   │   ├── customize-widgets.css
│   │   │       │   │   │   ├── dashboard-rtl.css
│   │   │       │   │   │   ├── dashboard.css
│   │   │       │   │   │   ├── deprecated-media-rtl.css
│   │   │       │   │   │   ├── deprecated-media.css
│   │   │       │   │   │   ├── edit-rtl.css
│   │   │       │   │   │   ├── edit.css
│   │   │       │   │   │   ├── farbtastic-rtl.css
│   │   │       │   │   │   ├── farbtastic.css
│   │   │       │   │   │   ├── forms-rtl.css
│   │   │       │   │   │   ├── forms.css
│   │   │       │   │   │   ├── ie-rtl.css
│   │   │       │   │   │   ├── ie.css
│   │   │       │   │   │   ├── install-rtl.css
│   │   │       │   │   │   ├── install.css
│   │   │       │   │   │   ├── l10n-rtl.css
│   │   │       │   │   │   ├── l10n.css
│   │   │       │   │   │   ├── list-tables-rtl.css
│   │   │       │   │   │   ├── list-tables.css
│   │   │       │   │   │   ├── login-rtl.css
│   │   │       │   │   │   ├── login.css
│   │   │       │   │   │   ├── media-rtl.css
│   │   │       │   │   │   ├── media.css
│   │   │       │   │   │   ├── nav-menus-rtl.css
│   │   │       │   │   │   ├── nav-menus.css
│   │   │       │   │   │   ├── press-this-editor-rtl.css
│   │   │       │   │   │   ├── press-this-editor.css
│   │   │       │   │   │   ├── press-this-rtl.css
│   │   │       │   │   │   ├── press-this.css
│   │   │       │   │   │   ├── revisions-rtl.css
│   │   │       │   │   │   ├── revisions.css
│   │   │       │   │   │   ├── site-icon-rtl.css
│   │   │       │   │   │   ├── site-icon.css
│   │   │       │   │   │   ├── themes-rtl.css
│   │   │       │   │   │   ├── themes.css
│   │   │       │   │   │   ├── widgets-rtl.css
│   │   │       │   │   │   ├── widgets.css
│   │   │       │   │   │   ├── wp-admin-rtl.css
│   │   │       │   │   │   └── wp-admin.css
│   │   │       │   │   ├── custom-background.php
│   │   │       │   │   ├── custom-header.php
│   │   │       │   │   ├── customize.php
│   │   │       │   │   ├── edit-comments.php
│   │   │       │   │   ├── edit-form-advanced.php
│   │   │       │   │   ├── edit-form-comment.php
│   │   │       │   │   ├── edit-link-form.php
│   │   │       │   │   ├── edit-tag-form.php
│   │   │       │   │   ├── edit-tags.php
│   │   │       │   │   ├── edit.php
│   │   │       │   │   ├── export.php
│   │   │       │   │   ├── freedoms.php
│   │   │       │   │   ├── import.php
│   │   │       │   │   ├── includes/
│   │   │       │   │   │   ├── admin-filters.php
│   │   │       │   │   │   ├── admin.php
│   │   │       │   │   │   ├── ajax-actions.php
│   │   │       │   │   │   ├── bookmark.php
│   │   │       │   │   │   ├── class-ftp-pure.php
│   │   │       │   │   │   ├── class-ftp-sockets.php
│   │   │       │   │   │   ├── class-ftp.php
│   │   │       │   │   │   ├── class-pclzip.php
│   │   │       │   │   │   ├── class-walker-category-checklist.php
│   │   │       │   │   │   ├── class-walker-nav-menu-checklist.php
│   │   │       │   │   │   ├── class-walker-nav-menu-edit.php
│   │   │       │   │   │   ├── class-wp-comments-list-table.php
│   │   │       │   │   │   ├── class-wp-filesystem-base.php
│   │   │       │   │   │   ├── class-wp-filesystem-direct.php
│   │   │       │   │   │   ├── class-wp-filesystem-ftpext.php
│   │   │       │   │   │   ├── class-wp-filesystem-ftpsockets.php
│   │   │       │   │   │   ├── class-wp-filesystem-ssh2.php
│   │   │       │   │   │   ├── class-wp-importer.php
│   │   │       │   │   │   ├── class-wp-internal-pointers.php
│   │   │       │   │   │   ├── class-wp-links-list-table.php
│   │   │       │   │   │   ├── class-wp-list-table.php
│   │   │       │   │   │   ├── class-wp-media-list-table.php
│   │   │       │   │   │   ├── class-wp-ms-sites-list-table.php
│   │   │       │   │   │   ├── class-wp-ms-themes-list-table.php
│   │   │       │   │   │   ├── class-wp-ms-users-list-table.php
│   │   │       │   │   │   ├── class-wp-plugin-install-list-table.php
│   │   │       │   │   │   ├── class-wp-plugins-list-table.php
│   │   │       │   │   │   ├── class-wp-post-comments-list-table.php
│   │   │       │   │   │   ├── class-wp-posts-list-table.php
│   │   │       │   │   │   ├── class-wp-press-this.php
│   │   │       │   │   │   ├── class-wp-screen.php
│   │   │       │   │   │   ├── class-wp-site-icon.php
│   │   │       │   │   │   ├── class-wp-terms-list-table.php
│   │   │       │   │   │   ├── class-wp-theme-install-list-table.php
│   │   │       │   │   │   ├── class-wp-themes-list-table.php
│   │   │       │   │   │   ├── class-wp-upgrader-skins.php
│   │   │       │   │   │   ├── class-wp-upgrader.php
│   │   │       │   │   │   ├── class-wp-users-list-table.php
│   │   │       │   │   │   ├── comment.php
│   │   │       │   │   │   ├── continents-cities.php
│   │   │       │   │   │   ├── credits.php
│   │   │       │   │   │   ├── dashboard.php
│   │   │       │   │   │   ├── deprecated.php
│   │   │       │   │   │   ├── edit-tag-messages.php
│   │   │       │   │   │   ├── export.php
│   │   │       │   │   │   ├── file.php
│   │   │       │   │   │   ├── image-edit.php
│   │   │       │   │   │   ├── image.php
│   │   │       │   │   │   ├── import.php
│   │   │       │   │   │   ├── list-table.php
│   │   │       │   │   │   ├── media.php
│   │   │       │   │   │   ├── menu.php
│   │   │       │   │   │   ├── meta-boxes.php
│   │   │       │   │   │   ├── misc.php
│   │   │       │   │   │   ├── ms-admin-filters.php
│   │   │       │   │   │   ├── ms-deprecated.php
│   │   │       │   │   │   ├── ms.php
│   │   │       │   │   │   ├── nav-menu.php
│   │   │       │   │   │   ├── network.php
│   │   │       │   │   │   ├── noop.php
│   │   │       │   │   │   ├── options.php
│   │   │       │   │   │   ├── plugin-install.php
│   │   │       │   │   │   ├── plugin.php
│   │   │       │   │   │   ├── post.php
│   │   │       │   │   │   ├── revision.php
│   │   │       │   │   │   ├── schema.php
│   │   │       │   │   │   ├── screen.php
│   │   │       │   │   │   ├── taxonomy.php
│   │   │       │   │   │   ├── template.php
│   │   │       │   │   │   ├── theme-install.php
│   │   │       │   │   │   ├── theme.php
│   │   │       │   │   │   ├── translation-install.php
│   │   │       │   │   │   ├── update-core.php
│   │   │       │   │   │   ├── update.php
│   │   │       │   │   │   ├── upgrade.php
│   │   │       │   │   │   ├── user.php
│   │   │       │   │   │   └── widgets.php
│   │   │       │   │   ├── index.php
│   │   │       │   │   ├── install-helper.php
│   │   │       │   │   ├── install.php
│   │   │       │   │   ├── js/
│   │   │       │   │   │   ├── accordion.js
│   │   │       │   │   │   ├── bookmarklet.js
│   │   │       │   │   │   ├── color-picker.js
│   │   │       │   │   │   ├── comment.js
│   │   │       │   │   │   ├── common.js
│   │   │       │   │   │   ├── custom-background.js
│   │   │       │   │   │   ├── custom-header.js
│   │   │       │   │   │   ├── customize-controls.js
│   │   │       │   │   │   ├── customize-nav-menus.js
│   │   │       │   │   │   ├── customize-widgets.js
│   │   │       │   │   │   ├── dashboard.js
│   │   │       │   │   │   ├── edit-comments.js
│   │   │       │   │   │   ├── editor-expand.js
│   │   │       │   │   │   ├── editor.js
│   │   │       │   │   │   ├── farbtastic.js
│   │   │       │   │   │   ├── gallery.js
│   │   │       │   │   │   ├── image-edit.js
│   │   │       │   │   │   ├── inline-edit-post.js
│   │   │       │   │   │   ├── inline-edit-tax.js
│   │   │       │   │   │   ├── language-chooser.js
│   │   │       │   │   │   ├── link.js
│   │   │       │   │   │   ├── media-gallery.js
│   │   │       │   │   │   ├── media-upload.js
│   │   │       │   │   │   ├── media.js
│   │   │       │   │   │   ├── nav-menu.js
│   │   │       │   │   │   ├── password-strength-meter.js
│   │   │       │   │   │   ├── plugin-install.js
│   │   │       │   │   │   ├── post.js
│   │   │       │   │   │   ├── postbox.js
│   │   │       │   │   │   ├── press-this.js
│   │   │       │   │   │   ├── revisions.js
│   │   │       │   │   │   ├── set-post-thumbnail.js
│   │   │       │   │   │   ├── svg-painter.js
│   │   │       │   │   │   ├── tags-box.js
│   │   │       │   │   │   ├── tags.js
│   │   │       │   │   │   ├── theme.js
│   │   │       │   │   │   ├── updates.js
│   │   │       │   │   │   ├── user-profile.js
│   │   │       │   │   │   ├── user-suggest.js
│   │   │       │   │   │   ├── widgets.js
│   │   │       │   │   │   ├── word-count.js
│   │   │       │   │   │   ├── wp-fullscreen-stub.js
│   │   │       │   │   │   └── xfn.js
│   │   │       │   │   ├── link-add.php
│   │   │       │   │   ├── link-manager.php
│   │   │       │   │   ├── link-parse-opml.php
│   │   │       │   │   ├── link.php
│   │   │       │   │   ├── load-scripts.php
│   │   │       │   │   ├── load-styles.php
│   │   │       │   │   ├── maint/
│   │   │       │   │   │   └── repair.php
│   │   │       │   │   ├── media-new.php
│   │   │       │   │   ├── media-upload.php
│   │   │       │   │   ├── media.php
│   │   │       │   │   ├── menu-header.php
│   │   │       │   │   ├── menu.php
│   │   │       │   │   ├── moderation.php
│   │   │       │   │   ├── ms-admin.php
│   │   │       │   │   ├── ms-delete-site.php
│   │   │       │   │   ├── ms-edit.php
│   │   │       │   │   ├── ms-options.php
│   │   │       │   │   ├── ms-sites.php
│   │   │       │   │   ├── ms-themes.php
│   │   │       │   │   ├── ms-upgrade-network.php
│   │   │       │   │   ├── ms-users.php
│   │   │       │   │   ├── my-sites.php
│   │   │       │   │   ├── nav-menus.php
│   │   │       │   │   ├── network/
│   │   │       │   │   │   ├── about.php
│   │   │       │   │   │   ├── admin.php
│   │   │       │   │   │   ├── credits.php
│   │   │       │   │   │   ├── edit.php
│   │   │       │   │   │   ├── freedoms.php
│   │   │       │   │   │   ├── index.php
│   │   │       │   │   │   ├── menu.php
│   │   │       │   │   │   ├── plugin-editor.php
│   │   │       │   │   │   ├── plugin-install.php
│   │   │       │   │   │   ├── plugins.php
│   │   │       │   │   │   ├── profile.php
│   │   │       │   │   │   ├── settings.php
│   │   │       │   │   │   ├── setup.php
│   │   │       │   │   │   ├── site-info.php
│   │   │       │   │   │   ├── site-new.php
│   │   │       │   │   │   ├── site-settings.php
│   │   │       │   │   │   ├── site-themes.php
│   │   │       │   │   │   ├── site-users.php
│   │   │       │   │   │   ├── sites.php
│   │   │       │   │   │   ├── theme-editor.php
│   │   │       │   │   │   ├── theme-install.php
│   │   │       │   │   │   ├── themes.php
│   │   │       │   │   │   ├── update-core.php
│   │   │       │   │   │   ├── update.php
│   │   │       │   │   │   ├── upgrade.php
│   │   │       │   │   │   ├── user-edit.php
│   │   │       │   │   │   ├── user-new.php
│   │   │       │   │   │   └── users.php
│   │   │       │   │   ├── network.php
│   │   │       │   │   ├── options-discussion.php
│   │   │       │   │   ├── options-general.php
│   │   │       │   │   ├── options-head.php
│   │   │       │   │   ├── options-media.php
│   │   │       │   │   ├── options-permalink.php
│   │   │       │   │   ├── options-reading.php
│   │   │       │   │   ├── options-writing.php
│   │   │       │   │   ├── options.php
│   │   │       │   │   ├── plugin-editor.php
│   │   │       │   │   ├── plugin-install.php
│   │   │       │   │   ├── plugins.php
│   │   │       │   │   ├── post-new.php
│   │   │       │   │   ├── post.php
│   │   │       │   │   ├── press-this.php
│   │   │       │   │   ├── profile.php
│   │   │       │   │   ├── revision.php
│   │   │       │   │   ├── setup-config.php
│   │   │       │   │   ├── theme-editor.php
│   │   │       │   │   ├── theme-install.php
│   │   │       │   │   ├── themes.php
│   │   │       │   │   ├── tools.php
│   │   │       │   │   ├── update-core.php
│   │   │       │   │   ├── update.php
│   │   │       │   │   ├── upgrade-functions.php
│   │   │       │   │   ├── upgrade.php
│   │   │       │   │   ├── upload.php
│   │   │       │   │   ├── user/
│   │   │       │   │   │   ├── about.php
│   │   │       │   │   │   ├── admin.php
│   │   │       │   │   │   ├── credits.php
│   │   │       │   │   │   ├── freedoms.php
│   │   │       │   │   │   ├── index.php
│   │   │       │   │   │   ├── menu.php
│   │   │       │   │   │   ├── profile.php
│   │   │       │   │   │   └── user-edit.php
│   │   │       │   │   ├── user-edit.php
│   │   │       │   │   ├── user-new.php
│   │   │       │   │   ├── users.php
│   │   │       │   │   └── widgets.php
│   │   │       │   ├── wp-blog-header.php
│   │   │       │   ├── wp-comments-post.php
│   │   │       │   ├── wp-config.php
│   │   │       │   ├── wp-content/
│   │   │       │   │   ├── index.php
│   │   │       │   │   ├── plugins/
│   │   │       │   │   │   ├── akismet/
│   │   │       │   │   │   │   ├── .htaccess
│   │   │       │   │   │   │   ├── LICENSE.txt
│   │   │       │   │   │   │   ├── _inc/
│   │   │       │   │   │   │   │   ├── akismet.css
│   │   │       │   │   │   │   │   ├── akismet.js
│   │   │       │   │   │   │   │   └── form.js
│   │   │       │   │   │   │   ├── akismet.php
│   │   │       │   │   │   │   ├── class.akismet-admin.php
│   │   │       │   │   │   │   ├── class.akismet-widget.php
│   │   │       │   │   │   │   ├── class.akismet.php
│   │   │       │   │   │   │   ├── index.php
│   │   │       │   │   │   │   ├── readme.txt
│   │   │       │   │   │   │   ├── views/
│   │   │       │   │   │   │   │   ├── config.php
│   │   │       │   │   │   │   │   ├── get.php
│   │   │       │   │   │   │   │   ├── notice.php
│   │   │       │   │   │   │   │   ├── start.php
│   │   │       │   │   │   │   │   ├── stats.php
│   │   │       │   │   │   │   │   └── strict.php
│   │   │       │   │   │   │   └── wrapper.php
│   │   │       │   │   │   ├── hello.php
│   │   │       │   │   │   └── index.php
│   │   │       │   │   └── themes/
│   │   │       │   │       ├── index.php
│   │   │       │   │       ├── twentyfifteen/
│   │   │       │   │       │   ├── 404.php
│   │   │       │   │       │   ├── archive.php
│   │   │       │   │       │   ├── author-bio.php
│   │   │       │   │       │   ├── comments.php
│   │   │       │   │       │   ├── content-link.php
│   │   │       │   │       │   ├── content-none.php
│   │   │       │   │       │   ├── content-page.php
│   │   │       │   │       │   ├── content-search.php
│   │   │       │   │       │   ├── content.php
│   │   │       │   │       │   ├── css/
│   │   │       │   │       │   │   ├── editor-style.css
│   │   │       │   │       │   │   ├── ie.css
│   │   │       │   │       │   │   └── ie7.css
│   │   │       │   │       │   ├── footer.php
│   │   │       │   │       │   ├── functions.php
│   │   │       │   │       │   ├── genericons/
│   │   │       │   │       │   │   ├── COPYING.txt
│   │   │       │   │       │   │   ├── LICENSE.txt
│   │   │       │   │       │   │   ├── README.md
│   │   │       │   │       │   │   └── genericons.css
│   │   │       │   │       │   ├── header.php
│   │   │       │   │       │   ├── image.php
│   │   │       │   │       │   ├── inc/
│   │   │       │   │       │   │   ├── back-compat.php
│   │   │       │   │       │   │   ├── custom-header.php
│   │   │       │   │       │   │   ├── customizer.php
│   │   │       │   │       │   │   └── template-tags.php
│   │   │       │   │       │   ├── index.php
│   │   │       │   │       │   ├── js/
│   │   │       │   │       │   │   ├── color-scheme-control.js
│   │   │       │   │       │   │   ├── customize-preview.js
│   │   │       │   │       │   │   ├── functions.js
│   │   │       │   │       │   │   ├── html5.js
│   │   │       │   │       │   │   ├── keyboard-image-navigation.js
│   │   │       │   │       │   │   └── skip-link-focus-fix.js
│   │   │       │   │       │   ├── languages/
│   │   │       │   │       │   │   └── twentyfifteen.pot
│   │   │       │   │       │   ├── page.php
│   │   │       │   │       │   ├── readme.txt
│   │   │       │   │       │   ├── rtl.css
│   │   │       │   │       │   ├── search.php
│   │   │       │   │       │   ├── sidebar.php
│   │   │       │   │       │   ├── single.php
│   │   │       │   │       │   └── style.css
│   │   │       │   │       ├── twentyfourteen/
│   │   │       │   │       │   ├── 404.php
│   │   │       │   │       │   ├── archive.php
│   │   │       │   │       │   ├── author.php
│   │   │       │   │       │   ├── category.php
│   │   │       │   │       │   ├── comments.php
│   │   │       │   │       │   ├── content-aside.php
│   │   │       │   │       │   ├── content-audio.php
│   │   │       │   │       │   ├── content-featured-post.php
│   │   │       │   │       │   ├── content-gallery.php
│   │   │       │   │       │   ├── content-image.php
│   │   │       │   │       │   ├── content-link.php
│   │   │       │   │       │   ├── content-none.php
│   │   │       │   │       │   ├── content-page.php
│   │   │       │   │       │   ├── content-quote.php
│   │   │       │   │       │   ├── content-video.php
│   │   │       │   │       │   ├── content.php
│   │   │       │   │       │   ├── css/
│   │   │       │   │       │   │   ├── editor-style.css
│   │   │       │   │       │   │   └── ie.css
│   │   │       │   │       │   ├── featured-content.php
│   │   │       │   │       │   ├── footer.php
│   │   │       │   │       │   ├── functions.php
│   │   │       │   │       │   ├── genericons/
│   │   │       │   │       │   │   ├── COPYING.txt
│   │   │       │   │       │   │   ├── Genericons-Regular.otf
│   │   │       │   │       │   │   ├── LICENSE.txt
│   │   │       │   │       │   │   ├── README.txt
│   │   │       │   │       │   │   └── genericons.css
│   │   │       │   │       │   ├── header.php
│   │   │       │   │       │   ├── image.php
│   │   │       │   │       │   ├── inc/
│   │   │       │   │       │   │   ├── back-compat.php
│   │   │       │   │       │   │   ├── custom-header.php
│   │   │       │   │       │   │   ├── customizer.php
│   │   │       │   │       │   │   ├── featured-content.php
│   │   │       │   │       │   │   ├── template-tags.php
│   │   │       │   │       │   │   └── widgets.php
│   │   │       │   │       │   ├── index.php
│   │   │       │   │       │   ├── js/
│   │   │       │   │       │   │   ├── customizer.js
│   │   │       │   │       │   │   ├── featured-content-admin.js
│   │   │       │   │       │   │   ├── functions.js
│   │   │       │   │       │   │   ├── html5.js
│   │   │       │   │       │   │   ├── keyboard-image-navigation.js
│   │   │       │   │       │   │   └── slider.js
│   │   │       │   │       │   ├── languages/
│   │   │       │   │       │   │   └── twentyfourteen.pot
│   │   │       │   │       │   ├── page-templates/
│   │   │       │   │       │   │   ├── contributors.php
│   │   │       │   │       │   │   └── full-width.php
│   │   │       │   │       │   ├── page.php
│   │   │       │   │       │   ├── readme.txt
│   │   │       │   │       │   ├── rtl.css
│   │   │       │   │       │   ├── search.php
│   │   │       │   │       │   ├── sidebar-content.php
│   │   │       │   │       │   ├── sidebar-footer.php
│   │   │       │   │       │   ├── sidebar.php
│   │   │       │   │       │   ├── single.php
│   │   │       │   │       │   ├── style.css
│   │   │       │   │       │   ├── tag.php
│   │   │       │   │       │   └── taxonomy-post_format.php
│   │   │       │   │       └── twentysixteen/
│   │   │       │   │           ├── 404.php
│   │   │       │   │           ├── archive.php
│   │   │       │   │           ├── comments.php
│   │   │       │   │           ├── css/
│   │   │       │   │           │   ├── editor-style.css
│   │   │       │   │           │   ├── ie.css
│   │   │       │   │           │   ├── ie7.css
│   │   │       │   │           │   └── ie8.css
│   │   │       │   │           ├── footer.php
│   │   │       │   │           ├── functions.php
│   │   │       │   │           ├── genericons/
│   │   │       │   │           │   ├── COPYING.txt
│   │   │       │   │           │   ├── LICENSE.txt
│   │   │       │   │           │   ├── README.md
│   │   │       │   │           │   └── genericons.css
│   │   │       │   │           ├── header.php
│   │   │       │   │           ├── image.php
│   │   │       │   │           ├── inc/
│   │   │       │   │           │   ├── back-compat.php
│   │   │       │   │           │   ├── customizer.php
│   │   │       │   │           │   └── template-tags.php
│   │   │       │   │           ├── index.php
│   │   │       │   │           ├── js/
│   │   │       │   │           │   ├── color-scheme-control.js
│   │   │       │   │           │   ├── customize-preview.js
│   │   │       │   │           │   ├── functions.js
│   │   │       │   │           │   ├── html5.js
│   │   │       │   │           │   ├── keyboard-image-navigation.js
│   │   │       │   │           │   └── skip-link-focus-fix.js
│   │   │       │   │           ├── languages/
│   │   │       │   │           │   └── twentysixteen.pot
│   │   │       │   │           ├── page.php
│   │   │       │   │           ├── readme.txt
│   │   │       │   │           ├── rtl.css
│   │   │       │   │           ├── search.php
│   │   │       │   │           ├── searchform.php
│   │   │       │   │           ├── sidebar-content-bottom.php
│   │   │       │   │           ├── sidebar.php
│   │   │       │   │           ├── single.php
│   │   │       │   │           ├── style.css
│   │   │       │   │           └── template-parts/
│   │   │       │   │               ├── biography.php
│   │   │       │   │               ├── content-none.php
│   │   │       │   │               ├── content-page.php
│   │   │       │   │               ├── content-search.php
│   │   │       │   │               ├── content-single.php
│   │   │       │   │               └── content.php
│   │   │       │   ├── wp-cron.php
│   │   │       │   ├── wp-includes/
│   │   │       │   │   ├── ID3/
│   │   │       │   │   │   ├── getid3.lib.php
│   │   │       │   │   │   ├── getid3.php
│   │   │       │   │   │   ├── license.commercial.txt
│   │   │       │   │   │   ├── license.txt
│   │   │       │   │   │   ├── module.audio-video.asf.php
│   │   │       │   │   │   ├── module.audio-video.flv.php
│   │   │       │   │   │   ├── module.audio-video.matroska.php
│   │   │       │   │   │   ├── module.audio-video.quicktime.php
│   │   │       │   │   │   ├── module.audio-video.riff.php
│   │   │       │   │   │   ├── module.audio.ac3.php
│   │   │       │   │   │   ├── module.audio.dts.php
│   │   │       │   │   │   ├── module.audio.flac.php
│   │   │       │   │   │   ├── module.audio.mp3.php
│   │   │       │   │   │   ├── module.audio.ogg.php
│   │   │       │   │   │   ├── module.tag.apetag.php
│   │   │       │   │   │   ├── module.tag.id3v1.php
│   │   │       │   │   │   ├── module.tag.id3v2.php
│   │   │       │   │   │   ├── module.tag.lyrics3.php
│   │   │       │   │   │   └── readme.txt
│   │   │       │   │   ├── SimplePie/
│   │   │       │   │   │   ├── Author.php
│   │   │       │   │   │   ├── Cache/
│   │   │       │   │   │   │   ├── Base.php
│   │   │       │   │   │   │   ├── DB.php
│   │   │       │   │   │   │   ├── File.php
│   │   │       │   │   │   │   ├── Memcache.php
│   │   │       │   │   │   │   └── MySQL.php
│   │   │       │   │   │   ├── Cache.php
│   │   │       │   │   │   ├── Caption.php
│   │   │       │   │   │   ├── Category.php
│   │   │       │   │   │   ├── Content/
│   │   │       │   │   │   │   └── Type/
│   │   │       │   │   │   │       └── Sniffer.php
│   │   │       │   │   │   ├── Copyright.php
│   │   │       │   │   │   ├── Core.php
│   │   │       │   │   │   ├── Credit.php
│   │   │       │   │   │   ├── Decode/
│   │   │       │   │   │   │   └── HTML/
│   │   │       │   │   │   │       └── Entities.php
│   │   │       │   │   │   ├── Enclosure.php
│   │   │       │   │   │   ├── Exception.php
│   │   │       │   │   │   ├── File.php
│   │   │       │   │   │   ├── HTTP/
│   │   │       │   │   │   │   └── Parser.php
│   │   │       │   │   │   ├── IRI.php
│   │   │       │   │   │   ├── Item.php
│   │   │       │   │   │   ├── Locator.php
│   │   │       │   │   │   ├── Misc.php
│   │   │       │   │   │   ├── Net/
│   │   │       │   │   │   │   └── IPv6.php
│   │   │       │   │   │   ├── Parse/
│   │   │       │   │   │   │   └── Date.php
│   │   │       │   │   │   ├── Parser.php
│   │   │       │   │   │   ├── Rating.php
│   │   │       │   │   │   ├── Registry.php
│   │   │       │   │   │   ├── Restriction.php
│   │   │       │   │   │   ├── Sanitize.php
│   │   │       │   │   │   ├── Source.php
│   │   │       │   │   │   ├── XML/
│   │   │       │   │   │   │   └── Declaration/
│   │   │       │   │   │   │       └── Parser.php
│   │   │       │   │   │   └── gzdecode.php
│   │   │       │   │   ├── Text/
│   │   │       │   │   │   ├── Diff/
│   │   │       │   │   │   │   ├── Engine/
│   │   │       │   │   │   │   │   ├── native.php
│   │   │       │   │   │   │   │   ├── shell.php
│   │   │       │   │   │   │   │   ├── string.php
│   │   │       │   │   │   │   │   └── xdiff.php
│   │   │       │   │   │   │   ├── Renderer/
│   │   │       │   │   │   │   │   └── inline.php
│   │   │       │   │   │   │   └── Renderer.php
│   │   │       │   │   │   └── Diff.php
│   │   │       │   │   ├── admin-bar.php
│   │   │       │   │   ├── atomlib.php
│   │   │       │   │   ├── author-template.php
│   │   │       │   │   ├── bookmark-template.php
│   │   │       │   │   ├── bookmark.php
│   │   │       │   │   ├── cache.php
│   │   │       │   │   ├── canonical.php
│   │   │       │   │   ├── capabilities.php
│   │   │       │   │   ├── category-template.php
│   │   │       │   │   ├── category.php
│   │   │       │   │   ├── certificates/
│   │   │       │   │   │   └── ca-bundle.crt
│   │   │       │   │   ├── class-IXR.php
│   │   │       │   │   ├── class-feed.php
│   │   │       │   │   ├── class-http.php
│   │   │       │   │   ├── class-json.php
│   │   │       │   │   ├── class-oembed.php
│   │   │       │   │   ├── class-phpass.php
│   │   │       │   │   ├── class-phpmailer.php
│   │   │       │   │   ├── class-pop3.php
│   │   │       │   │   ├── class-simplepie.php
│   │   │       │   │   ├── class-smtp.php
│   │   │       │   │   ├── class-snoopy.php
│   │   │       │   │   ├── class-walker-category-dropdown.php
│   │   │       │   │   ├── class-walker-category.php
│   │   │       │   │   ├── class-walker-comment.php
│   │   │       │   │   ├── class-walker-page-dropdown.php
│   │   │       │   │   ├── class-walker-page.php
│   │   │       │   │   ├── class-wp-admin-bar.php
│   │   │       │   │   ├── class-wp-ajax-response.php
│   │   │       │   │   ├── class-wp-comment-query.php
│   │   │       │   │   ├── class-wp-comment.php
│   │   │       │   │   ├── class-wp-customize-control.php
│   │   │       │   │   ├── class-wp-customize-manager.php
│   │   │       │   │   ├── class-wp-customize-nav-menus.php
│   │   │       │   │   ├── class-wp-customize-panel.php
│   │   │       │   │   ├── class-wp-customize-section.php
│   │   │       │   │   ├── class-wp-customize-setting.php
│   │   │       │   │   ├── class-wp-customize-widgets.php
│   │   │       │   │   ├── class-wp-editor.php
│   │   │       │   │   ├── class-wp-embed.php
│   │   │       │   │   ├── class-wp-error.php
│   │   │       │   │   ├── class-wp-http-cookie.php
│   │   │       │   │   ├── class-wp-http-curl.php
│   │   │       │   │   ├── class-wp-http-encoding.php
│   │   │       │   │   ├── class-wp-http-ixr-client.php
│   │   │       │   │   ├── class-wp-http-proxy.php
│   │   │       │   │   ├── class-wp-http-response.php
│   │   │       │   │   ├── class-wp-http-streams.php
│   │   │       │   │   ├── class-wp-image-editor-gd.php
│   │   │       │   │   ├── class-wp-image-editor-imagick.php
│   │   │       │   │   ├── class-wp-image-editor.php
│   │   │       │   │   ├── class-wp-meta-query.php
│   │   │       │   │   ├── class-wp-network.php
│   │   │       │   │   ├── class-wp-oembed-controller.php
│   │   │       │   │   ├── class-wp-post.php
│   │   │       │   │   ├── class-wp-rewrite.php
│   │   │       │   │   ├── class-wp-role.php
│   │   │       │   │   ├── class-wp-roles.php
│   │   │       │   │   ├── class-wp-tax-query.php
│   │   │       │   │   ├── class-wp-term.php
│   │   │       │   │   ├── class-wp-theme.php
│   │   │       │   │   ├── class-wp-user-query.php
│   │   │       │   │   ├── class-wp-user.php
│   │   │       │   │   ├── class-wp-walker.php
│   │   │       │   │   ├── class-wp-widget-factory.php
│   │   │       │   │   ├── class-wp-widget.php
│   │   │       │   │   ├── class-wp-xmlrpc-server.php
│   │   │       │   │   ├── class-wp.php
│   │   │       │   │   ├── class.wp-dependencies.php
│   │   │       │   │   ├── class.wp-scripts.php
│   │   │       │   │   ├── class.wp-styles.php
│   │   │       │   │   ├── comment-template.php
│   │   │       │   │   ├── comment.php
│   │   │       │   │   ├── compat.php
│   │   │       │   │   ├── cron.php
│   │   │       │   │   ├── css/
│   │   │       │   │   │   ├── admin-bar-rtl.css
│   │   │       │   │   │   ├── admin-bar.css
│   │   │       │   │   │   ├── buttons-rtl.css
│   │   │       │   │   │   ├── buttons.css
│   │   │       │   │   │   ├── customize-preview.css
│   │   │       │   │   │   ├── dashicons.css
│   │   │       │   │   │   ├── editor-rtl.css
│   │   │       │   │   │   ├── editor.css
│   │   │       │   │   │   ├── jquery-ui-dialog-rtl.css
│   │   │       │   │   │   ├── jquery-ui-dialog.css
│   │   │       │   │   │   ├── media-views-rtl.css
│   │   │       │   │   │   ├── media-views.css
│   │   │       │   │   │   ├── wp-auth-check-rtl.css
│   │   │       │   │   │   ├── wp-auth-check.css
│   │   │       │   │   │   ├── wp-embed-template-ie.css
│   │   │       │   │   │   ├── wp-embed-template.css
│   │   │       │   │   │   ├── wp-pointer-rtl.css
│   │   │       │   │   │   └── wp-pointer.css
│   │   │       │   │   ├── customize/
│   │   │       │   │   │   ├── class-wp-customize-background-image-control.php
│   │   │       │   │   │   ├── class-wp-customize-background-image-setting.php
│   │   │       │   │   │   ├── class-wp-customize-color-control.php
│   │   │       │   │   │   ├── class-wp-customize-cropped-image-control.php
│   │   │       │   │   │   ├── class-wp-customize-filter-setting.php
│   │   │       │   │   │   ├── class-wp-customize-header-image-control.php
│   │   │       │   │   │   ├── class-wp-customize-header-image-setting.php
│   │   │       │   │   │   ├── class-wp-customize-image-control.php
│   │   │       │   │   │   ├── class-wp-customize-media-control.php
│   │   │       │   │   │   ├── class-wp-customize-nav-menu-auto-add-control.php
│   │   │       │   │   │   ├── class-wp-customize-nav-menu-control.php
│   │   │       │   │   │   ├── class-wp-customize-nav-menu-item-control.php
│   │   │       │   │   │   ├── class-wp-customize-nav-menu-item-setting.php
│   │   │       │   │   │   ├── class-wp-customize-nav-menu-location-control.php
│   │   │       │   │   │   ├── class-wp-customize-nav-menu-name-control.php
│   │   │       │   │   │   ├── class-wp-customize-nav-menu-section.php
│   │   │       │   │   │   ├── class-wp-customize-nav-menu-setting.php
│   │   │       │   │   │   ├── class-wp-customize-nav-menus-panel.php
│   │   │       │   │   │   ├── class-wp-customize-new-menu-control.php
│   │   │       │   │   │   ├── class-wp-customize-new-menu-section.php
│   │   │       │   │   │   ├── class-wp-customize-sidebar-section.php
│   │   │       │   │   │   ├── class-wp-customize-site-icon-control.php
│   │   │       │   │   │   ├── class-wp-customize-theme-control.php
│   │   │       │   │   │   ├── class-wp-customize-themes-section.php
│   │   │       │   │   │   ├── class-wp-customize-upload-control.php
│   │   │       │   │   │   ├── class-wp-widget-area-customize-control.php
│   │   │       │   │   │   └── class-wp-widget-form-customize-control.php
│   │   │       │   │   ├── date.php
│   │   │       │   │   ├── default-constants.php
│   │   │       │   │   ├── default-filters.php
│   │   │       │   │   ├── default-widgets.php
│   │   │       │   │   ├── deprecated.php
│   │   │       │   │   ├── embed-template.php
│   │   │       │   │   ├── embed.php
│   │   │       │   │   ├── feed-atom-comments.php
│   │   │       │   │   ├── feed-atom.php
│   │   │       │   │   ├── feed-rdf.php
│   │   │       │   │   ├── feed-rss.php
│   │   │       │   │   ├── feed-rss2-comments.php
│   │   │       │   │   ├── feed-rss2.php
│   │   │       │   │   ├── feed.php
│   │   │       │   │   ├── formatting.php
│   │   │       │   │   ├── functions.php
│   │   │       │   │   ├── functions.wp-scripts.php
│   │   │       │   │   ├── functions.wp-styles.php
│   │   │       │   │   ├── general-template.php
│   │   │       │   │   ├── http.php
│   │   │       │   │   ├── images/
│   │   │       │   │   │   └── crystal/
│   │   │       │   │   │       └── license.txt
│   │   │       │   │   ├── js/
│   │   │       │   │   │   ├── admin-bar.js
│   │   │       │   │   │   ├── autosave.js
│   │   │       │   │   │   ├── colorpicker.js
│   │   │       │   │   │   ├── comment-reply.js
│   │   │       │   │   │   ├── crop/
│   │   │       │   │   │   │   ├── cropper.css
│   │   │       │   │   │   │   └── cropper.js
│   │   │       │   │   │   ├── customize-base.js
│   │   │       │   │   │   ├── customize-loader.js
│   │   │       │   │   │   ├── customize-models.js
│   │   │       │   │   │   ├── customize-preview-nav-menus.js
│   │   │       │   │   │   ├── customize-preview-widgets.js
│   │   │       │   │   │   ├── customize-preview.js
│   │   │       │   │   │   ├── customize-views.js
│   │   │       │   │   │   ├── heartbeat.js
│   │   │       │   │   │   ├── hoverIntent.js
│   │   │       │   │   │   ├── imgareaselect/
│   │   │       │   │   │   │   ├── imgareaselect.css
│   │   │       │   │   │   │   └── jquery.imgareaselect.js
│   │   │       │   │   │   ├── jquery/
│   │   │       │   │   │   │   ├── jquery-migrate.js
│   │   │       │   │   │   │   ├── jquery.form.js
│   │   │       │   │   │   │   ├── jquery.hotkeys.js
│   │   │       │   │   │   │   ├── jquery.js
│   │   │       │   │   │   │   ├── jquery.query.js
│   │   │       │   │   │   │   ├── jquery.schedule.js
│   │   │       │   │   │   │   ├── jquery.serialize-object.js
│   │   │       │   │   │   │   ├── jquery.table-hotkeys.js
│   │   │       │   │   │   │   ├── jquery.ui.touch-punch.js
│   │   │       │   │   │   │   └── suggest.js
│   │   │       │   │   │   ├── json2.js
│   │   │       │   │   │   ├── mce-view.js
│   │   │       │   │   │   ├── media-audiovideo.js
│   │   │       │   │   │   ├── media-editor.js
│   │   │       │   │   │   ├── media-grid.js
│   │   │       │   │   │   ├── media-models.js
│   │   │       │   │   │   ├── media-views.js
│   │   │       │   │   │   ├── mediaelement/
│   │   │       │   │   │   │   ├── flashmediaelement.swf
│   │   │       │   │   │   │   ├── silverlightmediaelement.xap
│   │   │       │   │   │   │   ├── wp-mediaelement.css
│   │   │       │   │   │   │   ├── wp-mediaelement.js
│   │   │       │   │   │   │   └── wp-playlist.js
│   │   │       │   │   │   ├── plupload/
│   │   │       │   │   │   │   ├── handlers.js
│   │   │       │   │   │   │   ├── license.txt
│   │   │       │   │   │   │   ├── plupload.flash.swf
│   │   │       │   │   │   │   ├── plupload.silverlight.xap
│   │   │       │   │   │   │   └── wp-plupload.js
│   │   │       │   │   │   ├── quicktags.js
│   │   │       │   │   │   ├── shortcode.js
│   │   │       │   │   │   ├── swfobject.js
│   │   │       │   │   │   ├── swfupload/
│   │   │       │   │   │   │   ├── handlers.js
│   │   │       │   │   │   │   ├── license.txt
│   │   │       │   │   │   │   ├── plugins/
│   │   │       │   │   │   │   │   ├── swfupload.cookies.js
│   │   │       │   │   │   │   │   ├── swfupload.queue.js
│   │   │       │   │   │   │   │   ├── swfupload.speed.js
│   │   │       │   │   │   │   │   └── swfupload.swfobject.js
│   │   │       │   │   │   │   ├── swfupload.js
│   │   │       │   │   │   │   └── swfupload.swf
│   │   │       │   │   │   ├── thickbox/
│   │   │       │   │   │   │   ├── thickbox.css
│   │   │       │   │   │   │   └── thickbox.js
│   │   │       │   │   │   ├── tinymce/
│   │   │       │   │   │   │   ├── langs/
│   │   │       │   │   │   │   │   └── wp-langs-en.js
│   │   │       │   │   │   │   ├── license.txt
│   │   │       │   │   │   │   ├── plugins/
│   │   │       │   │   │   │   │   ├── charmap/
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── colorpicker/
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── compat3x/
│   │   │       │   │   │   │   │   │   ├── css/
│   │   │       │   │   │   │   │   │   │   └── dialog.css
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── directionality/
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── fullscreen/
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── hr/
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── image/
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── lists/
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── media/
│   │   │       │   │   │   │   │   │   ├── moxieplayer.swf
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── paste/
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── tabfocus/
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── textcolor/
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── wordpress/
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── wpautoresize/
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── wpdialogs/
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── wpeditimage/
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── wpembed/
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── wpemoji/
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── wpgallery/
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── wplink/
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   ├── wptextpattern/
│   │   │       │   │   │   │   │   │   └── plugin.js
│   │   │       │   │   │   │   │   └── wpview/
│   │   │       │   │   │   │   │       └── plugin.js
│   │   │       │   │   │   │   ├── skins/
│   │   │       │   │   │   │   │   ├── lightgray/
│   │   │       │   │   │   │   │   │   └── fonts/
│   │   │       │   │   │   │   │   │       └── readme.md
│   │   │       │   │   │   │   │   └── wordpress/
│   │   │       │   │   │   │   │       └── wp-content.css
│   │   │       │   │   │   │   ├── themes/
│   │   │       │   │   │   │   │   └── modern/
│   │   │       │   │   │   │   │       └── theme.js
│   │   │       │   │   │   │   ├── tiny_mce_popup.js
│   │   │       │   │   │   │   ├── utils/
│   │   │       │   │   │   │   │   ├── editable_selects.js
│   │   │       │   │   │   │   │   ├── form_utils.js
│   │   │       │   │   │   │   │   ├── mctabs.js
│   │   │       │   │   │   │   │   └── validate.js
│   │   │       │   │   │   │   └── wp-tinymce.php
│   │   │       │   │   │   ├── tw-sack.js
│   │   │       │   │   │   ├── twemoji.js
│   │   │       │   │   │   ├── utils.js
│   │   │       │   │   │   ├── wp-a11y.js
│   │   │       │   │   │   ├── wp-ajax-response.js
│   │   │       │   │   │   ├── wp-auth-check.js
│   │   │       │   │   │   ├── wp-backbone.js
│   │   │       │   │   │   ├── wp-embed-template.js
│   │   │       │   │   │   ├── wp-embed.js
│   │   │       │   │   │   ├── wp-emoji-loader.js
│   │   │       │   │   │   ├── wp-emoji.js
│   │   │       │   │   │   ├── wp-list-revisions.js
│   │   │       │   │   │   ├── wp-lists.js
│   │   │       │   │   │   ├── wp-pointer.js
│   │   │       │   │   │   ├── wp-util.js
│   │   │       │   │   │   ├── wpdialog.js
│   │   │       │   │   │   ├── wplink.js
│   │   │       │   │   │   └── zxcvbn-async.js
│   │   │       │   │   ├── kses.php
│   │   │       │   │   ├── l10n.php
│   │   │       │   │   ├── link-template.php
│   │   │       │   │   ├── load.php
│   │   │       │   │   ├── locale.php
│   │   │       │   │   ├── media-template.php
│   │   │       │   │   ├── media.php
│   │   │       │   │   ├── meta.php
│   │   │       │   │   ├── ms-blogs.php
│   │   │       │   │   ├── ms-default-constants.php
│   │   │       │   │   ├── ms-default-filters.php
│   │   │       │   │   ├── ms-deprecated.php
│   │   │       │   │   ├── ms-files.php
│   │   │       │   │   ├── ms-functions.php
│   │   │       │   │   ├── ms-load.php
│   │   │       │   │   ├── ms-settings.php
│   │   │       │   │   ├── nav-menu-template.php
│   │   │       │   │   ├── nav-menu.php
│   │   │       │   │   ├── option.php
│   │   │       │   │   ├── pluggable-deprecated.php
│   │   │       │   │   ├── pluggable.php
│   │   │       │   │   ├── plugin.php
│   │   │       │   │   ├── pomo/
│   │   │       │   │   │   ├── entry.php
│   │   │       │   │   │   ├── mo.php
│   │   │       │   │   │   ├── po.php
│   │   │       │   │   │   ├── streams.php
│   │   │       │   │   │   └── translations.php
│   │   │       │   │   ├── post-formats.php
│   │   │       │   │   ├── post-template.php
│   │   │       │   │   ├── post-thumbnail-template.php
│   │   │       │   │   ├── post.php
│   │   │       │   │   ├── query.php
│   │   │       │   │   ├── random_compat/
│   │   │       │   │   │   ├── byte_safe_strings.php
│   │   │       │   │   │   ├── cast_to_int.php
│   │   │       │   │   │   ├── error_polyfill.php
│   │   │       │   │   │   ├── random.php
│   │   │       │   │   │   ├── random_bytes_com_dotnet.php
│   │   │       │   │   │   ├── random_bytes_dev_urandom.php
│   │   │       │   │   │   ├── random_bytes_libsodium.php
│   │   │       │   │   │   ├── random_bytes_mcrypt.php
│   │   │       │   │   │   ├── random_bytes_openssl.php
│   │   │       │   │   │   └── random_int.php
│   │   │       │   │   ├── registration-functions.php
│   │   │       │   │   ├── registration.php
│   │   │       │   │   ├── rest-api/
│   │   │       │   │   │   ├── class-wp-rest-request.php
│   │   │       │   │   │   ├── class-wp-rest-response.php
│   │   │       │   │   │   └── class-wp-rest-server.php
│   │   │       │   │   ├── rest-api.php
│   │   │       │   │   ├── revision.php
│   │   │       │   │   ├── rewrite.php
│   │   │       │   │   ├── rss-functions.php
│   │   │       │   │   ├── rss.php
│   │   │       │   │   ├── script-loader.php
│   │   │       │   │   ├── session.php
│   │   │       │   │   ├── shortcodes.php
│   │   │       │   │   ├── taxonomy.php
│   │   │       │   │   ├── template-loader.php
│   │   │       │   │   ├── template.php
│   │   │       │   │   ├── theme-compat/
│   │   │       │   │   │   ├── comments-popup.php
│   │   │       │   │   │   ├── comments.php
│   │   │       │   │   │   ├── footer.php
│   │   │       │   │   │   ├── header.php
│   │   │       │   │   │   └── sidebar.php
│   │   │       │   │   ├── theme.php
│   │   │       │   │   ├── update.php
│   │   │       │   │   ├── user.php
│   │   │       │   │   ├── vars.php
│   │   │       │   │   ├── version.php
│   │   │       │   │   ├── widgets/
│   │   │       │   │   │   ├── class-wp-nav-menu-widget.php
│   │   │       │   │   │   ├── class-wp-widget-archives.php
│   │   │       │   │   │   ├── class-wp-widget-calendar.php
│   │   │       │   │   │   ├── class-wp-widget-categories.php
│   │   │       │   │   │   ├── class-wp-widget-links.php
│   │   │       │   │   │   ├── class-wp-widget-meta.php
│   │   │       │   │   │   ├── class-wp-widget-pages.php
│   │   │       │   │   │   ├── class-wp-widget-recent-comments.php
│   │   │       │   │   │   ├── class-wp-widget-recent-posts.php
│   │   │       │   │   │   ├── class-wp-widget-rss.php
│   │   │       │   │   │   ├── class-wp-widget-search.php
│   │   │       │   │   │   ├── class-wp-widget-tag-cloud.php
│   │   │       │   │   │   └── class-wp-widget-text.php
│   │   │       │   │   ├── widgets.php
│   │   │       │   │   ├── wlwmanifest.xml
│   │   │       │   │   ├── wp-db.php
│   │   │       │   │   └── wp-diff.php
│   │   │       │   ├── wp-links-opml.php
│   │   │       │   ├── wp-load.php
│   │   │       │   ├── wp-login.php
│   │   │       │   ├── wp-mail.php
│   │   │       │   ├── wp-settings.php
│   │   │       │   ├── wp-signup.php
│   │   │       │   ├── wp-trackback.php
│   │   │       │   └── xmlrpc.php
│   │   │       ├── php.ini
│   │   │       ├── wparmor
│   │   │       └── zues/
│   │   │           ├── LICENSE
│   │   │           ├── archive.php
│   │   │           ├── assets/
│   │   │           │   └── js/
│   │   │           │       ├── customizer.js
│   │   │           │       └── scripts.js
│   │   │           ├── comments.php
│   │   │           ├── functions.php
│   │   │           ├── index.php
│   │   │           ├── page-templates/
│   │   │           │   └── full-width.php
│   │   │           ├── readme.txt
│   │   │           ├── rtl.css
│   │   │           ├── search.php
│   │   │           ├── singular.php
│   │   │           ├── style.css
│   │   │           ├── template-parts/
│   │   │           │   ├── footers/
│   │   │           │   │   └── footer-example.php
│   │   │           │   ├── headers/
│   │   │           │   │   └── header-example.php
│   │   │           │   └── sidebars/
│   │   │           │       └── sidebar.php
│   │   │           └── zues-framework/
│   │   │               ├── assets/
│   │   │               │   ├── css/
│   │   │               │   │   ├── base.css
│   │   │               │   │   ├── font-awesome.css
│   │   │               │   │   ├── grid.css
│   │   │               │   │   └── normalize.css
│   │   │               │   ├── fonts/
│   │   │               │   │   └── FontAwesome.otf
│   │   │               │   └── js/
│   │   │               │       ├── superfish.js
│   │   │               │       └── tinynav.js
│   │   │               ├── classes/
│   │   │               │   └── class-admin-notices.php
│   │   │               ├── functions/
│   │   │               │   ├── attr.php
│   │   │               │   ├── generate-css.php
│   │   │               │   ├── helpers.php
│   │   │               │   ├── template-tags.php
│   │   │               │   ├── templates.php
│   │   │               │   └── widget-areas.php
│   │   │               ├── init.php
│   │   │               ├── libraries/
│   │   │               │   ├── TGMPA/
│   │   │               │   │   └── class-tgm-plugin-activation.php
│   │   │               │   └── customizer/
│   │   │               │       ├── README.md
│   │   │               │       ├── custom-controls/
│   │   │               │       │   ├── content.php
│   │   │               │       │   └── textarea.php
│   │   │               │       ├── customizer-library.php
│   │   │               │       ├── extensions/
│   │   │               │       │   ├── fonts.php
│   │   │               │       │   ├── interface.php
│   │   │               │       │   ├── preview.php
│   │   │               │       │   ├── sanitization.php
│   │   │               │       │   ├── style-builder.php
│   │   │               │       │   └── utilities.php
│   │   │               │       └── js/
│   │   │               │           └── customizer.js
│   │   │               └── structure/
│   │   │                   ├── comments.php
│   │   │                   ├── filters.php
│   │   │                   ├── footer.php
│   │   │                   ├── general.php
│   │   │                   ├── header.php
│   │   │                   ├── hooks.php
│   │   │                   ├── page.php
│   │   │                   ├── post.php
│   │   │                   ├── primary-nav.php
│   │   │                   ├── sidebar.php
│   │   │                   ├── template-parts/
│   │   │                   │   ├── archive-header.php
│   │   │                   │   ├── comment.php
│   │   │                   │   ├── comments-nav.php
│   │   │                   │   ├── content-none.php
│   │   │                   │   ├── footer.php
│   │   │                   │   ├── head.php
│   │   │                   │   ├── header.php
│   │   │                   │   ├── primary-nav.php
│   │   │                   │   └── search-header.php
│   │   │                   └── wrapper.php
│   │   ├── capabilities/
│   │   │   └── README.md
│   │   ├── cgroups/
│   │   │   ├── README.md
│   │   │   └── cpu-stress/
│   │   │       ├── Dockerfile
│   │   │       └── docker-compose.yml
│   │   ├── networking/
│   │   │   └── README.md
│   │   ├── scanning/
│   │   │   └── README.md
│   │   ├── seccomp/
│   │   │   ├── README.md
│   │   │   └── seccomp-profiles/
│   │   │       ├── allow.json
│   │   │       ├── default-no-chmod.json
│   │   │       ├── default.json
│   │   │       └── deny.json
│   │   ├── secrets/
│   │   │   └── README.md
│   │   ├── secrets-ddc/
│   │   │   └── README.md
│   │   ├── swarm/
│   │   │   └── README.md
│   │   ├── trust/
│   │   │   └── README.md
│   │   ├── trust-basics/
│   │   │   └── README.md
│   │   └── userns/
│   │       └── README.md
│   └── swarm-mode/
│       ├── README.md
│       └── beginner-tutorial/
│           ├── README.md
│           ├── swarm-node-hyperv-setup.ps1
│           ├── swarm-node-hyperv-teardown.ps1
│           ├── swarm-node-vbox-setup.sh
│           └── swarm-node-vbox-teardown.sh
├── DockerCon/
│   ├── logging/
│   │   ├── getting-started.md
│   │   ├── log-drivers.md
│   │   └── setup.md
│   ├── monitoring/
│   │   ├── cadvisor.md
│   │   ├── monitoring-stack.md
│   │   └── stats.md
│   ├── readme.md
│   └── resources/
│       └── links.md
├── Kubernetes/
│   ├── README.md
│   ├── additional-ressources/
│   │   ├── README.md
│   │   └── kops-howto.md
│   ├── helm/
│   │   └── quickstart-helm.md
│   ├── jumpstart-downloadtools.md
│   ├── kickstart/
│   │   └── README.md
│   ├── minikube/
│   │   └── minikube-quickstart.md
│   └── third-party-coscale/
│       └── quickstart-coscale.md
├── LICENSE
├── README.md
├── _config.yml
├── contribute.md
└── istio-workshop/
    ├── .gitignore
    ├── 1_envoy/
    │   ├── 1_run_httpbin.sh
    │   ├── 2_curl_httpbin.sh
    │   ├── 3_envoyconfig.yaml
    │   ├── 3_run_envoy.sh
    │   ├── 4_run_envoy_retries.sh
    │   ├── 4_run_envoy_retries.yaml
    │   ├── 5_query_thru_envoy.sh
    │   ├── 6_fault_injection.sh
    │   └── 7_metrics.sh
    ├── 2_istio/
    │   ├── 1_crds.sh
    │   ├── 1_crds.yaml
    │   ├── 2_gen_install_yaml.sh
    │   ├── 3_install_istio.sh
    │   ├── 4_open_addons.sh
    │   ├── 99_remove.sh
    │   ├── charts_1.0.2/
    │   │   ├── Chart.yaml
    │   │   ├── README.md
    │   │   ├── charts/
    │   │   │   ├── certmanager/
    │   │   │   │   ├── Chart.yaml
    │   │   │   │   └── templates/
    │   │   │   │       ├── _helpers.tpl
    │   │   │   │       ├── crds.yaml
    │   │   │   │       ├── deployment.yaml
    │   │   │   │       ├── issuer.yaml
    │   │   │   │       ├── rbac.yaml
    │   │   │   │       └── serviceaccount.yaml
    │   │   │   ├── galley/
    │   │   │   │   ├── Chart.yaml
    │   │   │   │   └── templates/
    │   │   │   │       ├── _helpers.tpl
    │   │   │   │       ├── clusterrole.yaml
    │   │   │   │       ├── clusterrolebinding.yaml
    │   │   │   │       ├── configmap.yaml
    │   │   │   │       ├── deployment.yaml
    │   │   │   │       ├── service.yaml
    │   │   │   │       ├── serviceaccount.yaml
    │   │   │   │       └── validatingwehookconfiguration.yaml.tpl
    │   │   │   ├── gateways/
    │   │   │   │   ├── Chart.yaml
    │   │   │   │   └── templates/
    │   │   │   │       ├── autoscale.yaml
    │   │   │   │       ├── clusterrole.yaml
    │   │   │   │       ├── clusterrolebindings.yaml
    │   │   │   │       ├── deployment.yaml
    │   │   │   │       ├── service.yaml
    │   │   │   │       └── serviceaccount.yaml
    │   │   │   ├── grafana/
    │   │   │   │   ├── Chart.yaml
    │   │   │   │   └── templates/
    │   │   │   │       ├── _helpers.tpl
    │   │   │   │       ├── configmap.yaml
    │   │   │   │       ├── create-custom-resources-job.yaml
    │   │   │   │       ├── deployment.yaml
    │   │   │   │       ├── grafana-ports-mtls.yaml
    │   │   │   │       ├── pvc.yaml
    │   │   │   │       ├── secret.yaml
    │   │   │   │       └── service.yaml
    │   │   │   ├── ingress/
    │   │   │   │   ├── Chart.yaml
    │   │   │   │   └── templates/
    │   │   │   │       ├── autoscale.yaml
    │   │   │   │       ├── clusterrole.yaml
    │   │   │   │       ├── clusterrolebinding.yaml
    │   │   │   │       ├── deployment.yaml
    │   │   │   │       ├── service.yaml
    │   │   │   │       └── serviceaccount.yaml
    │   │   │   ├── kiali/
    │   │   │   │   ├── Chart.yaml
    │   │   │   │   └── templates/
    │   │   │   │       ├── clusterrole.yaml
    │   │   │   │       ├── clusterrolebinding.yaml
    │   │   │   │       ├── configmap.yaml
    │   │   │   │       ├── deployment.yaml
    │   │   │   │       ├── ingress.yaml
    │   │   │   │       ├── secrets.yaml
    │   │   │   │       ├── service.yaml
    │   │   │   │       └── serviceaccount.yaml
    │   │   │   ├── mixer/
    │   │   │   │   ├── Chart.yaml
    │   │   │   │   └── templates/
    │   │   │   │       ├── _helpers.tpl
    │   │   │   │       ├── autoscale.yaml
    │   │   │   │       ├── clusterrole.yaml
    │   │   │   │       ├── clusterrolebinding.yaml
    │   │   │   │       ├── config.yaml
    │   │   │   │       ├── configmap.yaml
    │   │   │   │       ├── deployment.yaml
    │   │   │   │       ├── service.yaml
    │   │   │   │       ├── serviceaccount.yaml
    │   │   │   │       └── statsdtoprom.yaml
    │   │   │   ├── pilot/
    │   │   │   │   ├── Chart.yaml
    │   │   │   │   └── templates/
    │   │   │   │       ├── autoscale.yaml
    │   │   │   │       ├── clusterrole.yaml
    │   │   │   │       ├── clusterrolebinding.yaml
    │   │   │   │       ├── deployment.yaml
    │   │   │   │       ├── gateway.yaml
    │   │   │   │       ├── meshexpansion.yaml
    │   │   │   │       ├── service.yaml
    │   │   │   │       └── serviceaccount.yaml
    │   │   │   ├── prometheus/
    │   │   │   │   ├── Chart.yaml
    │   │   │   │   └── templates/
    │   │   │   │       ├── _helpers.tpl
    │   │   │   │       ├── clusterrole.yaml
    │   │   │   │       ├── clusterrolebindings.yaml
    │   │   │   │       ├── configmap.yaml
    │   │   │   │       ├── deployment.yaml
    │   │   │   │       ├── service.yaml
    │   │   │   │       └── serviceaccount.yaml
    │   │   │   ├── security/
    │   │   │   │   ├── Chart.yaml
    │   │   │   │   └── templates/
    │   │   │   │       ├── _helpers.tpl
    │   │   │   │       ├── cleanup-secrets.yaml
    │   │   │   │       ├── clusterrole.yaml
    │   │   │   │       ├── clusterrolebinding.yaml
    │   │   │   │       ├── configmap.yaml
    │   │   │   │       ├── create-custom-resources-job.yaml
    │   │   │   │       ├── deployment.yaml
    │   │   │   │       ├── enable-mesh-mtls.yaml
    │   │   │   │       ├── meshexpansion.yaml
    │   │   │   │       ├── service.yaml
    │   │   │   │       └── serviceaccount.yaml
    │   │   │   ├── servicegraph/
    │   │   │   │   ├── Chart.yaml
    │   │   │   │   └── templates/
    │   │   │   │       ├── _helpers.tpl
    │   │   │   │       ├── deployment.yaml
    │   │   │   │       ├── ingress.yaml
    │   │   │   │       └── service.yaml
    │   │   │   ├── sidecarInjectorWebhook/
    │   │   │   │   ├── Chart.yaml
    │   │   │   │   └── templates/
    │   │   │   │       ├── _helpers.tpl
    │   │   │   │       ├── clusterrole.yaml
    │   │   │   │       ├── clusterrolebinding.yaml
    │   │   │   │       ├── deployment.yaml
    │   │   │   │       ├── mutatingwebhook.yaml
    │   │   │   │       ├── service.yaml
    │   │   │   │       └── serviceaccount.yaml
    │   │   │   ├── telemetry-gateway/
    │   │   │   │   ├── Chart.yaml
    │   │   │   │   └── templates/
    │   │   │   │       └── gateway.yaml
    │   │   │   └── tracing/
    │   │   │       ├── Chart.yaml
    │   │   │       └── templates/
    │   │   │           ├── _helpers.tpl
    │   │   │           ├── deployment.yaml
    │   │   │           ├── ingress-jaeger.yaml
    │   │   │           ├── ingress.yaml
    │   │   │           ├── service-jaeger.yaml
    │   │   │           └── service.yaml
    │   │   ├── requirements.yaml
    │   │   ├── templates/
    │   │   │   ├── _affinity.tpl
    │   │   │   ├── _helpers.tpl
    │   │   │   ├── configmap.yaml
    │   │   │   ├── crds.yaml
    │   │   │   ├── install-custom-resources.sh.tpl
    │   │   │   └── sidecar-injector-configmap.yaml
    │   │   ├── values-istio-auth-galley.yaml
    │   │   ├── values-istio-auth-multicluster.yaml
    │   │   ├── values-istio-auth.yaml
    │   │   ├── values-istio-demo-auth.yaml
    │   │   ├── values-istio-demo.yaml
    │   │   ├── values-istio-galley.yaml
    │   │   ├── values-istio-gateways.yaml
    │   │   ├── values-istio-multicluster.yaml
    │   │   ├── values-istio-one-namespace-auth.yaml
    │   │   ├── values-istio-one-namespace.yaml
    │   │   ├── values-istio.yaml
    │   │   └── values.yaml
    │   └── charts_1.0.4/
    │       ├── Chart.yaml
    │       ├── README.md
    │       ├── charts/
    │       │   ├── certmanager/
    │       │   │   ├── Chart.yaml
    │       │   │   └── templates/
    │       │   │       ├── _helpers.tpl
    │       │   │       ├── crds.yaml
    │       │   │       ├── deployment.yaml
    │       │   │       ├── issuer.yaml
    │       │   │       ├── rbac.yaml
    │       │   │       └── serviceaccount.yaml
    │       │   ├── galley/
    │       │   │   ├── Chart.yaml
    │       │   │   └── templates/
    │       │   │       ├── _helpers.tpl
    │       │   │       ├── clusterrole.yaml
    │       │   │       ├── clusterrolebinding.yaml
    │       │   │       ├── configmap.yaml
    │       │   │       ├── deployment.yaml
    │       │   │       ├── service.yaml
    │       │   │       ├── serviceaccount.yaml
    │       │   │       └── validatingwehookconfiguration.yaml.tpl
    │       │   ├── gateways/
    │       │   │   ├── Chart.yaml
    │       │   │   └── templates/
    │       │   │       ├── autoscale.yaml
    │       │   │       ├── clusterrole.yaml
    │       │   │       ├── clusterrolebindings.yaml
    │       │   │       ├── deployment.yaml
    │       │   │       ├── service.yaml
    │       │   │       └── serviceaccount.yaml
    │       │   ├── grafana/
    │       │   │   ├── Chart.yaml
    │       │   │   ├── dashboards/
    │       │   │   │   ├── galley-dashboard.json
    │       │   │   │   ├── istio-mesh-dashboard.json
    │       │   │   │   ├── istio-performance-dashboard.json
    │       │   │   │   ├── istio-service-dashboard.json
    │       │   │   │   ├── istio-workload-dashboard.json
    │       │   │   │   ├── mixer-dashboard.json
    │       │   │   │   └── pilot-dashboard.json
    │       │   │   ├── templates/
    │       │   │   │   ├── _helpers.tpl
    │       │   │   │   ├── configmap-custom-resources.yaml
    │       │   │   │   ├── configmap-dashboards.yaml
    │       │   │   │   ├── configmap.yaml
    │       │   │   │   ├── create-custom-resources-job.yaml
    │       │   │   │   ├── deployment.yaml
    │       │   │   │   ├── grafana-ports-mtls.yaml
    │       │   │   │   ├── pvc.yaml
    │       │   │   │   ├── secret.yaml
    │       │   │   │   └── service.yaml
    │       │   │   └── values.yaml
    │       │   ├── ingress/
    │       │   │   ├── Chart.yaml
    │       │   │   └── templates/
    │       │   │       ├── autoscale.yaml
    │       │   │       ├── clusterrole.yaml
    │       │   │       ├── clusterrolebinding.yaml
    │       │   │       ├── deployment.yaml
    │       │   │       ├── service.yaml
    │       │   │       └── serviceaccount.yaml
    │       │   ├── kiali/
    │       │   │   ├── Chart.yaml
    │       │   │   └── templates/
    │       │   │       ├── clusterrole.yaml
    │       │   │       ├── clusterrolebinding.yaml
    │       │   │       ├── configmap.yaml
    │       │   │       ├── deployment.yaml
    │       │   │       ├── ingress.yaml
    │       │   │       ├── secrets.yaml
    │       │   │       ├── service.yaml
    │       │   │       └── serviceaccount.yaml
    │       │   ├── mixer/
    │       │   │   ├── Chart.yaml
    │       │   │   └── templates/
    │       │   │       ├── _helpers.tpl
    │       │   │       ├── autoscale.yaml
    │       │   │       ├── clusterrole.yaml
    │       │   │       ├── clusterrolebinding.yaml
    │       │   │       ├── config.yaml
    │       │   │       ├── configmap.yaml
    │       │   │       ├── deployment.yaml
    │       │   │       ├── service.yaml
    │       │   │       └── serviceaccount.yaml
    │       │   ├── pilot/
    │       │   │   ├── Chart.yaml
    │       │   │   └── templates/
    │       │   │       ├── autoscale.yaml
    │       │   │       ├── clusterrole.yaml
    │       │   │       ├── clusterrolebinding.yaml
    │       │   │       ├── deployment.yaml
    │       │   │       ├── gateway.yaml
    │       │   │       ├── meshexpansion.yaml
    │       │   │       ├── service.yaml
    │       │   │       └── serviceaccount.yaml
    │       │   ├── prometheus/
    │       │   │   ├── Chart.yaml
    │       │   │   └── templates/
    │       │   │       ├── _helpers.tpl
    │       │   │       ├── clusterrole.yaml
    │       │   │       ├── clusterrolebindings.yaml
    │       │   │       ├── configmap.yaml
    │       │   │       ├── deployment.yaml
    │       │   │       ├── service.yaml
    │       │   │       └── serviceaccount.yaml
    │       │   ├── security/
    │       │   │   ├── Chart.yaml
    │       │   │   └── templates/
    │       │   │       ├── _helpers.tpl
    │       │   │       ├── cleanup-secrets.yaml
    │       │   │       ├── clusterrole.yaml
    │       │   │       ├── clusterrolebinding.yaml
    │       │   │       ├── configmap.yaml
    │       │   │       ├── create-custom-resources-job.yaml
    │       │   │       ├── deployment.yaml
    │       │   │       ├── enable-mesh-mtls.yaml
    │       │   │       ├── enable-mesh-permissive.yaml
    │       │   │       ├── meshexpansion.yaml
    │       │   │       ├── service.yaml
    │       │   │       └── serviceaccount.yaml
    │       │   ├── servicegraph/
    │       │   │   ├── Chart.yaml
    │       │   │   └── templates/
    │       │   │       ├── _helpers.tpl
    │       │   │       ├── deployment.yaml
    │       │   │       ├── ingress.yaml
    │       │   │       └── service.yaml
    │       │   ├── sidecarInjectorWebhook/
    │       │   │   ├── Chart.yaml
    │       │   │   └── templates/
    │       │   │       ├── _helpers.tpl
    │       │   │       ├── clusterrole.yaml
    │       │   │       ├── clusterrolebinding.yaml
    │       │   │       ├── deployment.yaml
    │       │   │       ├── mutatingwebhook.yaml
    │       │   │       ├── service.yaml
    │       │   │       └── serviceaccount.yaml
    │       │   ├── telemetry-gateway/
    │       │   │   ├── Chart.yaml
    │       │   │   └── templates/
    │       │   │       └── gateway.yaml
    │       │   └── tracing/
    │       │       ├── Chart.yaml
    │       │       └── templates/
    │       │           ├── _helpers.tpl
    │       │           ├── deployment.yaml
    │       │           ├── ingress-jaeger.yaml
    │       │           ├── ingress.yaml
    │       │           ├── service-jaeger.yaml
    │       │           └── service.yaml
    │       ├── requirements.yaml
    │       ├── templates/
    │       │   ├── _affinity.tpl
    │       │   ├── _helpers.tpl
    │       │   ├── configmap.yaml
    │       │   ├── crds.yaml
    │       │   ├── install-custom-resources.sh.tpl
    │       │   └── sidecar-injector-configmap.yaml
    │       ├── values-istio-auth-galley.yaml
    │       ├── values-istio-auth-multicluster.yaml
    │       ├── values-istio-auth.yaml
    │       ├── values-istio-demo-auth.yaml
    │       ├── values-istio-demo.yaml
    │       ├── values-istio-galley.yaml
    │       ├── values-istio-gateways.yaml
    │       ├── values-istio-multicluster.yaml
    │       ├── values-istio-one-namespace-auth.yaml
    │       ├── values-istio-one-namespace.yaml
    │       ├── values-istio.yaml
    │       └── values.yaml
    ├── 3_application/
    │   ├── 1_bookinfo-gateway.yaml
    │   ├── 1_bookinfo.yaml
    │   ├── 1_destination-rule-all-mtls.yaml
    │   ├── 1_install_bookinfo.sh
    │   └── 99_remove.sh
    ├── 4_traffic/
    │   ├── 0_generate_traffic.sh
    │   ├── 1_traffic_to_v1.sh
    │   ├── 1_virtual-service-all-v1.yaml
    │   ├── 2_jason_uses_v2.sh
    │   ├── 2_virtual-service-reviews-test-v2.yaml
    │   ├── 3_default_to_v3.sh
    │   ├── 3_virtual-service-reviews-jason-v2-v3.yaml
    │   └── 99_remove.sh
    ├── 5_chaos/
    │   ├── 1_fault-injection.sh
    │   ├── 1_virtual-service-ratings-test-delay.yaml
    │   ├── 2_gw.sh
    │   └── 3_proxy.sh
    ├── 6_webhook/
    │   ├── 1_istio-sidecar-injector.sh
    │   ├── 2_busybox-injected.sh
    │   ├── busybox-injected.yaml
    │   ├── busybox.yaml
    │   └── inject-config.yaml
    ├── 7_network_policies/
    │   ├── 1_setup.sh
    │   └── tcpdump.sh
    ├── 8_nodes/
    │   ├── iptables.sh
    │   └── proxy_init.sh
    ├── README.md
    ├── cleanup.sh
    └── slides.md
Download .txt
Showing preview only (891K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (9407 symbols across 765 files)

FILE: Docker/additional-ressources/developer-tools/java-debugging/app/src/main/java/com/docker/UserSignup/controller/UserController.java
  class UserController (line 18) | @Controller
    method signup (line 25) | @RequestMapping(value="/signup", method=RequestMethod.GET)
    method signup (line 32) | @RequestMapping(value="/signup", method=RequestMethod.POST)
    method login (line 46) | @RequestMapping(value="/login", method=RequestMethod.GET)
    method login (line 53) | @RequestMapping(value="/login", method=RequestMethod.POST)

FILE: Docker/additional-ressources/developer-tools/java-debugging/app/src/main/java/com/docker/UserSignup/model/User.java
  class User (line 19) | @Entity
    method getId (line 50) | public Long getId() {
    method setId (line 54) | public void setId(Long id) {
    method getUserName (line 58) | public String getUserName() {
    method setUserName (line 62) | public void setUserName(String userName) {
    method getFirstName (line 66) | public String getFirstName() {
    method setFirstName (line 70) | public void setFirstName(String firstName) {
    method getLastName (line 74) | public String getLastName() {
    method setLastName (line 78) | public void setLastName(String lastName) {
    method getPassword (line 82) | public String getPassword() {
    method setPassword (line 86) | public void setPassword(String password) {
    method getEmailAddress (line 90) | public String getEmailAddress() {
    method setEmailAddress (line 94) | public void setEmailAddress(String emailAddress) {
    method getDateOfBirth (line 98) | public Date getDateOfBirth() {
    method setDateOfBirth (line 102) | public void setDateOfBirth(Date dateOfBirth) {

FILE: Docker/additional-ressources/developer-tools/java-debugging/app/src/main/java/com/docker/UserSignup/model/UserLogin.java
  class UserLogin (line 7) | public class UserLogin {
    method getPassword (line 17) | public String getPassword() {
    method getUserName (line 21) | public String getUserName() {
    method setPassword (line 25) | public void setPassword(String password) {
    method setUserName (line 29) | public void setUserName(String userName) {

FILE: Docker/additional-ressources/developer-tools/java-debugging/app/src/main/java/com/docker/UserSignup/repository/UserRepository.java
  type UserRepository (line 10) | @Repository("userRepository")
    method findByUserName (line 13) | @Query("select s from User s where s.userName = :userName")

FILE: Docker/additional-ressources/developer-tools/java-debugging/app/src/main/java/com/docker/UserSignup/service/UserService.java
  type UserService (line 5) | public interface UserService {
    method save (line 6) | User save(User user);
    method findByLogin (line 7) | boolean findByLogin(String userName, String password);
    method findByUserName (line 8) | boolean findByUserName(String userName);

FILE: Docker/additional-ressources/developer-tools/java-debugging/app/src/main/java/com/docker/UserSignup/service/UserServiceImpl.java
  class UserServiceImpl (line 10) | @Service("userService")
    method save (line 16) | @Transactional
    method findByLogin (line 21) | public boolean findByLogin(String userName, String password) {
    method findByUserName (line 31) | public boolean findByUserName(String userName) {

FILE: Docker/additional-ressources/developer-tools/java-debugging/app/src/main/java/com/docker/UserSignup/util/Rot13.java
  class Rot13 (line 3) | public class Rot13 {
    method rot13 (line 5) | public static String rot13(String password) {

FILE: Docker/additional-ressources/developer-tools/java-debugging/app/src/main/webapp/bootstrap/js/bootstrap.js
  function transitionEnd (line 36) | function transitionEnd() {
  function removeElement (line 121) | function removeElement() {
  function clearMenus (line 767) | function clearMenus() {
  function getParent (line 778) | function getParent($this) {
  function complete (line 1339) | function complete() {
  function ScrollSpy (line 1607) | function ScrollSpy(element, options) {
  function next (line 1808) | function next() {

FILE: Docker/additional-ressources/developer-tools/java-debugging/app/src/main/webapp/jquery-1.8.3.js
  function createOptions (line 911) | function createOptions( options ) {
  function dataAttr (line 1801) | function dataAttr( elem, key, data ) {
  function isEmptyDataObject (line 1833) | function isEmptyDataObject( obj ) {
  function returnFalse (line 3274) | function returnFalse() {
  function returnTrue (line 3277) | function returnTrue() {
  function Sizzle (line 3880) | function Sizzle( selector, context, results, seed ) {
  function createInputPseudo (line 3949) | function createInputPseudo( type ) {
  function createButtonPseudo (line 3957) | function createButtonPseudo( type ) {
  function createPositionalPseudo (line 3965) | function createPositionalPseudo( fn ) {
  function siblingCheck (line 4560) | function siblingCheck( a, b, ret ) {
  function tokenize (line 4683) | function tokenize( selector, parseOnly ) {
  function addCombinator (line 4746) | function addCombinator( matcher, combinator, base ) {
  function elementMatcher (line 4798) | function elementMatcher( matchers ) {
  function condense (line 4812) | function condense( unmatched, map, filter, context, xml ) {
  function setMatcher (line 4833) | function setMatcher( preFilter, selector, matcher, postFilter, postFinde...
  function matcherFromTokens (line 4926) | function matcherFromTokens( tokens ) {
  function matcherFromGroupMatchers (line 4978) | function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
  function multipleContexts (line 5102) | function multipleContexts( selector, contexts, results ) {
  function select (line 5111) | function select( selector, context, results, seed, xml ) {
  function setFilters (line 5338) | function setFilters() {}
  function isDisconnected (line 5504) | function isDisconnected( node ) {
  function sibling (line 5508) | function sibling( cur, dir ) {
  function winnow (line 5616) | function winnow( elements, qualifier, keep ) {
  function createSafeFragment (line 5649) | function createSafeFragment( document ) {
  function findOrAppend (line 6033) | function findOrAppend( elem, tag ) {
  function cloneCopyEvent (line 6037) | function cloneCopyEvent( src, dest ) {
  function cloneFixAttributes (line 6065) | function cloneFixAttributes( src, dest ) {
  function getAll (line 6208) | function getAll( elem ) {
  function fixDefaultChecked (line 6221) | function fixDefaultChecked( elem ) {
  function jQuerySub (line 6517) | function jQuerySub( selector, context ) {
  function vendorPropName (line 6563) | function vendorPropName( style, name ) {
  function isHidden (line 6585) | function isHidden( elem, el ) {
  function showHide (line 6590) | function showHide( elements, show ) {
  function setPositiveNumber (line 6900) | function setPositiveNumber( elem, value, subtract ) {
  function augmentWidthOrHeight (line 6907) | function augmentWidthOrHeight( elem, name, extra, isBorderBox ) {
  function getWidthOrHeight (line 6949) | function getWidthOrHeight( elem, name, extra ) {
  function css_defaultDisplay (line 6992) | function css_defaultDisplay( nodeName ) {
  function buildParams (line 7246) | function buildParams( prefix, obj, traditional, add ) {
  function addToPrefiltersOrTransports (line 7335) | function addToPrefiltersOrTransports( structure ) {
  function inspectPrefiltersOrTransports (line 7369) | function inspectPrefiltersOrTransports( structure, options, originalOpti...
  function ajaxExtend (line 7411) | function ajaxExtend( target, src ) {
  function done (line 7722) | function done( status, nativeStatusText, responses, headers ) {
  function ajaxHandleResponses (line 8015) | function ajaxHandleResponses( s, jqXHR, responses ) {
  function ajaxConvert (line 8077) | function ajaxConvert( s, response ) {
  function createStandardXHR (line 8344) | function createStandardXHR() {
  function createActiveXHR (line 8350) | function createActiveXHR() {
  function createFxNow (line 8604) | function createFxNow() {
  function createTweens (line 8611) | function createTweens( animation, props ) {
  function Animation (line 8626) | function Animation( elem, properties, options ) {
  function propFilter (line 8724) | function propFilter( props, specialEasing ) {
  function defaultPrefilter (line 8791) | function defaultPrefilter( elem, props, opts ) {
  function Tween (line 8915) | function Tween( elem, options, prop, end, easing ) {
  function genFx (line 9099) | function genFx( type, includeWidth ) {
  function getWindow (line 9405) | function getWindow( elem ) {

FILE: Docker/additional-ressources/developer-tools/java-debugging/registration-database/docker-entrypoint-initdb.d/initialize_db.sql
  type `user` (line 3) | CREATE TABLE `user` (

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Core/Env.cs
  class Env (line 6) | public class Env
    method Get (line 12) | private static string Get(string variable)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.EndToEndTests/ProspectSignUp.feature.cs
  class ProspectSignUpFeature (line 18) | [System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "2....
    method FeatureSetup (line 29) | [Microsoft.VisualStudio.TestTools.UnitTesting.ClassInitializeAttribute()]
    method FeatureTearDown (line 38) | [Microsoft.VisualStudio.TestTools.UnitTesting.ClassCleanupAttribute()]
    method TestInitialize (line 45) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestInitializeAttribute()]
    method ScenarioTearDown (line 55) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestCleanupAttribute()]
    method ScenarioSetup (line 61) | public virtual void ScenarioSetup(TechTalk.SpecFlow.ScenarioInfo scena...
    method ScenarioCleanup (line 66) | public virtual void ScenarioCleanup()
    method SignUpWithValidDetails (line 71) | public virtual void SignUpWithValidDetails(string firstName, string la...
    method SignUpWithValidDetails_Variant0 (line 88) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant1 (line 104) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant2 (line 120) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant3 (line 136) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant4 (line 152) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant5 (line 168) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant6 (line 184) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant7 (line 200) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant8 (line 216) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant9 (line 232) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant10 (line 248) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant11 (line 264) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant12 (line 280) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant13 (line 296) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant14 (line 312) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant15 (line 328) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant16 (line 344) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant17 (line 360) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant18 (line 376) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant19 (line 392) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant20 (line 408) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant21 (line 424) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant22 (line 440) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant23 (line 456) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant24 (line 472) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant25 (line 488) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.EndToEndTests/ProspectSignUpSteps.cs
  class ProspectSignUpSteps (line 11) | [Binding]
    method Setup (line 16) | [BeforeFeature]
    method TearDown (line 22) | [AfterFeature]
    method GivenIBrowseToTheSignUpPageAt (line 29) | [Given(@"I browse to the Sign Up Page at ""(.*)""")]
    method GivenIEnterDetails (line 36) | [Given(@"I enter details '(.*)' '(.*)' '(.*)' '(.*)' '(.*)' '(.*)'")]
    method WhenIPressGo (line 49) | [When(@"I press Go")]
    method ThenIShouldSeeTheThankYouPage (line 56) | [Then(@"I should see the Thank You page")]

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Entities/Country.cs
  class Country (line 3) | public class Country

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Entities/Prospect.cs
  class Prospect (line 3) | public class Prospect

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Entities/Role.cs
  class Role (line 3) | public class Role

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.MessageHandlers.IndexProspect/Config.cs
  class Config (line 6) | public class Config
    method Get (line 12) | private static string Get(string variable)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.MessageHandlers.IndexProspect/Documents/Prospect.cs
  class Prospect (line 5) | public class Prospect

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.MessageHandlers.IndexProspect/Indexer/Index.cs
  class Index (line 7) | public class Index
    method Setup (line 9) | public static void Setup()
    method CreateDocument (line 17) | public static void CreateDocument(Prospect prospect)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.MessageHandlers.IndexProspect/Program.cs
  class Program (line 10) | class Program
    method Main (line 14) | static void Main(string[] args)
    method IndexProspect (line 32) | private static void IndexProspect(object sender, MsgHandlerEventArgs e)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.MessageHandlers.SaveProspect/Program.cs
  class Program (line 11) | class Program
    method Main (line 15) | static void Main(string[] args)
    method SaveProspect (line 30) | private static void SaveProspect(object sender, MsgHandlerEventArgs e)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Messaging/Config.cs
  class Config (line 6) | public class Config
    method Get (line 12) | private static string Get(string variable)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Messaging/MessageHelper.cs
  class MessageHelper (line 7) | public class MessageHelper
    method ToData (line 9) | public static byte[] ToData<TMessage>(TMessage message)
    method FromData (line 16) | public static TMessage FromData<TMessage>(byte[] data)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Messaging/MessageQueue.cs
  class MessageQueue (line 6) | public static class MessageQueue
    method Publish (line 9) | public static void Publish<TMessage>(TMessage message)
    method CreateConnection (line 19) | public static IConnection CreateConnection()

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Messaging/Messages/Events/ProspectSignedUpEvent.cs
  class ProspectSignedUpEvent (line 6) | public class ProspectSignedUpEvent : Message

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Messaging/Messages/Message.cs
  class Message (line 5) | public abstract class Message
    method Message (line 11) | public Message()

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Model.Tests/ProductLaunchContextTest.cs
  class ProductLaunchContextTest (line 7) | [TestClass]
    method Insert (line 10) | [TestMethod]

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Model/Initializers/StaticDataInitializer.cs
  class StaticDataInitializer (line 6) | public class StaticDataInitializer : CreateDatabaseIfNotExists<ProductLa...
    method Seed (line 8) | protected override void Seed(ProductLaunchContext context)
    method AddCountry (line 23) | private void AddCountry(ProductLaunchContext context, string code, str...
    method AddRole (line 32) | private void AddRole(ProductLaunchContext context, string code, string...

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Model/ProductLaunchContext.cs
  class ProductLaunchContext (line 6) | public class ProductLaunchContext : DbContext
    method ProductLaunchContext (line 8) | public ProductLaunchContext() : base("ProductLaunchDb") { }
    method OnModelCreating (line 16) | protected override void OnModelCreating(DbModelBuilder builder)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/About.aspx.cs
  class About (line 10) | public partial class About : Page
    method Page_Load (line 12) | protected void Page_Load(object sender, EventArgs e)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/About.aspx.designer.cs
  class About (line 14) | public partial class About

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/App_Start/BundleConfig.cs
  class BundleConfig (line 10) | public class BundleConfig
    method RegisterBundles (line 13) | public static void RegisterBundles(BundleCollection bundles)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/App_Start/RouteConfig.cs
  class RouteConfig (line 9) | public static class RouteConfig
    method RegisterRoutes (line 11) | public static void RegisterRoutes(RouteCollection routes)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Config.cs
  class Config (line 6) | public class Config
    method Get (line 12) | private static string Get(string variable)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Contact.aspx.cs
  class Contact (line 10) | public partial class Contact : Page
    method Page_Load (line 12) | protected void Page_Load(object sender, EventArgs e)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Contact.aspx.designer.cs
  class Contact (line 14) | public partial class Contact

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Default.aspx.cs
  class _Default (line 8) | public partial class _Default : Page
    method Page_Load (line 10) | protected void Page_Load(object sender, EventArgs e)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Default.aspx.designer.cs
  class _Default (line 14) | public partial class _Default

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Global.asax.cs
  class Global (line 11) | public class Global : HttpApplication
    method Application_Start (line 13) | void Application_Start(object sender, EventArgs e)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/DetailsView.js
  function DetailsView (line 2) | function DetailsView() {
  function DetailsView_createPropertyString (line 12) | function DetailsView_createPropertyString() {
  function DetailsView_setStateValue (line 15) | function DetailsView_setStateValue() {
  function DetailsView_OnCallback (line 18) | function DetailsView_OnCallback (result, context) {
  function DetailsView_getHiddenFieldContents (line 28) | function DetailsView_getHiddenFieldContents(arg) {
  function createPropertyStringFromValues_DetailsView (line 31) | function createPropertyStringFromValues_DetailsView(pageIndex, dataKeys) {

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/Focus.js
  function WebForm_FindFirstFocusableChild (line 2) | function WebForm_FindFirstFocusableChild(control) {
  function WebForm_AutoFocus (line 29) | function WebForm_AutoFocus(focusId) {
  function WebForm_CanFocus (line 55) | function WebForm_CanFocus(element) {
  function WebForm_IsFocusableTag (line 64) | function WebForm_IsFocusableTag(tagName) {
  function WebForm_IsInVisibleContainer (line 71) | function WebForm_IsInVisibleContainer(ctrl) {

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/GridView.js
  function GridView (line 2) | function GridView() {
  function GridView_createPropertyString (line 14) | function GridView_createPropertyString() {
  function GridView_setStateValue (line 17) | function GridView_setStateValue() {
  function GridView_OnCallback (line 20) | function GridView_OnCallback (result, context) {
  function GridView_getHiddenFieldContents (line 30) | function GridView_getHiddenFieldContents(arg) {
  function createPropertyStringFromValues_GridView (line 33) | function createPropertyStringFromValues_GridView(pageIndex, sortDirectio...

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/MSAjax/MicrosoftAjax.js
  function Sys$Enum$parse (line 6) | function Sys$Enum$parse(c,e){var a,b,i;if(e){a=this.__lowerCaseValues;if...
  function Sys$Enum$toString (line 6) | function Sys$Enum$toString(c){if(typeof c==="undefined"||c===null)return...
  function d (line 6) | function d(a){if(a<10)return "0"+a;return a.toString()}
  function m (line 6) | function m(a){if(a<10)return "00"+a;if(a<100)return "0"+a;return a.toStr...
  function v (line 6) | function v(a){if(a<10)return "000"+a;else if(a<100)return "00"+a;else if...
  function s (line 6) | function s(){if(h||p)return h;h=t.test(e);p=true;return h}
  function g (line 6) | function g(a,b){if(f)return f[b];switch(b){case 0:return a.getFullYear()...
  function g (line 6) | function g(a,c,d){for(var b=a.length;b<c;b++)a=d?"0"+a:a+"0";return a}
  function i (line 6) | function i(j,i,l,n,p){var h=l[0],k=1,o=Math.pow(10,i),m=Math.round(j*o)/...
  function Sys$Component$_setProperties (line 6) | function Sys$Component$_setProperties(a,i){var d,j=Object.getType(a),e=j...
  function Sys$Component$_setReferences (line 6) | function Sys$Component$_setReferences(c,b){for(var a in b){var e=c["set_...
  function b (line 6) | function b(){f.initialize()}
  function v (line 6) | function v(){if(f===null)return;f=null;h=new Sys.Net.WebServiceError(tru...
  function t (line 6) | function t(d,e){if(f!==null){window.clearTimeout(f);f=null}k.dispose();d...
  function x (line 6) | function x(d){if(d.get_responseAvailable()){var f=d.get_statusCode(),c=n...

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/MSAjax/MicrosoftAjaxComponentModel.js
  function Sys$Component$_setProperties (line 6) | function Sys$Component$_setProperties(a,i){var d,j=Object.getType(a),e=j...
  function Sys$Component$_setReferences (line 6) | function Sys$Component$_setReferences(c,b){for(var a in b){var e=c["set_...
  function b (line 6) | function b(){f.initialize()}

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/MSAjax/MicrosoftAjaxCore.js
  function Sys$Enum$parse (line 6) | function Sys$Enum$parse(c,e){var a,b,i;if(e){a=this.__lowerCaseValues;if...
  function Sys$Enum$toString (line 6) | function Sys$Enum$toString(c){if(typeof c==="undefined"||c===null)return...

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/MSAjax/MicrosoftAjaxGlobalization.js
  function d (line 6) | function d(a){if(a<10)return "0"+a;return a.toString()}
  function m (line 6) | function m(a){if(a<10)return "00"+a;if(a<100)return "0"+a;return a.toStr...
  function v (line 6) | function v(a){if(a<10)return "000"+a;else if(a<100)return "00"+a;else if...
  function s (line 6) | function s(){if(h||p)return h;h=t.test(e);p=true;return h}
  function g (line 6) | function g(a,b){if(f)return f[b];switch(b){case 0:return a.getFullYear()...
  function g (line 6) | function g(a,c,d){for(var b=a.length;b<c;b++)a=d?"0"+a:a+"0";return a}
  function i (line 6) | function i(j,i,l,n,p){var h=l[0],k=1,o=Math.pow(10,i),m=Math.round(j*o)/...

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/MSAjax/MicrosoftAjaxWebForms.js
  function i (line 6) | function i(b){b=b?b.toString():"";return m.test(b)&&b.indexOf("'"+a+"'")...
  function B (line 6) | function B(a){a.cancelBubble=true}

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/MSAjax/MicrosoftAjaxWebServices.js
  function v (line 6) | function v(){if(f===null)return;f=null;h=new Sys.Net.WebServiceError(tru...
  function t (line 6) | function t(d,e){if(f!==null){window.clearTimeout(f);f=null}k.dispose();d...
  function x (line 6) | function x(d){if(d.get_responseAvailable()){var f=d.get_statusCode(),c=n...

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/Menu.js
  function Menu_ClearInterval (line 6) | function Menu_ClearInterval() {
  function Menu_Collapse (line 11) | function Menu_Collapse(item) {
  function Menu_Expand (line 20) | function Menu_Expand(item, horizontalOffset, verticalOffset, hideScrolle...
  function Menu_FindMenu (line 52) | function Menu_FindMenu(item) {
  function Menu_FindNext (line 69) | function Menu_FindNext(item) {
  function Menu_FindParentContainer (line 95) | function Menu_FindParentContainer(item) {
  function Menu_FindParentItem (line 110) | function Menu_FindParentItem(item) {
  function Menu_FindPrevious (line 120) | function Menu_FindPrevious(item) {
  function Menu_FindSubMenu (line 140) | function Menu_FindSubMenu(item) {
  function Menu_Focus (line 147) | function Menu_Focus(item) {
  function Menu_GetData (line 168) | function Menu_GetData(item) {
  function Menu_HideItems (line 179) | function Menu_HideItems(items) {
  function Menu_HoverDisabled (line 240) | function Menu_HoverDisabled(item) {
  function Menu_HoverDynamic (line 252) | function Menu_HoverDynamic(item) {
  function Menu_HoverRoot (line 273) | function Menu_HoverRoot(item) {
  function Menu_HoverStatic (line 293) | function Menu_HoverStatic(item) {
  function Menu_IsHorizontal (line 300) | function Menu_IsHorizontal(item) {
  function Menu_IsSelectable (line 313) | function Menu_IsSelectable(link) {
  function Menu_Key (line 316) | function Menu_Key(item) {
  function Menu_ResetSiblings (line 439) | function Menu_ResetSiblings(item) {
  function Menu_ResetTopMenus (line 475) | function Menu_ResetTopMenus(table, doNotReset, level, up) {
  function Menu_RestoreInterval (line 516) | function Menu_RestoreInterval() {
  function Menu_SetRoot (line 522) | function Menu_SetRoot(item) {
  function Menu_Unhover (line 531) | function Menu_Unhover(item) {
  function PopOut_Clip (line 545) | function PopOut_Clip(element, y, height) {
  function PopOut_Down (line 551) | function PopOut_Down(scroller) {
  function PopOut_Hide (line 571) | function PopOut_Hide(panelId) {
  function PopOut_HideScrollers (line 592) | function PopOut_HideScrollers(panel) {
  function PopOut_Position (line 606) | function PopOut_Position(panel, hideScrollers) {
  function PopOut_Scroll (line 761) | function PopOut_Scroll(panel, offsetDelta) {
  function PopOut_SetPanelHeight (line 769) | function PopOut_SetPanelHeight(element, height, doNotClip) {
  function PopOut_Show (line 783) | function PopOut_Show(panelId, hideScrollers, data) {
  function PopOut_ShowScrollers (line 835) | function PopOut_ShowScrollers(panel) {
  function PopOut_Stop (line 876) | function PopOut_Stop() {
  function PopOut_Up (line 882) | function PopOut_Up(scroller) {

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/TreeView.js
  function TreeView_HoverNode (line 2) | function TreeView_HoverNode(data, node) {
  function TreeView_GetNodeText (line 17) | function TreeView_GetNodeText(node) {
  function TreeView_PopulateNode (line 31) | function TreeView_PopulateNode(data, index, node, selectNode, selectImag...
  function TreeView_ProcessNodeData (line 61) | function TreeView_ProcessNodeData(result, context) {
  function TreeView_SelectNode (line 139) | function TreeView_SelectNode(data, node, nodeId) {
  function TreeView_ToggleNode (line 159) | function TreeView_ToggleNode(data, index, node, lineType, children) {
  function TreeView_UnhoverNode (line 208) | function TreeView_UnhoverNode(node) {

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/WebForms.js
  function WebForm_PostBackOptions (line 2) | function WebForm_PostBackOptions(eventTarget, eventArgument, validation,...
  function WebForm_DoPostBackWithOptions (line 11) | function WebForm_DoPostBackWithOptions(options) {
  function WebForm_DoCallback (line 48) | function WebForm_DoCallback(eventTarget, eventArgument, eventCallback, c...
  function WebForm_CallbackComplete (line 176) | function WebForm_CallbackComplete() {
  function WebForm_ExecuteCallback (line 193) | function WebForm_ExecuteCallback(callbackObject) {
  function WebForm_FillFirstAvailableSlot (line 228) | function WebForm_FillFirstAvailableSlot(array, element) {
  function WebForm_InitCallback (line 240) | function WebForm_InitCallback() {
  function WebForm_InitCallbackAddField (line 268) | function WebForm_InitCallbackAddField(name, value) {
  function WebForm_EncodeCallback (line 275) | function WebForm_EncodeCallback(parameter) {
  function WebForm_ReEnableControls (line 284) | function WebForm_ReEnableControls() {
  function WebForm_ReDisableControls (line 305) | function WebForm_ReDisableControls() {
  function WebForm_SimulateClick (line 310) | function WebForm_SimulateClick(element, event) {
  function WebForm_FireDefaultButton (line 330) | function WebForm_FireDefaultButton(event, target) {
  function WebForm_GetScrollX (line 354) | function WebForm_GetScrollX() {
  function WebForm_GetScrollY (line 368) | function WebForm_GetScrollY() {
  function WebForm_SaveScrollPositionSubmit (line 382) | function WebForm_SaveScrollPositionSubmit() {
  function WebForm_SaveScrollPositionOnSubmit (line 396) | function WebForm_SaveScrollPositionOnSubmit() {
  function WebForm_RestoreScrollPosition (line 404) | function WebForm_RestoreScrollPosition() {
  function WebForm_TextBoxKeyHandler (line 416) | function WebForm_TextBoxKeyHandler(event) {
  function WebForm_TrimString (line 436) | function WebForm_TrimString(value) {
  function WebForm_AppendToClassName (line 439) | function WebForm_AppendToClassName(element, className) {
  function WebForm_RemoveClassName (line 447) | function WebForm_RemoveClassName(element, className) {
  function WebForm_GetElementById (line 456) | function WebForm_GetElementById(elementId) {
  function WebForm_GetElementByTagName (line 465) | function WebForm_GetElementByTagName(element, tagName) {
  function WebForm_GetElementsByTagName (line 472) | function WebForm_GetElementsByTagName(element, tagName) {
  function WebForm_GetElementDir (line 483) | function WebForm_GetElementDir(element) {
  function WebForm_GetElementPosition (line 492) | function WebForm_GetElementPosition(element) {
  function WebForm_GetParentByTagName (line 540) | function WebForm_GetParentByTagName(element, tagName) {
  function WebForm_SetElementHeight (line 548) | function WebForm_SetElementHeight(element, height) {
  function WebForm_SetElementWidth (line 553) | function WebForm_SetElementWidth(element, width) {
  function WebForm_SetElementX (line 558) | function WebForm_SetElementX(element, x) {
  function WebForm_SetElementY (line 563) | function WebForm_SetElementY(element, y) {

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/WebParts.js
  function Point (line 3) | function Point(x, y) {
  function __wpTranslateOffset (line 7) | function __wpTranslateOffset(x, y, offsetElement, relativeToElement, inc...
  function __wpGetPageEventLocation (line 24) | function __wpGetPageEventLocation(event, includeScroll) {
  function __wpClearSelection (line 30) | function __wpClearSelection() {
  function WebPart (line 33) | function WebPart(webPartElement, webPartTitleElement, zone, zoneIndex, a...
  function WebPart_Dispose (line 51) | function WebPart_Dispose() {
  function WebPart_OnMouseDown (line 54) | function WebPart_OnMouseDown() {
  function WebPart_OnDragStart (line 72) | function WebPart_OnDragStart() {
  function WebPart_OnDrag (line 83) | function WebPart_OnDrag() {
  function WebPart_OnDragEnd (line 86) | function WebPart_OnDragEnd() {
  function WebPart_GetParentWebPartElement (line 89) | function WebPart_GetParentWebPartElement(containedElement) {
  function WebPart_UpdatePosition (line 99) | function WebPart_UpdatePosition() {
  function Zone (line 104) | function Zone(zoneElement, zoneIndex, uniqueID, isVertical, allowLayoutC...
  function Zone_Dispose (line 152) | function Zone_Dispose() {
  function Zone_OnDragEnter (line 158) | function Zone_OnDragEnter() {
  function Zone_OnDragOver (line 166) | function Zone_OnDragOver() {
  function Zone_OnDrop (line 174) | function Zone_OnDrop() {
  function Zone_GetParentZoneElement (line 182) | function Zone_GetParentZoneElement(containedElement) {
  function Zone_AddWebPart (line 192) | function Zone_AddWebPart(webPartElement, webPartTitleElement, allowZoneC...
  function Zone_ToggleDropCues (line 204) | function Zone_ToggleDropCues(show, index, ignoreOutline) {
  function Zone_GetWebPartIndex (line 231) | function Zone_GetWebPartIndex(location) {
  function Zone_UpdatePosition (line 256) | function Zone_UpdatePosition() {
  function WebPartDragState (line 266) | function WebPartDragState(webPartElement, effect) {
  function WebPartMenu (line 273) | function WebPartMenu(menuLabelElement, menuDropDownElement, menuElement) {
  function WebPartMenu_Dispose (line 302) | function WebPartMenu_Dispose() {
  function WebPartMenu_Show (line 307) | function WebPartMenu_Show() {
  function WebPartMenu_Hide (line 341) | function WebPartMenu_Hide() {
  function WebPartMenu_Hover (line 350) | function WebPartMenu_Hover() {
  function WebPartMenu_Unhover (line 358) | function WebPartMenu_Unhover() {
  function WebPartMenu_OnClick (line 367) | function WebPartMenu_OnClick() {
  function WebPartMenu_OnKeyPress (line 375) | function WebPartMenu_OnKeyPress() {
  function WebPartMenu_OnMouseEnter (line 385) | function WebPartMenu_OnMouseEnter() {
  function WebPartMenu_OnMouseLeave (line 391) | function WebPartMenu_OnMouseLeave() {
  function WebPartManager (line 397) | function WebPartManager() {
  function WebPartManager_Dispose (line 419) | function WebPartManager_Dispose() {
  function WebPartManager_AddZone (line 425) | function WebPartManager_AddZone(zoneElement, uniqueID, isVertical, allow...
  function WebPartManager_IsDragDropEnabled (line 431) | function WebPartManager_IsDragDropEnabled() {
  function WebPartManager_DragDrop (line 434) | function WebPartManager_DragDrop() {
  function WebPartManager_InitiateWebPartDragDrop (line 442) | function WebPartManager_InitiateWebPartDragDrop(webPartElement) {
  function WebPartManager_CompleteWebPartDragDrop (line 468) | function WebPartManager_CompleteWebPartDragDrop() {
  function WebPartManager_ContinueWebPartDragDrop (line 492) | function WebPartManager_ContinueWebPartDragDrop() {
  function WebPartManager_Execute (line 501) | function WebPartManager_Execute(script) {
  function WebPartManager_ProcessWebPartDragEnter (line 508) | function WebPartManager_ProcessWebPartDragEnter() {
  function WebPartManager_ProcessWebPartDragOver (line 550) | function WebPartManager_ProcessWebPartDragOver() {
  function WebPartManager_ProcessWebPartDrop (line 594) | function WebPartManager_ProcessWebPartDrop() {
  function WebPartManager_ShowHelp (line 609) | function WebPartManager_ShowHelp(helpUrl, helpMode) {
  function WebPartManager_ExportWebPart (line 626) | function WebPartManager_ExportWebPart(exportUrl, warn, confirmOnly) {
  function WebPartManager_UpdatePositions (line 637) | function WebPartManager_UpdatePositions() {
  function WebPartManager_SubmitPage (line 642) | function WebPartManager_SubmitPage(eventTarget, eventArgument) {

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/WebUIValidation.js
  function ValidatorUpdateDisplay (line 7) | function ValidatorUpdateDisplay(val) {
  function ValidatorUpdateIsValid (line 23) | function ValidatorUpdateIsValid() {
  function AllValidatorsValid (line 26) | function AllValidatorsValid(validators) {
  function ValidatorHookupControlID (line 37) | function ValidatorHookupControlID(controlID, val) {
  function ValidatorHookupControl (line 50) | function ValidatorHookupControl(control, val) {
  function ValidatorHookupEvent (line 82) | function ValidatorHookupEvent(control, eventType, functionPrefix) {
  function ValidatorGetValue (line 93) | function ValidatorGetValue(id) {
  function ValidatorGetValueRecursive (line 101) | function ValidatorGetValueRecursive(control)
  function Page_ClientValidate (line 113) | function Page_ClientValidate(validationGroup) {
  function ValidatorCommonOnSubmit (line 127) | function ValidatorCommonOnSubmit() {
  function ValidatorEnable (line 136) | function ValidatorEnable(val, enable) {
  function ValidatorOnChange (line 141) | function ValidatorOnChange(event) {
  function ValidatedTextBoxOnKeyPress (line 168) | function ValidatedTextBoxOnKeyPress(event) {
  function ValidatedControlOnBlur (line 183) | function ValidatedControlOnBlur(event) {
  function ValidatorValidate (line 197) | function ValidatorValidate(val, validationGroup, event) {
  function ValidatorSetFocus (line 210) | function ValidatorSetFocus(val, event) {
  function IsInVisibleContainer (line 251) | function IsInVisibleContainer(ctrl) {
  function IsValidationGroupMatch (line 266) | function IsValidationGroupMatch(control, validationGroup) {
  function ValidatorOnLoad (line 276) | function ValidatorOnLoad() {
  function ValidatorConvert (line 308) | function ValidatorConvert(op, dataType, val) {
  function ValidatorCompare (line 395) | function ValidatorCompare(operand1, operand2, operator, val) {
  function CompareValidatorEvaluateIsValid (line 419) | function CompareValidatorEvaluateIsValid(val) {
  function CustomValidatorEvaluateIsValid (line 440) | function CustomValidatorEvaluateIsValid(val) {
  function RegularExpressionValidatorEvaluateIsValid (line 455) | function RegularExpressionValidatorEvaluateIsValid(val) {
  function ValidatorTrim (line 463) | function ValidatorTrim(s) {
  function RequiredFieldValidatorEvaluateIsValid (line 467) | function RequiredFieldValidatorEvaluateIsValid(val) {
  function RangeValidatorEvaluateIsValid (line 470) | function RangeValidatorEvaluateIsValid(val) {
  function ValidationSummaryOnSubmit (line 477) | function ValidationSummaryOnSubmit(validationGroup) {
  function getAttributesWithPrefix (line 569) | function getAttributesWithPrefix(element, prefix) {
  function normalizeKey (line 585) | function normalizeKey(key) {
  function addValidationExpando (line 589) | function addValidationExpando(element) {
  function dispose (line 595) | function dispose(element) {
  function addNormalizedAttribute (line 601) | function addNormalizedAttribute(name, normalizedName) {
  function parseSpecificAttribute (line 604) | function parseSpecificAttribute(selector, attribute, validatorsArray) {
  function parse (line 613) | function parse(selector) {
  function loadValidators (line 618) | function loadValidators() {
  function registerUpdatePanel (line 628) | function registerUpdatePanel() {

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/bootstrap.js
  function transitionEnd (line 48) | function transitionEnd() {
  function removeElement (line 133) | function removeElement() {
  function clearMenus (line 779) | function clearMenus() {
  function getParent (line 790) | function getParent($this) {
  function complete (line 1351) | function complete() {
  function ScrollSpy (line 1619) | function ScrollSpy(element, options) {
  function next (line 1820) | function next() {

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/jquery-1.10.2.js
  function isArraylike (line 997) | function isArraylike( obj ) {
  function Sizzle (line 1197) | function Sizzle( selector, context, results, seed ) {
  function createCache (line 1312) | function createCache() {
  function markFunction (line 1330) | function markFunction( fn ) {
  function assert (line 1339) | function assert( fn ) {
  function addHandle (line 1361) | function addHandle( attrs, handler ) {
  function siblingCheck (line 1376) | function siblingCheck( a, b ) {
  function createInputPseudo (line 1403) | function createInputPseudo( type ) {
  function createButtonPseudo (line 1414) | function createButtonPseudo( type ) {
  function createPositionalPseudo (line 1425) | function createPositionalPseudo( fn ) {
  function setFilters (line 2408) | function setFilters() {}
  function tokenize (line 2412) | function tokenize( selector, parseOnly ) {
  function toSelector (line 2479) | function toSelector( tokens ) {
  function addCombinator (line 2489) | function addCombinator( matcher, combinator, base ) {
  function elementMatcher (line 2539) | function elementMatcher( matchers ) {
  function condense (line 2553) | function condense( unmatched, map, filter, context, xml ) {
  function setMatcher (line 2574) | function setMatcher( preFilter, selector, matcher, postFilter, postFinde...
  function matcherFromTokens (line 2667) | function matcherFromTokens( tokens ) {
  function matcherFromGroupMatchers (line 2722) | function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
  function multipleContexts (line 2850) | function multipleContexts( selector, contexts, results ) {
  function select (line 2859) | function select( selector, context, results, seed ) {
  function createOptions (line 2999) | function createOptions( options ) {
  function internalData (line 3582) | function internalData( elem, name, data, pvt /* Internal Use Only */ ){
  function internalRemoveData (line 3671) | function internalRemoveData( elem, name, pvt ) {
  function dataAttr (line 3868) | function dataAttr( elem, key, data ) {
  function isEmptyDataObject (line 3900) | function isEmptyDataObject( obj ) {
  function returnTrue (line 4726) | function returnTrue() {
  function returnFalse (line 4730) | function returnFalse() {
  function safeActiveElement (line 4734) | function safeActiveElement() {
  function sibling (line 5852) | function sibling( cur, dir ) {
  function winnow (line 5970) | function winnow( elements, qualifier, not ) {
  function createSafeFragment (line 5998) | function createSafeFragment( document ) {
  function manipulationTarget (line 6312) | function manipulationTarget( elem, content ) {
  function disableScript (line 6322) | function disableScript( elem ) {
  function restoreScript (line 6326) | function restoreScript( elem ) {
  function setGlobalEval (line 6337) | function setGlobalEval( elems, refElements ) {
  function cloneCopyEvent (line 6345) | function cloneCopyEvent( src, dest ) {
  function fixCloneNodeIssues (line 6373) | function fixCloneNodeIssues( src, dest ) {
  function getAll (line 6466) | function getAll( context, tag ) {
  function fixDefaultChecked (line 6489) | function fixDefaultChecked( elem ) {
  function vendorPropName (line 6831) | function vendorPropName( style, name ) {
  function isHidden (line 6853) | function isHidden( elem, el ) {
  function showHide (line 6860) | function showHide( elements, show ) {
  function setPositiveNumber (line 7189) | function setPositiveNumber( elem, value, subtract ) {
  function augmentWidthOrHeight (line 7197) | function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
  function getWidthOrHeight (line 7236) | function getWidthOrHeight( elem, name, extra ) {
  function css_defaultDisplay (line 7280) | function css_defaultDisplay( nodeName ) {
  function actualDisplay (line 7312) | function actualDisplay( name, doc ) {
  function buildParams (line 7541) | function buildParams( prefix, obj, traditional, add ) {
  function addToPrefiltersOrTransports (line 7656) | function addToPrefiltersOrTransports( structure ) {
  function inspectPrefiltersOrTransports (line 7688) | function inspectPrefiltersOrTransports( structure, options, originalOpti...
  function ajaxExtend (line 7715) | function ajaxExtend( target, src ) {
  function done (line 8163) | function done( status, nativeStatusText, responses, headers ) {
  function ajaxHandleResponses (line 8310) | function ajaxHandleResponses( s, jqXHR, responses ) {
  function ajaxConvert (line 8365) | function ajaxConvert( s, response, jqXHR, isSuccess ) {
  function createStandardXHR (line 8633) | function createStandardXHR() {
  function createActiveXHR (line 8639) | function createActiveXHR() {
  function createFxNow (line 8885) | function createFxNow() {
  function createTween (line 8892) | function createTween( value, prop, animation ) {
  function Animation (line 8906) | function Animation( elem, properties, options ) {
  function propFilter (line 9010) | function propFilter( props, specialEasing ) {
  function defaultPrefilter (line 9077) | function defaultPrefilter( elem, props, opts ) {
  function Tween (line 9202) | function Tween( elem, options, prop, end, easing ) {
  function genFx (line 9426) | function genFx( type, includeWidth ) {
  function getWindow (line 9722) | function getWindow( elem ) {

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/modernizr-2.6.2.js
  function isEventSupported (line 216) | function isEventSupported( eventName, element ) {
  function setCss (line 312) | function setCss( str ) {
  function setCssAll (line 319) | function setCssAll( str1, str2 ) {
  function is (line 326) | function is( obj, type ) {
  function contains (line 333) | function contains( str, substr ) {
  function testProps (line 357) | function testProps( props, prefixed ) {
  function testDOMProps (line 373) | function testDOMProps( props, obj, elem ) {
  function testPropsAll (line 401) | function testPropsAll( prop, prefixed, elem ) {
  function webforms (line 872) | function webforms() {
  function addStyleSheet (line 1090) | function addStyleSheet(ownerDocument, cssText) {
  function getElements (line 1103) | function getElements() {
  function getExpandoData (line 1114) | function getExpandoData(ownerDocument) {
  function createElement (line 1132) | function createElement(nodeName, ownerDocument, data){
  function createDocumentFragment (line 1168) | function createDocumentFragment(ownerDocument, data){
  function shivMethods (line 1192) | function shivMethods(ownerDocument, data) {
  function shivDocument (line 1230) | function shivDocument(ownerDocument) {

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/respond.js
  function callMedia (line 331) | function callMedia(){

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/SignUp.aspx.cs
  class SignUp (line 11) | public partial class SignUp : Page
    method PreloadStaticDataCache (line 16) | public static void PreloadStaticDataCache()
    method Page_Load (line 33) | protected void Page_Load(object sender, EventArgs e)
    method PopulateRoles (line 42) | private void PopulateRoles()
    method PopulateCountries (line 48) | private void PopulateCountries()
    method btnGo_Click (line 54) | protected void btnGo_Click(object sender, EventArgs e)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/SignUp.aspx.designer.cs
  class SignUp (line 13) | public partial class SignUp {

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Site.Master.cs
  class SiteMaster (line 10) | public partial class SiteMaster : MasterPage
    method Page_Load (line 12) | protected void Page_Load(object sender, EventArgs e)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Site.Master.designer.cs
  class SiteMaster (line 13) | public partial class SiteMaster {

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Site.Mobile.Master.cs
  class Site_Mobile (line 10) | public partial class Site_Mobile : System.Web.UI.MasterPage
    method Page_Load (line 12) | protected void Page_Load(object sender, EventArgs e)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Site.Mobile.Master.designer.cs
  class Site_Mobile (line 13) | public partial class Site_Mobile {

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/ThankYou.aspx.cs
  class ThankYou (line 10) | public partial class ThankYou : System.Web.UI.Page
    method Page_Load (line 12) | protected void Page_Load(object sender, EventArgs e)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/ThankYou.aspx.designer.cs
  class ThankYou (line 13) | public partial class ThankYou {

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/ViewSwitcher.ascx.cs
  class ViewSwitcher (line 12) | public partial class ViewSwitcher : System.Web.UI.UserControl
    method Page_Load (line 20) | protected void Page_Load(object sender, EventArgs e)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/ViewSwitcher.ascx.designer.cs
  class ViewSwitcher (line 13) | public partial class ViewSwitcher {

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Core/Env.cs
  class Env (line 6) | public class Env
    method Get (line 12) | private static string Get(string variable)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.EndToEndTests/ProspectSignUp.feature.cs
  class ProspectSignUpFeature (line 18) | [System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "2....
    method FeatureSetup (line 29) | [Microsoft.VisualStudio.TestTools.UnitTesting.ClassInitializeAttribute()]
    method FeatureTearDown (line 38) | [Microsoft.VisualStudio.TestTools.UnitTesting.ClassCleanupAttribute()]
    method TestInitialize (line 45) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestInitializeAttribute()]
    method ScenarioTearDown (line 55) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestCleanupAttribute()]
    method ScenarioSetup (line 61) | public virtual void ScenarioSetup(TechTalk.SpecFlow.ScenarioInfo scena...
    method ScenarioCleanup (line 66) | public virtual void ScenarioCleanup()
    method SignUpWithValidDetails (line 71) | public virtual void SignUpWithValidDetails(string firstName, string la...
    method SignUpWithValidDetails_Variant0 (line 88) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant1 (line 104) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant2 (line 120) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant3 (line 136) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant4 (line 152) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant5 (line 168) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant6 (line 184) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant7 (line 200) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant8 (line 216) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant9 (line 232) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant10 (line 248) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant11 (line 264) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant12 (line 280) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant13 (line 296) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant14 (line 312) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant15 (line 328) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant16 (line 344) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant17 (line 360) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant18 (line 376) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant19 (line 392) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant20 (line 408) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant21 (line 424) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant22 (line 440) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant23 (line 456) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant24 (line 472) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant25 (line 488) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.EndToEndTests/ProspectSignUpSteps.cs
  class ProspectSignUpSteps (line 11) | [Binding]
    method Setup (line 16) | [BeforeFeature]
    method TearDown (line 22) | [AfterFeature]
    method GivenIBrowseToTheSignUpPageAt (line 29) | [Given(@"I browse to the Sign Up Page at ""(.*)""")]
    method GivenIEnterDetails (line 36) | [Given(@"I enter details '(.*)' '(.*)' '(.*)' '(.*)' '(.*)' '(.*)'")]
    method WhenIPressGo (line 49) | [When(@"I press Go")]
    method ThenIShouldSeeTheThankYouPage (line 56) | [Then(@"I should see the Thank You page")]

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Entities/Country.cs
  class Country (line 3) | public class Country

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Entities/Prospect.cs
  class Prospect (line 3) | public class Prospect

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Entities/Role.cs
  class Role (line 3) | public class Role

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.MessageHandlers.IndexProspect/Config.cs
  class Config (line 6) | public class Config
    method Get (line 12) | private static string Get(string variable)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.MessageHandlers.IndexProspect/Documents/Prospect.cs
  class Prospect (line 5) | public class Prospect

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.MessageHandlers.IndexProspect/Indexer/Index.cs
  class Index (line 7) | public class Index
    method Setup (line 9) | public static void Setup()
    method CreateDocument (line 17) | public static void CreateDocument(Prospect prospect)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.MessageHandlers.IndexProspect/Program.cs
  class Program (line 10) | class Program
    method Main (line 14) | static void Main(string[] args)
    method IndexProspect (line 32) | private static void IndexProspect(object sender, MsgHandlerEventArgs e)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.MessageHandlers.SaveProspect/Program.cs
  class Program (line 11) | class Program
    method Main (line 15) | static void Main(string[] args)
    method SaveProspect (line 30) | private static void SaveProspect(object sender, MsgHandlerEventArgs e)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Messaging/Config.cs
  class Config (line 6) | public class Config
    method Get (line 12) | private static string Get(string variable)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Messaging/MessageHelper.cs
  class MessageHelper (line 7) | public class MessageHelper
    method ToData (line 9) | public static byte[] ToData<TMessage>(TMessage message)
    method FromData (line 16) | public static TMessage FromData<TMessage>(byte[] data)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Messaging/MessageQueue.cs
  class MessageQueue (line 6) | public static class MessageQueue
    method Publish (line 9) | public static void Publish<TMessage>(TMessage message)
    method CreateConnection (line 19) | public static IConnection CreateConnection()

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Messaging/Messages/Events/ProspectSignedUpEvent.cs
  class ProspectSignedUpEvent (line 6) | public class ProspectSignedUpEvent : Message

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Messaging/Messages/Message.cs
  class Message (line 5) | public abstract class Message
    method Message (line 11) | public Message()

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Model.Tests/ProductLaunchContextTest.cs
  class ProductLaunchContextTest (line 7) | [TestClass]
    method Insert (line 10) | [TestMethod]

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Model/Config.cs
  class Config (line 6) | public class Config
    method Get (line 12) | private static string Get(string variable)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Model/Initializers/StaticDataInitializer.cs
  class StaticDataInitializer (line 6) | public class StaticDataInitializer : CreateDatabaseIfNotExists<ProductLa...
    method Seed (line 8) | protected override void Seed(ProductLaunchContext context)
    method AddCountry (line 23) | private void AddCountry(ProductLaunchContext context, string code, str...
    method AddRole (line 32) | private void AddRole(ProductLaunchContext context, string code, string...

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Model/ProductLaunchContext.cs
  class ProductLaunchContext (line 6) | public class ProductLaunchContext : DbContext
    method ProductLaunchContext (line 8) | public ProductLaunchContext() : base(Config.DbConnectionString) { }
    method OnModelCreating (line 16) | protected override void OnModelCreating(DbModelBuilder builder)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Web/About.aspx.cs
  class About (line 10) | public partial class About : Page
    method Page_Load (line 12) | protected void Page_Load(object sender, EventArgs e)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Web/About.aspx.designer.cs
  class About (line 14) | public partial class About

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Web/App_Start/BundleConfig.cs
  class BundleConfig (line 10) | public class BundleConfig
    method RegisterBundles (line 13) | public static void RegisterBundles(BundleCollection bundles)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Web/App_Start/RouteConfig.cs
  class RouteConfig (line 9) | public static class RouteConfig
    method RegisterRoutes (line 11) | public static void RegisterRoutes(RouteCollection routes)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Web/Contact.aspx.cs
  class Contact (line 10) | public partial class Contact : Page
    method Page_Load (line 12) | protected void Page_Load(object sender, EventArgs e)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Web/Contact.aspx.designer.cs
  class Contact (line 14) | public partial class Contact

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Web/Default.aspx.cs
  class _Default (line 8) | public partial class _Default : Page
    method Page_Load (line 10) | protected void Page_Load(object sender, EventArgs e)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Web/Default.aspx.designer.cs
  class _Default (line 14) | public partial class _Default

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Web/Global.asax.cs
  class Global (line 11) | public class Global : HttpApplication
    method Application_Start (line 13) | void Application_Start(object sender, EventArgs e)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/DetailsView.js
  function DetailsView (line 2) | function DetailsView() {
  function DetailsView_createPropertyString (line 12) | function DetailsView_createPropertyString() {
  function DetailsView_setStateValue (line 15) | function DetailsView_setStateValue() {
  function DetailsView_OnCallback (line 18) | function DetailsView_OnCallback (result, context) {
  function DetailsView_getHiddenFieldContents (line 28) | function DetailsView_getHiddenFieldContents(arg) {
  function createPropertyStringFromValues_DetailsView (line 31) | function createPropertyStringFromValues_DetailsView(pageIndex, dataKeys) {

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/Focus.js
  function WebForm_FindFirstFocusableChild (line 2) | function WebForm_FindFirstFocusableChild(control) {
  function WebForm_AutoFocus (line 29) | function WebForm_AutoFocus(focusId) {
  function WebForm_CanFocus (line 55) | function WebForm_CanFocus(element) {
  function WebForm_IsFocusableTag (line 64) | function WebForm_IsFocusableTag(tagName) {
  function WebForm_IsInVisibleContainer (line 71) | function WebForm_IsInVisibleContainer(ctrl) {

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/GridView.js
  function GridView (line 2) | function GridView() {
  function GridView_createPropertyString (line 14) | function GridView_createPropertyString() {
  function GridView_setStateValue (line 17) | function GridView_setStateValue() {
  function GridView_OnCallback (line 20) | function GridView_OnCallback (result, context) {
  function GridView_getHiddenFieldContents (line 30) | function GridView_getHiddenFieldContents(arg) {
  function createPropertyStringFromValues_GridView (line 33) | function createPropertyStringFromValues_GridView(pageIndex, sortDirectio...

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/MSAjax/MicrosoftAjax.js
  function Sys$Enum$parse (line 6) | function Sys$Enum$parse(c,e){var a,b,i;if(e){a=this.__lowerCaseValues;if...
  function Sys$Enum$toString (line 6) | function Sys$Enum$toString(c){if(typeof c==="undefined"||c===null)return...
  function d (line 6) | function d(a){if(a<10)return "0"+a;return a.toString()}
  function m (line 6) | function m(a){if(a<10)return "00"+a;if(a<100)return "0"+a;return a.toStr...
  function v (line 6) | function v(a){if(a<10)return "000"+a;else if(a<100)return "00"+a;else if...
  function s (line 6) | function s(){if(h||p)return h;h=t.test(e);p=true;return h}
  function g (line 6) | function g(a,b){if(f)return f[b];switch(b){case 0:return a.getFullYear()...
  function g (line 6) | function g(a,c,d){for(var b=a.length;b<c;b++)a=d?"0"+a:a+"0";return a}
  function i (line 6) | function i(j,i,l,n,p){var h=l[0],k=1,o=Math.pow(10,i),m=Math.round(j*o)/...
  function Sys$Component$_setProperties (line 6) | function Sys$Component$_setProperties(a,i){var d,j=Object.getType(a),e=j...
  function Sys$Component$_setReferences (line 6) | function Sys$Component$_setReferences(c,b){for(var a in b){var e=c["set_...
  function b (line 6) | function b(){f.initialize()}
  function v (line 6) | function v(){if(f===null)return;f=null;h=new Sys.Net.WebServiceError(tru...
  function t (line 6) | function t(d,e){if(f!==null){window.clearTimeout(f);f=null}k.dispose();d...
  function x (line 6) | function x(d){if(d.get_responseAvailable()){var f=d.get_statusCode(),c=n...

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/MSAjax/MicrosoftAjaxComponentModel.js
  function Sys$Component$_setProperties (line 6) | function Sys$Component$_setProperties(a,i){var d,j=Object.getType(a),e=j...
  function Sys$Component$_setReferences (line 6) | function Sys$Component$_setReferences(c,b){for(var a in b){var e=c["set_...
  function b (line 6) | function b(){f.initialize()}

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/MSAjax/MicrosoftAjaxCore.js
  function Sys$Enum$parse (line 6) | function Sys$Enum$parse(c,e){var a,b,i;if(e){a=this.__lowerCaseValues;if...
  function Sys$Enum$toString (line 6) | function Sys$Enum$toString(c){if(typeof c==="undefined"||c===null)return...

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/MSAjax/MicrosoftAjaxGlobalization.js
  function d (line 6) | function d(a){if(a<10)return "0"+a;return a.toString()}
  function m (line 6) | function m(a){if(a<10)return "00"+a;if(a<100)return "0"+a;return a.toStr...
  function v (line 6) | function v(a){if(a<10)return "000"+a;else if(a<100)return "00"+a;else if...
  function s (line 6) | function s(){if(h||p)return h;h=t.test(e);p=true;return h}
  function g (line 6) | function g(a,b){if(f)return f[b];switch(b){case 0:return a.getFullYear()...
  function g (line 6) | function g(a,c,d){for(var b=a.length;b<c;b++)a=d?"0"+a:a+"0";return a}
  function i (line 6) | function i(j,i,l,n,p){var h=l[0],k=1,o=Math.pow(10,i),m=Math.round(j*o)/...

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/MSAjax/MicrosoftAjaxWebForms.js
  function i (line 6) | function i(b){b=b?b.toString():"";return m.test(b)&&b.indexOf("'"+a+"'")...
  function B (line 6) | function B(a){a.cancelBubble=true}

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/MSAjax/MicrosoftAjaxWebServices.js
  function v (line 6) | function v(){if(f===null)return;f=null;h=new Sys.Net.WebServiceError(tru...
  function t (line 6) | function t(d,e){if(f!==null){window.clearTimeout(f);f=null}k.dispose();d...
  function x (line 6) | function x(d){if(d.get_responseAvailable()){var f=d.get_statusCode(),c=n...

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/Menu.js
  function Menu_ClearInterval (line 6) | function Menu_ClearInterval() {
  function Menu_Collapse (line 11) | function Menu_Collapse(item) {
  function Menu_Expand (line 20) | function Menu_Expand(item, horizontalOffset, verticalOffset, hideScrolle...
  function Menu_FindMenu (line 52) | function Menu_FindMenu(item) {
  function Menu_FindNext (line 69) | function Menu_FindNext(item) {
  function Menu_FindParentContainer (line 95) | function Menu_FindParentContainer(item) {
  function Menu_FindParentItem (line 110) | function Menu_FindParentItem(item) {
  function Menu_FindPrevious (line 120) | function Menu_FindPrevious(item) {
  function Menu_FindSubMenu (line 140) | function Menu_FindSubMenu(item) {
  function Menu_Focus (line 147) | function Menu_Focus(item) {
  function Menu_GetData (line 168) | function Menu_GetData(item) {
  function Menu_HideItems (line 179) | function Menu_HideItems(items) {
  function Menu_HoverDisabled (line 240) | function Menu_HoverDisabled(item) {
  function Menu_HoverDynamic (line 252) | function Menu_HoverDynamic(item) {
  function Menu_HoverRoot (line 273) | function Menu_HoverRoot(item) {
  function Menu_HoverStatic (line 293) | function Menu_HoverStatic(item) {
  function Menu_IsHorizontal (line 300) | function Menu_IsHorizontal(item) {
  function Menu_IsSelectable (line 313) | function Menu_IsSelectable(link) {
  function Menu_Key (line 316) | function Menu_Key(item) {
  function Menu_ResetSiblings (line 439) | function Menu_ResetSiblings(item) {
  function Menu_ResetTopMenus (line 475) | function Menu_ResetTopMenus(table, doNotReset, level, up) {
  function Menu_RestoreInterval (line 516) | function Menu_RestoreInterval() {
  function Menu_SetRoot (line 522) | function Menu_SetRoot(item) {
  function Menu_Unhover (line 531) | function Menu_Unhover(item) {
  function PopOut_Clip (line 545) | function PopOut_Clip(element, y, height) {
  function PopOut_Down (line 551) | function PopOut_Down(scroller) {
  function PopOut_Hide (line 571) | function PopOut_Hide(panelId) {
  function PopOut_HideScrollers (line 592) | function PopOut_HideScrollers(panel) {
  function PopOut_Position (line 606) | function PopOut_Position(panel, hideScrollers) {
  function PopOut_Scroll (line 761) | function PopOut_Scroll(panel, offsetDelta) {
  function PopOut_SetPanelHeight (line 769) | function PopOut_SetPanelHeight(element, height, doNotClip) {
  function PopOut_Show (line 783) | function PopOut_Show(panelId, hideScrollers, data) {
  function PopOut_ShowScrollers (line 835) | function PopOut_ShowScrollers(panel) {
  function PopOut_Stop (line 876) | function PopOut_Stop() {
  function PopOut_Up (line 882) | function PopOut_Up(scroller) {

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/TreeView.js
  function TreeView_HoverNode (line 2) | function TreeView_HoverNode(data, node) {
  function TreeView_GetNodeText (line 17) | function TreeView_GetNodeText(node) {
  function TreeView_PopulateNode (line 31) | function TreeView_PopulateNode(data, index, node, selectNode, selectImag...
  function TreeView_ProcessNodeData (line 61) | function TreeView_ProcessNodeData(result, context) {
  function TreeView_SelectNode (line 139) | function TreeView_SelectNode(data, node, nodeId) {
  function TreeView_ToggleNode (line 159) | function TreeView_ToggleNode(data, index, node, lineType, children) {
  function TreeView_UnhoverNode (line 208) | function TreeView_UnhoverNode(node) {

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/WebForms.js
  function WebForm_PostBackOptions (line 2) | function WebForm_PostBackOptions(eventTarget, eventArgument, validation,...
  function WebForm_DoPostBackWithOptions (line 11) | function WebForm_DoPostBackWithOptions(options) {
  function WebForm_DoCallback (line 48) | function WebForm_DoCallback(eventTarget, eventArgument, eventCallback, c...
  function WebForm_CallbackComplete (line 176) | function WebForm_CallbackComplete() {
  function WebForm_ExecuteCallback (line 193) | function WebForm_ExecuteCallback(callbackObject) {
  function WebForm_FillFirstAvailableSlot (line 228) | function WebForm_FillFirstAvailableSlot(array, element) {
  function WebForm_InitCallback (line 240) | function WebForm_InitCallback() {
  function WebForm_InitCallbackAddField (line 268) | function WebForm_InitCallbackAddField(name, value) {
  function WebForm_EncodeCallback (line 275) | function WebForm_EncodeCallback(parameter) {
  function WebForm_ReEnableControls (line 284) | function WebForm_ReEnableControls() {
  function WebForm_ReDisableControls (line 305) | function WebForm_ReDisableControls() {
  function WebForm_SimulateClick (line 310) | function WebForm_SimulateClick(element, event) {
  function WebForm_FireDefaultButton (line 330) | function WebForm_FireDefaultButton(event, target) {
  function WebForm_GetScrollX (line 354) | function WebForm_GetScrollX() {
  function WebForm_GetScrollY (line 368) | function WebForm_GetScrollY() {
  function WebForm_SaveScrollPositionSubmit (line 382) | function WebForm_SaveScrollPositionSubmit() {
  function WebForm_SaveScrollPositionOnSubmit (line 396) | function WebForm_SaveScrollPositionOnSubmit() {
  function WebForm_RestoreScrollPosition (line 404) | function WebForm_RestoreScrollPosition() {
  function WebForm_TextBoxKeyHandler (line 416) | function WebForm_TextBoxKeyHandler(event) {
  function WebForm_TrimString (line 436) | function WebForm_TrimString(value) {
  function WebForm_AppendToClassName (line 439) | function WebForm_AppendToClassName(element, className) {
  function WebForm_RemoveClassName (line 447) | function WebForm_RemoveClassName(element, className) {
  function WebForm_GetElementById (line 456) | function WebForm_GetElementById(elementId) {
  function WebForm_GetElementByTagName (line 465) | function WebForm_GetElementByTagName(element, tagName) {
  function WebForm_GetElementsByTagName (line 472) | function WebForm_GetElementsByTagName(element, tagName) {
  function WebForm_GetElementDir (line 483) | function WebForm_GetElementDir(element) {
  function WebForm_GetElementPosition (line 492) | function WebForm_GetElementPosition(element) {
  function WebForm_GetParentByTagName (line 540) | function WebForm_GetParentByTagName(element, tagName) {
  function WebForm_SetElementHeight (line 548) | function WebForm_SetElementHeight(element, height) {
  function WebForm_SetElementWidth (line 553) | function WebForm_SetElementWidth(element, width) {
  function WebForm_SetElementX (line 558) | function WebForm_SetElementX(element, x) {
  function WebForm_SetElementY (line 563) | function WebForm_SetElementY(element, y) {

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/WebParts.js
  function Point (line 3) | function Point(x, y) {
  function __wpTranslateOffset (line 7) | function __wpTranslateOffset(x, y, offsetElement, relativeToElement, inc...
  function __wpGetPageEventLocation (line 24) | function __wpGetPageEventLocation(event, includeScroll) {
  function __wpClearSelection (line 30) | function __wpClearSelection() {
  function WebPart (line 33) | function WebPart(webPartElement, webPartTitleElement, zone, zoneIndex, a...
  function WebPart_Dispose (line 51) | function WebPart_Dispose() {
  function WebPart_OnMouseDown (line 54) | function WebPart_OnMouseDown() {
  function WebPart_OnDragStart (line 72) | function WebPart_OnDragStart() {
  function WebPart_OnDrag (line 83) | function WebPart_OnDrag() {
  function WebPart_OnDragEnd (line 86) | function WebPart_OnDragEnd() {
  function WebPart_GetParentWebPartElement (line 89) | function WebPart_GetParentWebPartElement(containedElement) {
  function WebPart_UpdatePosition (line 99) | function WebPart_UpdatePosition() {
  function Zone (line 104) | function Zone(zoneElement, zoneIndex, uniqueID, isVertical, allowLayoutC...
  function Zone_Dispose (line 152) | function Zone_Dispose() {
  function Zone_OnDragEnter (line 158) | function Zone_OnDragEnter() {
  function Zone_OnDragOver (line 166) | function Zone_OnDragOver() {
  function Zone_OnDrop (line 174) | function Zone_OnDrop() {
  function Zone_GetParentZoneElement (line 182) | function Zone_GetParentZoneElement(containedElement) {
  function Zone_AddWebPart (line 192) | function Zone_AddWebPart(webPartElement, webPartTitleElement, allowZoneC...
  function Zone_ToggleDropCues (line 204) | function Zone_ToggleDropCues(show, index, ignoreOutline) {
  function Zone_GetWebPartIndex (line 231) | function Zone_GetWebPartIndex(location) {
  function Zone_UpdatePosition (line 256) | function Zone_UpdatePosition() {
  function WebPartDragState (line 266) | function WebPartDragState(webPartElement, effect) {
  function WebPartMenu (line 273) | function WebPartMenu(menuLabelElement, menuDropDownElement, menuElement) {
  function WebPartMenu_Dispose (line 302) | function WebPartMenu_Dispose() {
  function WebPartMenu_Show (line 307) | function WebPartMenu_Show() {
  function WebPartMenu_Hide (line 341) | function WebPartMenu_Hide() {
  function WebPartMenu_Hover (line 350) | function WebPartMenu_Hover() {
  function WebPartMenu_Unhover (line 358) | function WebPartMenu_Unhover() {
  function WebPartMenu_OnClick (line 367) | function WebPartMenu_OnClick() {
  function WebPartMenu_OnKeyPress (line 375) | function WebPartMenu_OnKeyPress() {
  function WebPartMenu_OnMouseEnter (line 385) | function WebPartMenu_OnMouseEnter() {
  function WebPartMenu_OnMouseLeave (line 391) | function WebPartMenu_OnMouseLeave() {
  function WebPartManager (line 397) | function WebPartManager() {
  function WebPartManager_Dispose (line 419) | function WebPartManager_Dispose() {
  function WebPartManager_AddZone (line 425) | function WebPartManager_AddZone(zoneElement, uniqueID, isVertical, allow...
  function WebPartManager_IsDragDropEnabled (line 431) | function WebPartManager_IsDragDropEnabled() {
  function WebPartManager_DragDrop (line 434) | function WebPartManager_DragDrop() {
  function WebPartManager_InitiateWebPartDragDrop (line 442) | function WebPartManager_InitiateWebPartDragDrop(webPartElement) {
  function WebPartManager_CompleteWebPartDragDrop (line 468) | function WebPartManager_CompleteWebPartDragDrop() {
  function WebPartManager_ContinueWebPartDragDrop (line 492) | function WebPartManager_ContinueWebPartDragDrop() {
  function WebPartManager_Execute (line 501) | function WebPartManager_Execute(script) {
  function WebPartManager_ProcessWebPartDragEnter (line 508) | function WebPartManager_ProcessWebPartDragEnter() {
  function WebPartManager_ProcessWebPartDragOver (line 550) | function WebPartManager_ProcessWebPartDragOver() {
  function WebPartManager_ProcessWebPartDrop (line 594) | function WebPartManager_ProcessWebPartDrop() {
  function WebPartManager_ShowHelp (line 609) | function WebPartManager_ShowHelp(helpUrl, helpMode) {
  function WebPartManager_ExportWebPart (line 626) | function WebPartManager_ExportWebPart(exportUrl, warn, confirmOnly) {
  function WebPartManager_UpdatePositions (line 637) | function WebPartManager_UpdatePositions() {
  function WebPartManager_SubmitPage (line 642) | function WebPartManager_SubmitPage(eventTarget, eventArgument) {

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/WebUIValidation.js
  function ValidatorUpdateDisplay (line 7) | function ValidatorUpdateDisplay(val) {
  function ValidatorUpdateIsValid (line 23) | function ValidatorUpdateIsValid() {
  function AllValidatorsValid (line 26) | function AllValidatorsValid(validators) {
  function ValidatorHookupControlID (line 37) | function ValidatorHookupControlID(controlID, val) {
  function ValidatorHookupControl (line 50) | function ValidatorHookupControl(control, val) {
  function ValidatorHookupEvent (line 82) | function ValidatorHookupEvent(control, eventType, functionPrefix) {
  function ValidatorGetValue (line 93) | function ValidatorGetValue(id) {
  function ValidatorGetValueRecursive (line 101) | function ValidatorGetValueRecursive(control)
  function Page_ClientValidate (line 113) | function Page_ClientValidate(validationGroup) {
  function ValidatorCommonOnSubmit (line 127) | function ValidatorCommonOnSubmit() {
  function ValidatorEnable (line 136) | function ValidatorEnable(val, enable) {
  function ValidatorOnChange (line 141) | function ValidatorOnChange(event) {
  function ValidatedTextBoxOnKeyPress (line 168) | function ValidatedTextBoxOnKeyPress(event) {
  function ValidatedControlOnBlur (line 183) | function ValidatedControlOnBlur(event) {
  function ValidatorValidate (line 197) | function ValidatorValidate(val, validationGroup, event) {
  function ValidatorSetFocus (line 210) | function ValidatorSetFocus(val, event) {
  function IsInVisibleContainer (line 251) | function IsInVisibleContainer(ctrl) {
  function IsValidationGroupMatch (line 266) | function IsValidationGroupMatch(control, validationGroup) {
  function ValidatorOnLoad (line 276) | function ValidatorOnLoad() {
  function ValidatorConvert (line 308) | function ValidatorConvert(op, dataType, val) {
  function ValidatorCompare (line 395) | function ValidatorCompare(operand1, operand2, operator, val) {
  function CompareValidatorEvaluateIsValid (line 419) | function CompareValidatorEvaluateIsValid(val) {
  function CustomValidatorEvaluateIsValid (line 440) | function CustomValidatorEvaluateIsValid(val) {
  function RegularExpressionValidatorEvaluateIsValid (line 455) | function RegularExpressionValidatorEvaluateIsValid(val) {
  function ValidatorTrim (line 463) | function ValidatorTrim(s) {
  function RequiredFieldValidatorEvaluateIsValid (line 467) | function RequiredFieldValidatorEvaluateIsValid(val) {
  function RangeValidatorEvaluateIsValid (line 470) | function RangeValidatorEvaluateIsValid(val) {
  function ValidationSummaryOnSubmit (line 477) | function ValidationSummaryOnSubmit(validationGroup) {
  function getAttributesWithPrefix (line 569) | function getAttributesWithPrefix(element, prefix) {
  function normalizeKey (line 585) | function normalizeKey(key) {
  function addValidationExpando (line 589) | function addValidationExpando(element) {
  function dispose (line 595) | function dispose(element) {
  function addNormalizedAttribute (line 601) | function addNormalizedAttribute(name, normalizedName) {
  function parseSpecificAttribute (line 604) | function parseSpecificAttribute(selector, attribute, validatorsArray) {
  function parse (line 613) | function parse(selector) {
  function loadValidators (line 618) | function loadValidators() {
  function registerUpdatePanel (line 628) | function registerUpdatePanel() {

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Web/Scripts/bootstrap.js
  function transitionEnd (line 48) | function transitionEnd() {
  function removeElement (line 133) | function removeElement() {
  function clearMenus (line 779) | function clearMenus() {
  function getParent (line 790) | function getParent($this) {
  function complete (line 1351) | function complete() {
  function ScrollSpy (line 1619) | function ScrollSpy(element, options) {
  function next (line 1820) | function next() {

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Web/Scripts/jquery-1.10.2.js
  function isArraylike (line 997) | function isArraylike( obj ) {
  function Sizzle (line 1197) | function Sizzle( selector, context, results, seed ) {
  function createCache (line 1312) | function createCache() {
  function markFunction (line 1330) | function markFunction( fn ) {
  function assert (line 1339) | function assert( fn ) {
  function addHandle (line 1361) | function addHandle( attrs, handler ) {
  function siblingCheck (line 1376) | function siblingCheck( a, b ) {
  function createInputPseudo (line 1403) | function createInputPseudo( type ) {
  function createButtonPseudo (line 1414) | function createButtonPseudo( type ) {
  function createPositionalPseudo (line 1425) | function createPositionalPseudo( fn ) {
  function setFilters (line 2408) | function setFilters() {}
  function tokenize (line 2412) | function tokenize( selector, parseOnly ) {
  function toSelector (line 2479) | function toSelector( tokens ) {
  function addCombinator (line 2489) | function addCombinator( matcher, combinator, base ) {
  function elementMatcher (line 2539) | function elementMatcher( matchers ) {
  function condense (line 2553) | function condense( unmatched, map, filter, context, xml ) {
  function setMatcher (line 2574) | function setMatcher( preFilter, selector, matcher, postFilter, postFinde...
  function matcherFromTokens (line 2667) | function matcherFromTokens( tokens ) {
  function matcherFromGroupMatchers (line 2722) | function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
  function multipleContexts (line 2850) | function multipleContexts( selector, contexts, results ) {
  function select (line 2859) | function select( selector, context, results, seed ) {
  function createOptions (line 2999) | function createOptions( options ) {
  function internalData (line 3582) | function internalData( elem, name, data, pvt /* Internal Use Only */ ){
  function internalRemoveData (line 3671) | function internalRemoveData( elem, name, pvt ) {
  function dataAttr (line 3868) | function dataAttr( elem, key, data ) {
  function isEmptyDataObject (line 3900) | function isEmptyDataObject( obj ) {
  function returnTrue (line 4726) | function returnTrue() {
  function returnFalse (line 4730) | function returnFalse() {
  function safeActiveElement (line 4734) | function safeActiveElement() {
  function sibling (line 5852) | function sibling( cur, dir ) {
  function winnow (line 5970) | function winnow( elements, qualifier, not ) {
  function createSafeFragment (line 5998) | function createSafeFragment( document ) {
  function manipulationTarget (line 6312) | function manipulationTarget( elem, content ) {
  function disableScript (line 6322) | function disableScript( elem ) {
  function restoreScript (line 6326) | function restoreScript( elem ) {
  function setGlobalEval (line 6337) | function setGlobalEval( elems, refElements ) {
  function cloneCopyEvent (line 6345) | function cloneCopyEvent( src, dest ) {
  function fixCloneNodeIssues (line 6373) | function fixCloneNodeIssues( src, dest ) {
  function getAll (line 6466) | function getAll( context, tag ) {
  function fixDefaultChecked (line 6489) | function fixDefaultChecked( elem ) {
  function vendorPropName (line 6831) | function vendorPropName( style, name ) {
  function isHidden (line 6853) | function isHidden( elem, el ) {
  function showHide (line 6860) | function showHide( elements, show ) {
  function setPositiveNumber (line 7189) | function setPositiveNumber( elem, value, subtract ) {
  function augmentWidthOrHeight (line 7197) | function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
  function getWidthOrHeight (line 7236) | function getWidthOrHeight( elem, name, extra ) {
  function css_defaultDisplay (line 7280) | function css_defaultDisplay( nodeName ) {
  function actualDisplay (line 7312) | function actualDisplay( name, doc ) {
  function buildParams (line 7541) | function buildParams( prefix, obj, traditional, add ) {
  function addToPrefiltersOrTransports (line 7656) | function addToPrefiltersOrTransports( structure ) {
  function inspectPrefiltersOrTransports (line 7688) | function inspectPrefiltersOrTransports( structure, options, originalOpti...
  function ajaxExtend (line 7715) | function ajaxExtend( target, src ) {
  function done (line 8163) | function done( status, nativeStatusText, responses, headers ) {
  function ajaxHandleResponses (line 8310) | function ajaxHandleResponses( s, jqXHR, responses ) {
  function ajaxConvert (line 8365) | function ajaxConvert( s, response, jqXHR, isSuccess ) {
  function createStandardXHR (line 8633) | function createStandardXHR() {
  function createActiveXHR (line 8639) | function createActiveXHR() {
  function createFxNow (line 8885) | function createFxNow() {
  function createTween (line 8892) | function createTween( value, prop, animation ) {
  function Animation (line 8906) | function Animation( elem, properties, options ) {
  function propFilter (line 9010) | function propFilter( props, specialEasing ) {
  function defaultPrefilter (line 9077) | function defaultPrefilter( elem, props, opts ) {
  function Tween (line 9202) | function Tween( elem, options, prop, end, easing ) {
  function genFx (line 9426) | function genFx( type, includeWidth ) {
  function getWindow (line 9722) | function getWindow( elem ) {

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Web/Scripts/modernizr-2.6.2.js
  function isEventSupported (line 216) | function isEventSupported( eventName, element ) {
  function setCss (line 312) | function setCss( str ) {
  function setCssAll (line 319) | function setCssAll( str1, str2 ) {
  function is (line 326) | function is( obj, type ) {
  function contains (line 333) | function contains( str, substr ) {
  function testProps (line 357) | function testProps( props, prefixed ) {
  function testDOMProps (line 373) | function testDOMProps( props, obj, elem ) {
  function testPropsAll (line 401) | function testPropsAll( prop, prefixed, elem ) {
  function webforms (line 872) | function webforms() {
  function addStyleSheet (line 1090) | function addStyleSheet(ownerDocument, cssText) {
  function getElements (line 1103) | function getElements() {
  function getExpandoData (line 1114) | function getExpandoData(ownerDocument) {
  function createElement (line 1132) | function createElement(nodeName, ownerDocument, data){
  function createDocumentFragment (line 1168) | function createDocumentFragment(ownerDocument, data){
  function shivMethods (line 1192) | function shivMethods(ownerDocument, data) {
  function shivDocument (line 1230) | function shivDocument(ownerDocument) {

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Web/Scripts/respond.js
  function callMedia (line 331) | function callMedia(){

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Web/SignUp.aspx.cs
  class SignUp (line 13) | public partial class SignUp : Page
    method PreloadStaticDataCache (line 18) | public static void PreloadStaticDataCache()
    method Page_Load (line 35) | protected void Page_Load(object sender, EventArgs e)
    method PopulateRoles (line 44) | private void PopulateRoles()
    method PopulateCountries (line 50) | private void PopulateCountries()
    method btnGo_Click (line 56) | protected void btnGo_Click(object sender, EventArgs e)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Web/SignUp.aspx.designer.cs
  class SignUp (line 13) | public partial class SignUp {

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Web/Site.Master.cs
  class SiteMaster (line 10) | public partial class SiteMaster : MasterPage
    method Page_Load (line 12) | protected void Page_Load(object sender, EventArgs e)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Web/Site.Master.designer.cs
  class SiteMaster (line 13) | public partial class SiteMaster {

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Web/Site.Mobile.Master.cs
  class Site_Mobile (line 10) | public partial class Site_Mobile : System.Web.UI.MasterPage
    method Page_Load (line 12) | protected void Page_Load(object sender, EventArgs e)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Web/Site.Mobile.Master.designer.cs
  class Site_Mobile (line 13) | public partial class Site_Mobile {

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Web/ThankYou.aspx.cs
  class ThankYou (line 10) | public partial class ThankYou : System.Web.UI.Page
    method Page_Load (line 12) | protected void Page_Load(object sender, EventArgs e)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Web/ThankYou.aspx.designer.cs
  class ThankYou (line 13) | public partial class ThankYou {

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Web/ViewSwitcher.ascx.cs
  class ViewSwitcher (line 12) | public partial class ViewSwitcher : System.Web.UI.UserControl
    method Page_Load (line 20) | protected void Page_Load(object sender, EventArgs e)

FILE: Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v2-src/ProductLaunch/ProductLaunch.Web/ViewSwitcher.ascx.designer.cs
  class ViewSwitcher (line 13) | public partial class ViewSwitcher {

FILE: Docker/additional-ressources/windows/aspnet-web/webserver/app/Program.cs
  class Program (line 6) | public class Program
    method Main (line 8) | public static void Main(string[] args)

FILE: Docker/additional-ressources/windows/aspnet-web/webserver/app/Startup.cs
  class Startup (line 8) | public class Startup
    method Configure (line 10) | public void Configure(IApplicationBuilder app)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet-ops/v1.2/src/UpgradeSample.Web/Global.asax.cs
  class Global (line 10) | public class Global : System.Web.HttpApplication
    method Application_Start (line 12) | protected void Application_Start(object sender, EventArgs e)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Core/Env.cs
  class Env (line 6) | public class Env
    method Get (line 12) | private static string Get(string variable)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.EndToEndTests/ProspectSignUp.feature.cs
  class ProspectSignUpFeature (line 18) | [System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "2....
    method FeatureSetup (line 29) | [Microsoft.VisualStudio.TestTools.UnitTesting.ClassInitializeAttribute()]
    method FeatureTearDown (line 38) | [Microsoft.VisualStudio.TestTools.UnitTesting.ClassCleanupAttribute()]
    method TestInitialize (line 45) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestInitializeAttribute()]
    method ScenarioTearDown (line 55) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestCleanupAttribute()]
    method ScenarioSetup (line 61) | public virtual void ScenarioSetup(TechTalk.SpecFlow.ScenarioInfo scena...
    method ScenarioCleanup (line 66) | public virtual void ScenarioCleanup()
    method SignUpWithValidDetails (line 71) | public virtual void SignUpWithValidDetails(string firstName, string la...
    method SignUpWithValidDetails_Variant0 (line 88) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant1 (line 104) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant2 (line 120) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant3 (line 136) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant4 (line 152) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant5 (line 168) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant6 (line 184) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant7 (line 200) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant8 (line 216) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant9 (line 232) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant10 (line 248) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant11 (line 264) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant12 (line 280) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant13 (line 296) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant14 (line 312) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant15 (line 328) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant16 (line 344) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant17 (line 360) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant18 (line 376) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant19 (line 392) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant20 (line 408) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant21 (line 424) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant22 (line 440) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant23 (line 456) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant24 (line 472) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant25 (line 488) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.EndToEndTests/ProspectSignUpSteps.cs
  class ProspectSignUpSteps (line 11) | [Binding]
    method Setup (line 16) | [BeforeFeature]
    method TearDown (line 22) | [AfterFeature]
    method GivenIBrowseToTheSignUpPageAt (line 29) | [Given(@"I browse to the Sign Up Page at ""(.*)""")]
    method GivenIEnterDetails (line 36) | [Given(@"I enter details '(.*)' '(.*)' '(.*)' '(.*)' '(.*)' '(.*)'")]
    method WhenIPressGo (line 49) | [When(@"I press Go")]
    method ThenIShouldSeeTheThankYouPage (line 56) | [Then(@"I should see the Thank You page")]

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Entities/Country.cs
  class Country (line 3) | public class Country

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Entities/Prospect.cs
  class Prospect (line 3) | public class Prospect

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Entities/Role.cs
  class Role (line 3) | public class Role

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.MessageHandlers.IndexProspect/Config.cs
  class Config (line 6) | public class Config
    method Get (line 12) | private static string Get(string variable)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.MessageHandlers.IndexProspect/Documents/Prospect.cs
  class Prospect (line 5) | public class Prospect

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.MessageHandlers.IndexProspect/Indexer/Index.cs
  class Index (line 7) | public class Index
    method Setup (line 9) | public static void Setup()
    method CreateDocument (line 17) | public static void CreateDocument(Prospect prospect)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.MessageHandlers.IndexProspect/Program.cs
  class Program (line 10) | class Program
    method Main (line 14) | static void Main(string[] args)
    method IndexProspect (line 32) | private static void IndexProspect(object sender, MsgHandlerEventArgs e)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.MessageHandlers.SaveProspect/Program.cs
  class Program (line 11) | class Program
    method Main (line 15) | static void Main(string[] args)
    method SaveProspect (line 30) | private static void SaveProspect(object sender, MsgHandlerEventArgs e)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Messaging/Config.cs
  class Config (line 6) | public class Config
    method Get (line 12) | private static string Get(string variable)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Messaging/MessageHelper.cs
  class MessageHelper (line 7) | public class MessageHelper
    method ToData (line 9) | public static byte[] ToData<TMessage>(TMessage message)
    method FromData (line 16) | public static TMessage FromData<TMessage>(byte[] data)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Messaging/MessageQueue.cs
  class MessageQueue (line 6) | public static class MessageQueue
    method Publish (line 9) | public static void Publish<TMessage>(TMessage message)
    method CreateConnection (line 19) | public static IConnection CreateConnection()

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Messaging/Messages/Events/ProspectSignedUpEvent.cs
  class ProspectSignedUpEvent (line 6) | public class ProspectSignedUpEvent : Message

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Messaging/Messages/Message.cs
  class Message (line 5) | public abstract class Message
    method Message (line 11) | public Message()

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Model.Tests/ProductLaunchContextTest.cs
  class ProductLaunchContextTest (line 7) | [TestClass]
    method Insert (line 10) | [TestMethod]

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Model/Initializers/StaticDataInitializer.cs
  class StaticDataInitializer (line 6) | public class StaticDataInitializer : CreateDatabaseIfNotExists<ProductLa...
    method Seed (line 8) | protected override void Seed(ProductLaunchContext context)
    method AddCountry (line 23) | private void AddCountry(ProductLaunchContext context, string code, str...
    method AddRole (line 32) | private void AddRole(ProductLaunchContext context, string code, string...

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Model/ProductLaunchContext.cs
  class ProductLaunchContext (line 6) | public class ProductLaunchContext : DbContext
    method ProductLaunchContext (line 8) | public ProductLaunchContext() : base("ProductLaunchDb") { }
    method OnModelCreating (line 16) | protected override void OnModelCreating(DbModelBuilder builder)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Web/About.aspx.cs
  class About (line 10) | public partial class About : Page
    method Page_Load (line 12) | protected void Page_Load(object sender, EventArgs e)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Web/About.aspx.designer.cs
  class About (line 14) | public partial class About

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Web/App_Start/BundleConfig.cs
  class BundleConfig (line 10) | public class BundleConfig
    method RegisterBundles (line 13) | public static void RegisterBundles(BundleCollection bundles)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Web/App_Start/RouteConfig.cs
  class RouteConfig (line 9) | public static class RouteConfig
    method RegisterRoutes (line 11) | public static void RegisterRoutes(RouteCollection routes)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Web/Config.cs
  class Config (line 6) | public class Config
    method Get (line 12) | private static string Get(string variable)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Web/Contact.aspx.cs
  class Contact (line 10) | public partial class Contact : Page
    method Page_Load (line 12) | protected void Page_Load(object sender, EventArgs e)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Web/Contact.aspx.designer.cs
  class Contact (line 14) | public partial class Contact

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Web/Default.aspx.cs
  class _Default (line 8) | public partial class _Default : Page
    method Page_Load (line 10) | protected void Page_Load(object sender, EventArgs e)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Web/Default.aspx.designer.cs
  class _Default (line 14) | public partial class _Default

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Web/Global.asax.cs
  class Global (line 11) | public class Global : HttpApplication
    method Application_Start (line 13) | void Application_Start(object sender, EventArgs e)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/DetailsView.js
  function DetailsView (line 2) | function DetailsView() {
  function DetailsView_createPropertyString (line 12) | function DetailsView_createPropertyString() {
  function DetailsView_setStateValue (line 15) | function DetailsView_setStateValue() {
  function DetailsView_OnCallback (line 18) | function DetailsView_OnCallback (result, context) {
  function DetailsView_getHiddenFieldContents (line 28) | function DetailsView_getHiddenFieldContents(arg) {
  function createPropertyStringFromValues_DetailsView (line 31) | function createPropertyStringFromValues_DetailsView(pageIndex, dataKeys) {

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/Focus.js
  function WebForm_FindFirstFocusableChild (line 2) | function WebForm_FindFirstFocusableChild(control) {
  function WebForm_AutoFocus (line 29) | function WebForm_AutoFocus(focusId) {
  function WebForm_CanFocus (line 55) | function WebForm_CanFocus(element) {
  function WebForm_IsFocusableTag (line 64) | function WebForm_IsFocusableTag(tagName) {
  function WebForm_IsInVisibleContainer (line 71) | function WebForm_IsInVisibleContainer(ctrl) {

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/GridView.js
  function GridView (line 2) | function GridView() {
  function GridView_createPropertyString (line 14) | function GridView_createPropertyString() {
  function GridView_setStateValue (line 17) | function GridView_setStateValue() {
  function GridView_OnCallback (line 20) | function GridView_OnCallback (result, context) {
  function GridView_getHiddenFieldContents (line 30) | function GridView_getHiddenFieldContents(arg) {
  function createPropertyStringFromValues_GridView (line 33) | function createPropertyStringFromValues_GridView(pageIndex, sortDirectio...

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/MSAjax/MicrosoftAjax.js
  function Sys$Enum$parse (line 6) | function Sys$Enum$parse(c,e){var a,b,i;if(e){a=this.__lowerCaseValues;if...
  function Sys$Enum$toString (line 6) | function Sys$Enum$toString(c){if(typeof c==="undefined"||c===null)return...
  function d (line 6) | function d(a){if(a<10)return "0"+a;return a.toString()}
  function m (line 6) | function m(a){if(a<10)return "00"+a;if(a<100)return "0"+a;return a.toStr...
  function v (line 6) | function v(a){if(a<10)return "000"+a;else if(a<100)return "00"+a;else if...
  function s (line 6) | function s(){if(h||p)return h;h=t.test(e);p=true;return h}
  function g (line 6) | function g(a,b){if(f)return f[b];switch(b){case 0:return a.getFullYear()...
  function g (line 6) | function g(a,c,d){for(var b=a.length;b<c;b++)a=d?"0"+a:a+"0";return a}
  function i (line 6) | function i(j,i,l,n,p){var h=l[0],k=1,o=Math.pow(10,i),m=Math.round(j*o)/...
  function Sys$Component$_setProperties (line 6) | function Sys$Component$_setProperties(a,i){var d,j=Object.getType(a),e=j...
  function Sys$Component$_setReferences (line 6) | function Sys$Component$_setReferences(c,b){for(var a in b){var e=c["set_...
  function b (line 6) | function b(){f.initialize()}
  function v (line 6) | function v(){if(f===null)return;f=null;h=new Sys.Net.WebServiceError(tru...
  function t (line 6) | function t(d,e){if(f!==null){window.clearTimeout(f);f=null}k.dispose();d...
  function x (line 6) | function x(d){if(d.get_responseAvailable()){var f=d.get_statusCode(),c=n...

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/MSAjax/MicrosoftAjaxComponentModel.js
  function Sys$Component$_setProperties (line 6) | function Sys$Component$_setProperties(a,i){var d,j=Object.getType(a),e=j...
  function Sys$Component$_setReferences (line 6) | function Sys$Component$_setReferences(c,b){for(var a in b){var e=c["set_...
  function b (line 6) | function b(){f.initialize()}

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/MSAjax/MicrosoftAjaxCore.js
  function Sys$Enum$parse (line 6) | function Sys$Enum$parse(c,e){var a,b,i;if(e){a=this.__lowerCaseValues;if...
  function Sys$Enum$toString (line 6) | function Sys$Enum$toString(c){if(typeof c==="undefined"||c===null)return...

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/MSAjax/MicrosoftAjaxGlobalization.js
  function d (line 6) | function d(a){if(a<10)return "0"+a;return a.toString()}
  function m (line 6) | function m(a){if(a<10)return "00"+a;if(a<100)return "0"+a;return a.toStr...
  function v (line 6) | function v(a){if(a<10)return "000"+a;else if(a<100)return "00"+a;else if...
  function s (line 6) | function s(){if(h||p)return h;h=t.test(e);p=true;return h}
  function g (line 6) | function g(a,b){if(f)return f[b];switch(b){case 0:return a.getFullYear()...
  function g (line 6) | function g(a,c,d){for(var b=a.length;b<c;b++)a=d?"0"+a:a+"0";return a}
  function i (line 6) | function i(j,i,l,n,p){var h=l[0],k=1,o=Math.pow(10,i),m=Math.round(j*o)/...

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/MSAjax/MicrosoftAjaxWebForms.js
  function i (line 6) | function i(b){b=b?b.toString():"";return m.test(b)&&b.indexOf("'"+a+"'")...
  function B (line 6) | function B(a){a.cancelBubble=true}

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/MSAjax/MicrosoftAjaxWebServices.js
  function v (line 6) | function v(){if(f===null)return;f=null;h=new Sys.Net.WebServiceError(tru...
  function t (line 6) | function t(d,e){if(f!==null){window.clearTimeout(f);f=null}k.dispose();d...
  function x (line 6) | function x(d){if(d.get_responseAvailable()){var f=d.get_statusCode(),c=n...

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/Menu.js
  function Menu_ClearInterval (line 6) | function Menu_ClearInterval() {
  function Menu_Collapse (line 11) | function Menu_Collapse(item) {
  function Menu_Expand (line 20) | function Menu_Expand(item, horizontalOffset, verticalOffset, hideScrolle...
  function Menu_FindMenu (line 52) | function Menu_FindMenu(item) {
  function Menu_FindNext (line 69) | function Menu_FindNext(item) {
  function Menu_FindParentContainer (line 95) | function Menu_FindParentContainer(item) {
  function Menu_FindParentItem (line 110) | function Menu_FindParentItem(item) {
  function Menu_FindPrevious (line 120) | function Menu_FindPrevious(item) {
  function Menu_FindSubMenu (line 140) | function Menu_FindSubMenu(item) {
  function Menu_Focus (line 147) | function Menu_Focus(item) {
  function Menu_GetData (line 168) | function Menu_GetData(item) {
  function Menu_HideItems (line 179) | function Menu_HideItems(items) {
  function Menu_HoverDisabled (line 240) | function Menu_HoverDisabled(item) {
  function Menu_HoverDynamic (line 252) | function Menu_HoverDynamic(item) {
  function Menu_HoverRoot (line 273) | function Menu_HoverRoot(item) {
  function Menu_HoverStatic (line 293) | function Menu_HoverStatic(item) {
  function Menu_IsHorizontal (line 300) | function Menu_IsHorizontal(item) {
  function Menu_IsSelectable (line 313) | function Menu_IsSelectable(link) {
  function Menu_Key (line 316) | function Menu_Key(item) {
  function Menu_ResetSiblings (line 439) | function Menu_ResetSiblings(item) {
  function Menu_ResetTopMenus (line 475) | function Menu_ResetTopMenus(table, doNotReset, level, up) {
  function Menu_RestoreInterval (line 516) | function Menu_RestoreInterval() {
  function Menu_SetRoot (line 522) | function Menu_SetRoot(item) {
  function Menu_Unhover (line 531) | function Menu_Unhover(item) {
  function PopOut_Clip (line 545) | function PopOut_Clip(element, y, height) {
  function PopOut_Down (line 551) | function PopOut_Down(scroller) {
  function PopOut_Hide (line 571) | function PopOut_Hide(panelId) {
  function PopOut_HideScrollers (line 592) | function PopOut_HideScrollers(panel) {
  function PopOut_Position (line 606) | function PopOut_Position(panel, hideScrollers) {
  function PopOut_Scroll (line 761) | function PopOut_Scroll(panel, offsetDelta) {
  function PopOut_SetPanelHeight (line 769) | function PopOut_SetPanelHeight(element, height, doNotClip) {
  function PopOut_Show (line 783) | function PopOut_Show(panelId, hideScrollers, data) {
  function PopOut_ShowScrollers (line 835) | function PopOut_ShowScrollers(panel) {
  function PopOut_Stop (line 876) | function PopOut_Stop() {
  function PopOut_Up (line 882) | function PopOut_Up(scroller) {

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/TreeView.js
  function TreeView_HoverNode (line 2) | function TreeView_HoverNode(data, node) {
  function TreeView_GetNodeText (line 17) | function TreeView_GetNodeText(node) {
  function TreeView_PopulateNode (line 31) | function TreeView_PopulateNode(data, index, node, selectNode, selectImag...
  function TreeView_ProcessNodeData (line 61) | function TreeView_ProcessNodeData(result, context) {
  function TreeView_SelectNode (line 139) | function TreeView_SelectNode(data, node, nodeId) {
  function TreeView_ToggleNode (line 159) | function TreeView_ToggleNode(data, index, node, lineType, children) {
  function TreeView_UnhoverNode (line 208) | function TreeView_UnhoverNode(node) {

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/WebForms.js
  function WebForm_PostBackOptions (line 2) | function WebForm_PostBackOptions(eventTarget, eventArgument, validation,...
  function WebForm_DoPostBackWithOptions (line 11) | function WebForm_DoPostBackWithOptions(options) {
  function WebForm_DoCallback (line 48) | function WebForm_DoCallback(eventTarget, eventArgument, eventCallback, c...
  function WebForm_CallbackComplete (line 176) | function WebForm_CallbackComplete() {
  function WebForm_ExecuteCallback (line 193) | function WebForm_ExecuteCallback(callbackObject) {
  function WebForm_FillFirstAvailableSlot (line 228) | function WebForm_FillFirstAvailableSlot(array, element) {
  function WebForm_InitCallback (line 240) | function WebForm_InitCallback() {
  function WebForm_InitCallbackAddField (line 268) | function WebForm_InitCallbackAddField(name, value) {
  function WebForm_EncodeCallback (line 275) | function WebForm_EncodeCallback(parameter) {
  function WebForm_ReEnableControls (line 284) | function WebForm_ReEnableControls() {
  function WebForm_ReDisableControls (line 305) | function WebForm_ReDisableControls() {
  function WebForm_SimulateClick (line 310) | function WebForm_SimulateClick(element, event) {
  function WebForm_FireDefaultButton (line 330) | function WebForm_FireDefaultButton(event, target) {
  function WebForm_GetScrollX (line 354) | function WebForm_GetScrollX() {
  function WebForm_GetScrollY (line 368) | function WebForm_GetScrollY() {
  function WebForm_SaveScrollPositionSubmit (line 382) | function WebForm_SaveScrollPositionSubmit() {
  function WebForm_SaveScrollPositionOnSubmit (line 396) | function WebForm_SaveScrollPositionOnSubmit() {
  function WebForm_RestoreScrollPosition (line 404) | function WebForm_RestoreScrollPosition() {
  function WebForm_TextBoxKeyHandler (line 416) | function WebForm_TextBoxKeyHandler(event) {
  function WebForm_TrimString (line 436) | function WebForm_TrimString(value) {
  function WebForm_AppendToClassName (line 439) | function WebForm_AppendToClassName(element, className) {
  function WebForm_RemoveClassName (line 447) | function WebForm_RemoveClassName(element, className) {
  function WebForm_GetElementById (line 456) | function WebForm_GetElementById(elementId) {
  function WebForm_GetElementByTagName (line 465) | function WebForm_GetElementByTagName(element, tagName) {
  function WebForm_GetElementsByTagName (line 472) | function WebForm_GetElementsByTagName(element, tagName) {
  function WebForm_GetElementDir (line 483) | function WebForm_GetElementDir(element) {
  function WebForm_GetElementPosition (line 492) | function WebForm_GetElementPosition(element) {
  function WebForm_GetParentByTagName (line 540) | function WebForm_GetParentByTagName(element, tagName) {
  function WebForm_SetElementHeight (line 548) | function WebForm_SetElementHeight(element, height) {
  function WebForm_SetElementWidth (line 553) | function WebForm_SetElementWidth(element, width) {
  function WebForm_SetElementX (line 558) | function WebForm_SetElementX(element, x) {
  function WebForm_SetElementY (line 563) | function WebForm_SetElementY(element, y) {

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/WebParts.js
  function Point (line 3) | function Point(x, y) {
  function __wpTranslateOffset (line 7) | function __wpTranslateOffset(x, y, offsetElement, relativeToElement, inc...
  function __wpGetPageEventLocation (line 24) | function __wpGetPageEventLocation(event, includeScroll) {
  function __wpClearSelection (line 30) | function __wpClearSelection() {
  function WebPart (line 33) | function WebPart(webPartElement, webPartTitleElement, zone, zoneIndex, a...
  function WebPart_Dispose (line 51) | function WebPart_Dispose() {
  function WebPart_OnMouseDown (line 54) | function WebPart_OnMouseDown() {
  function WebPart_OnDragStart (line 72) | function WebPart_OnDragStart() {
  function WebPart_OnDrag (line 83) | function WebPart_OnDrag() {
  function WebPart_OnDragEnd (line 86) | function WebPart_OnDragEnd() {
  function WebPart_GetParentWebPartElement (line 89) | function WebPart_GetParentWebPartElement(containedElement) {
  function WebPart_UpdatePosition (line 99) | function WebPart_UpdatePosition() {
  function Zone (line 104) | function Zone(zoneElement, zoneIndex, uniqueID, isVertical, allowLayoutC...
  function Zone_Dispose (line 152) | function Zone_Dispose() {
  function Zone_OnDragEnter (line 158) | function Zone_OnDragEnter() {
  function Zone_OnDragOver (line 166) | function Zone_OnDragOver() {
  function Zone_OnDrop (line 174) | function Zone_OnDrop() {
  function Zone_GetParentZoneElement (line 182) | function Zone_GetParentZoneElement(containedElement) {
  function Zone_AddWebPart (line 192) | function Zone_AddWebPart(webPartElement, webPartTitleElement, allowZoneC...
  function Zone_ToggleDropCues (line 204) | function Zone_ToggleDropCues(show, index, ignoreOutline) {
  function Zone_GetWebPartIndex (line 231) | function Zone_GetWebPartIndex(location) {
  function Zone_UpdatePosition (line 256) | function Zone_UpdatePosition() {
  function WebPartDragState (line 266) | function WebPartDragState(webPartElement, effect) {
  function WebPartMenu (line 273) | function WebPartMenu(menuLabelElement, menuDropDownElement, menuElement) {
  function WebPartMenu_Dispose (line 302) | function WebPartMenu_Dispose() {
  function WebPartMenu_Show (line 307) | function WebPartMenu_Show() {
  function WebPartMenu_Hide (line 341) | function WebPartMenu_Hide() {
  function WebPartMenu_Hover (line 350) | function WebPartMenu_Hover() {
  function WebPartMenu_Unhover (line 358) | function WebPartMenu_Unhover() {
  function WebPartMenu_OnClick (line 367) | function WebPartMenu_OnClick() {
  function WebPartMenu_OnKeyPress (line 375) | function WebPartMenu_OnKeyPress() {
  function WebPartMenu_OnMouseEnter (line 385) | function WebPartMenu_OnMouseEnter() {
  function WebPartMenu_OnMouseLeave (line 391) | function WebPartMenu_OnMouseLeave() {
  function WebPartManager (line 397) | function WebPartManager() {
  function WebPartManager_Dispose (line 419) | function WebPartManager_Dispose() {
  function WebPartManager_AddZone (line 425) | function WebPartManager_AddZone(zoneElement, uniqueID, isVertical, allow...
  function WebPartManager_IsDragDropEnabled (line 431) | function WebPartManager_IsDragDropEnabled() {
  function WebPartManager_DragDrop (line 434) | function WebPartManager_DragDrop() {
  function WebPartManager_InitiateWebPartDragDrop (line 442) | function WebPartManager_InitiateWebPartDragDrop(webPartElement) {
  function WebPartManager_CompleteWebPartDragDrop (line 468) | function WebPartManager_CompleteWebPartDragDrop() {
  function WebPartManager_ContinueWebPartDragDrop (line 492) | function WebPartManager_ContinueWebPartDragDrop() {
  function WebPartManager_Execute (line 501) | function WebPartManager_Execute(script) {
  function WebPartManager_ProcessWebPartDragEnter (line 508) | function WebPartManager_ProcessWebPartDragEnter() {
  function WebPartManager_ProcessWebPartDragOver (line 550) | function WebPartManager_ProcessWebPartDragOver() {
  function WebPartManager_ProcessWebPartDrop (line 594) | function WebPartManager_ProcessWebPartDrop() {
  function WebPartManager_ShowHelp (line 609) | function WebPartManager_ShowHelp(helpUrl, helpMode) {
  function WebPartManager_ExportWebPart (line 626) | function WebPartManager_ExportWebPart(exportUrl, warn, confirmOnly) {
  function WebPartManager_UpdatePositions (line 637) | function WebPartManager_UpdatePositions() {
  function WebPartManager_SubmitPage (line 642) | function WebPartManager_SubmitPage(eventTarget, eventArgument) {

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/WebUIValidation.js
  function ValidatorUpdateDisplay (line 7) | function ValidatorUpdateDisplay(val) {
  function ValidatorUpdateIsValid (line 23) | function ValidatorUpdateIsValid() {
  function AllValidatorsValid (line 26) | function AllValidatorsValid(validators) {
  function ValidatorHookupControlID (line 37) | function ValidatorHookupControlID(controlID, val) {
  function ValidatorHookupControl (line 50) | function ValidatorHookupControl(control, val) {
  function ValidatorHookupEvent (line 82) | function ValidatorHookupEvent(control, eventType, functionPrefix) {
  function ValidatorGetValue (line 93) | function ValidatorGetValue(id) {
  function ValidatorGetValueRecursive (line 101) | function ValidatorGetValueRecursive(control)
  function Page_ClientValidate (line 113) | function Page_ClientValidate(validationGroup) {
  function ValidatorCommonOnSubmit (line 127) | function ValidatorCommonOnSubmit() {
  function ValidatorEnable (line 136) | function ValidatorEnable(val, enable) {
  function ValidatorOnChange (line 141) | function ValidatorOnChange(event) {
  function ValidatedTextBoxOnKeyPress (line 168) | function ValidatedTextBoxOnKeyPress(event) {
  function ValidatedControlOnBlur (line 183) | function ValidatedControlOnBlur(event) {
  function ValidatorValidate (line 197) | function ValidatorValidate(val, validationGroup, event) {
  function ValidatorSetFocus (line 210) | function ValidatorSetFocus(val, event) {
  function IsInVisibleContainer (line 251) | function IsInVisibleContainer(ctrl) {
  function IsValidationGroupMatch (line 266) | function IsValidationGroupMatch(control, validationGroup) {
  function ValidatorOnLoad (line 276) | function ValidatorOnLoad() {
  function ValidatorConvert (line 308) | function ValidatorConvert(op, dataType, val) {
  function ValidatorCompare (line 395) | function ValidatorCompare(operand1, operand2, operator, val) {
  function CompareValidatorEvaluateIsValid (line 419) | function CompareValidatorEvaluateIsValid(val) {
  function CustomValidatorEvaluateIsValid (line 440) | function CustomValidatorEvaluateIsValid(val) {
  function RegularExpressionValidatorEvaluateIsValid (line 455) | function RegularExpressionValidatorEvaluateIsValid(val) {
  function ValidatorTrim (line 463) | function ValidatorTrim(s) {
  function RequiredFieldValidatorEvaluateIsValid (line 467) | function RequiredFieldValidatorEvaluateIsValid(val) {
  function RangeValidatorEvaluateIsValid (line 470) | function RangeValidatorEvaluateIsValid(val) {
  function ValidationSummaryOnSubmit (line 477) | function ValidationSummaryOnSubmit(validationGroup) {
  function getAttributesWithPrefix (line 569) | function getAttributesWithPrefix(element, prefix) {
  function normalizeKey (line 585) | function normalizeKey(key) {
  function addValidationExpando (line 589) | function addValidationExpando(element) {
  function dispose (line 595) | function dispose(element) {
  function addNormalizedAttribute (line 601) | function addNormalizedAttribute(name, normalizedName) {
  function parseSpecificAttribute (line 604) | function parseSpecificAttribute(selector, attribute, validatorsArray) {
  function parse (line 613) | function parse(selector) {
  function loadValidators (line 618) | function loadValidators() {
  function registerUpdatePanel (line 628) | function registerUpdatePanel() {

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/bootstrap.js
  function transitionEnd (line 48) | function transitionEnd() {
  function removeElement (line 133) | function removeElement() {
  function clearMenus (line 779) | function clearMenus() {
  function getParent (line 790) | function getParent($this) {
  function complete (line 1351) | function complete() {
  function ScrollSpy (line 1619) | function ScrollSpy(element, options) {
  function next (line 1820) | function next() {

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/jquery-1.10.2.js
  function isArraylike (line 997) | function isArraylike( obj ) {
  function Sizzle (line 1197) | function Sizzle( selector, context, results, seed ) {
  function createCache (line 1312) | function createCache() {
  function markFunction (line 1330) | function markFunction( fn ) {
  function assert (line 1339) | function assert( fn ) {
  function addHandle (line 1361) | function addHandle( attrs, handler ) {
  function siblingCheck (line 1376) | function siblingCheck( a, b ) {
  function createInputPseudo (line 1403) | function createInputPseudo( type ) {
  function createButtonPseudo (line 1414) | function createButtonPseudo( type ) {
  function createPositionalPseudo (line 1425) | function createPositionalPseudo( fn ) {
  function setFilters (line 2408) | function setFilters() {}
  function tokenize (line 2412) | function tokenize( selector, parseOnly ) {
  function toSelector (line 2479) | function toSelector( tokens ) {
  function addCombinator (line 2489) | function addCombinator( matcher, combinator, base ) {
  function elementMatcher (line 2539) | function elementMatcher( matchers ) {
  function condense (line 2553) | function condense( unmatched, map, filter, context, xml ) {
  function setMatcher (line 2574) | function setMatcher( preFilter, selector, matcher, postFilter, postFinde...
  function matcherFromTokens (line 2667) | function matcherFromTokens( tokens ) {
  function matcherFromGroupMatchers (line 2722) | function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
  function multipleContexts (line 2850) | function multipleContexts( selector, contexts, results ) {
  function select (line 2859) | function select( selector, context, results, seed ) {
  function createOptions (line 2999) | function createOptions( options ) {
  function internalData (line 3582) | function internalData( elem, name, data, pvt /* Internal Use Only */ ){
  function internalRemoveData (line 3671) | function internalRemoveData( elem, name, pvt ) {
  function dataAttr (line 3868) | function dataAttr( elem, key, data ) {
  function isEmptyDataObject (line 3900) | function isEmptyDataObject( obj ) {
  function returnTrue (line 4726) | function returnTrue() {
  function returnFalse (line 4730) | function returnFalse() {
  function safeActiveElement (line 4734) | function safeActiveElement() {
  function sibling (line 5852) | function sibling( cur, dir ) {
  function winnow (line 5970) | function winnow( elements, qualifier, not ) {
  function createSafeFragment (line 5998) | function createSafeFragment( document ) {
  function manipulationTarget (line 6312) | function manipulationTarget( elem, content ) {
  function disableScript (line 6322) | function disableScript( elem ) {
  function restoreScript (line 6326) | function restoreScript( elem ) {
  function setGlobalEval (line 6337) | function setGlobalEval( elems, refElements ) {
  function cloneCopyEvent (line 6345) | function cloneCopyEvent( src, dest ) {
  function fixCloneNodeIssues (line 6373) | function fixCloneNodeIssues( src, dest ) {
  function getAll (line 6466) | function getAll( context, tag ) {
  function fixDefaultChecked (line 6489) | function fixDefaultChecked( elem ) {
  function vendorPropName (line 6831) | function vendorPropName( style, name ) {
  function isHidden (line 6853) | function isHidden( elem, el ) {
  function showHide (line 6860) | function showHide( elements, show ) {
  function setPositiveNumber (line 7189) | function setPositiveNumber( elem, value, subtract ) {
  function augmentWidthOrHeight (line 7197) | function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
  function getWidthOrHeight (line 7236) | function getWidthOrHeight( elem, name, extra ) {
  function css_defaultDisplay (line 7280) | function css_defaultDisplay( nodeName ) {
  function actualDisplay (line 7312) | function actualDisplay( name, doc ) {
  function buildParams (line 7541) | function buildParams( prefix, obj, traditional, add ) {
  function addToPrefiltersOrTransports (line 7656) | function addToPrefiltersOrTransports( structure ) {
  function inspectPrefiltersOrTransports (line 7688) | function inspectPrefiltersOrTransports( structure, options, originalOpti...
  function ajaxExtend (line 7715) | function ajaxExtend( target, src ) {
  function done (line 8163) | function done( status, nativeStatusText, responses, headers ) {
  function ajaxHandleResponses (line 8310) | function ajaxHandleResponses( s, jqXHR, responses ) {
  function ajaxConvert (line 8365) | function ajaxConvert( s, response, jqXHR, isSuccess ) {
  function createStandardXHR (line 8633) | function createStandardXHR() {
  function createActiveXHR (line 8639) | function createActiveXHR() {
  function createFxNow (line 8885) | function createFxNow() {
  function createTween (line 8892) | function createTween( value, prop, animation ) {
  function Animation (line 8906) | function Animation( elem, properties, options ) {
  function propFilter (line 9010) | function propFilter( props, specialEasing ) {
  function defaultPrefilter (line 9077) | function defaultPrefilter( elem, props, opts ) {
  function Tween (line 9202) | function Tween( elem, options, prop, end, easing ) {
  function genFx (line 9426) | function genFx( type, includeWidth ) {
  function getWindow (line 9722) | function getWindow( elem ) {

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/modernizr-2.6.2.js
  function isEventSupported (line 216) | function isEventSupported( eventName, element ) {
  function setCss (line 312) | function setCss( str ) {
  function setCssAll (line 319) | function setCssAll( str1, str2 ) {
  function is (line 326) | function is( obj, type ) {
  function contains (line 333) | function contains( str, substr ) {
  function testProps (line 357) | function testProps( props, prefixed ) {
  function testDOMProps (line 373) | function testDOMProps( props, obj, elem ) {
  function testPropsAll (line 401) | function testPropsAll( prop, prefixed, elem ) {
  function webforms (line 872) | function webforms() {
  function addStyleSheet (line 1090) | function addStyleSheet(ownerDocument, cssText) {
  function getElements (line 1103) | function getElements() {
  function getExpandoData (line 1114) | function getExpandoData(ownerDocument) {
  function createElement (line 1132) | function createElement(nodeName, ownerDocument, data){
  function createDocumentFragment (line 1168) | function createDocumentFragment(ownerDocument, data){
  function shivMethods (line 1192) | function shivMethods(ownerDocument, data) {
  function shivDocument (line 1230) | function shivDocument(ownerDocument) {

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/respond.js
  function callMedia (line 331) | function callMedia(){

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Web/SignUp.aspx.cs
  class SignUp (line 11) | public partial class SignUp : Page
    method PreloadStaticDataCache (line 16) | public static void PreloadStaticDataCache()
    method Page_Load (line 33) | protected void Page_Load(object sender, EventArgs e)
    method PopulateRoles (line 42) | private void PopulateRoles()
    method PopulateCountries (line 48) | private void PopulateCountries()
    method btnGo_Click (line 54) | protected void btnGo_Click(object sender, EventArgs e)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Web/SignUp.aspx.designer.cs
  class SignUp (line 13) | public partial class SignUp {

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Web/Site.Master.cs
  class SiteMaster (line 10) | public partial class SiteMaster : MasterPage
    method Page_Load (line 12) | protected void Page_Load(object sender, EventArgs e)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Web/Site.Master.designer.cs
  class SiteMaster (line 13) | public partial class SiteMaster {

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Web/Site.Mobile.Master.cs
  class Site_Mobile (line 10) | public partial class Site_Mobile : System.Web.UI.MasterPage
    method Page_Load (line 12) | protected void Page_Load(object sender, EventArgs e)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Web/Site.Mobile.Master.designer.cs
  class Site_Mobile (line 13) | public partial class Site_Mobile {

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Web/ThankYou.aspx.cs
  class ThankYou (line 10) | public partial class ThankYou : System.Web.UI.Page
    method Page_Load (line 12) | protected void Page_Load(object sender, EventArgs e)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Web/ThankYou.aspx.designer.cs
  class ThankYou (line 13) | public partial class ThankYou {

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Web/ViewSwitcher.ascx.cs
  class ViewSwitcher (line 12) | public partial class ViewSwitcher : System.Web.UI.UserControl
    method Page_Load (line 20) | protected void Page_Load(object sender, EventArgs e)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v1-src/ProductLaunch/ProductLaunch.Web/ViewSwitcher.ascx.designer.cs
  class ViewSwitcher (line 13) | public partial class ViewSwitcher {

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Core/Env.cs
  class Env (line 6) | public class Env
    method Get (line 12) | private static string Get(string variable)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.EndToEndTests/ProspectSignUp.feature.cs
  class ProspectSignUpFeature (line 18) | [System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "2....
    method FeatureSetup (line 29) | [Microsoft.VisualStudio.TestTools.UnitTesting.ClassInitializeAttribute()]
    method FeatureTearDown (line 38) | [Microsoft.VisualStudio.TestTools.UnitTesting.ClassCleanupAttribute()]
    method TestInitialize (line 45) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestInitializeAttribute()]
    method ScenarioTearDown (line 55) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestCleanupAttribute()]
    method ScenarioSetup (line 61) | public virtual void ScenarioSetup(TechTalk.SpecFlow.ScenarioInfo scena...
    method ScenarioCleanup (line 66) | public virtual void ScenarioCleanup()
    method SignUpWithValidDetails (line 71) | public virtual void SignUpWithValidDetails(string firstName, string la...
    method SignUpWithValidDetails_Variant0 (line 88) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant1 (line 104) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant2 (line 120) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant3 (line 136) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant4 (line 152) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant5 (line 168) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant6 (line 184) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant7 (line 200) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant8 (line 216) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant9 (line 232) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant10 (line 248) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant11 (line 264) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant12 (line 280) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant13 (line 296) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant14 (line 312) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant15 (line 328) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant16 (line 344) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant17 (line 360) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant18 (line 376) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant19 (line 392) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant20 (line 408) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant21 (line 424) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant22 (line 440) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant23 (line 456) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant24 (line 472) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant25 (line 488) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.EndToEndTests/ProspectSignUpSteps.cs
  class ProspectSignUpSteps (line 11) | [Binding]
    method Setup (line 16) | [BeforeFeature]
    method TearDown (line 22) | [AfterFeature]
    method GivenIBrowseToTheSignUpPageAt (line 29) | [Given(@"I browse to the Sign Up Page at ""(.*)""")]
    method GivenIEnterDetails (line 36) | [Given(@"I enter details '(.*)' '(.*)' '(.*)' '(.*)' '(.*)' '(.*)'")]
    method WhenIPressGo (line 49) | [When(@"I press Go")]
    method ThenIShouldSeeTheThankYouPage (line 56) | [Then(@"I should see the Thank You page")]

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Entities/Country.cs
  class Country (line 3) | public class Country

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Entities/Prospect.cs
  class Prospect (line 3) | public class Prospect

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Entities/Role.cs
  class Role (line 3) | public class Role

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.MessageHandlers.IndexProspect/Config.cs
  class Config (line 6) | public class Config
    method Get (line 12) | private static string Get(string variable)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.MessageHandlers.IndexProspect/Documents/Prospect.cs
  class Prospect (line 5) | public class Prospect

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.MessageHandlers.IndexProspect/Indexer/Index.cs
  class Index (line 7) | public class Index
    method Setup (line 9) | public static void Setup()
    method CreateDocument (line 17) | public static void CreateDocument(Prospect prospect)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.MessageHandlers.IndexProspect/Program.cs
  class Program (line 10) | class Program
    method Main (line 14) | static void Main(string[] args)
    method IndexProspect (line 32) | private static void IndexProspect(object sender, MsgHandlerEventArgs e)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.MessageHandlers.SaveProspect/Program.cs
  class Program (line 11) | class Program
    method Main (line 15) | static void Main(string[] args)
    method SaveProspect (line 30) | private static void SaveProspect(object sender, MsgHandlerEventArgs e)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Messaging/Config.cs
  class Config (line 6) | public class Config
    method Get (line 12) | private static string Get(string variable)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Messaging/MessageHelper.cs
  class MessageHelper (line 7) | public class MessageHelper
    method ToData (line 9) | public static byte[] ToData<TMessage>(TMessage message)
    method FromData (line 16) | public static TMessage FromData<TMessage>(byte[] data)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Messaging/MessageQueue.cs
  class MessageQueue (line 6) | public static class MessageQueue
    method Publish (line 9) | public static void Publish<TMessage>(TMessage message)
    method CreateConnection (line 19) | public static IConnection CreateConnection()

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Messaging/Messages/Events/ProspectSignedUpEvent.cs
  class ProspectSignedUpEvent (line 6) | public class ProspectSignedUpEvent : Message

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Messaging/Messages/Message.cs
  class Message (line 5) | public abstract class Message
    method Message (line 11) | public Message()

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Model.Tests/ProductLaunchContextTest.cs
  class ProductLaunchContextTest (line 7) | [TestClass]
    method Insert (line 10) | [TestMethod]

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Model/Config.cs
  class Config (line 6) | public class Config
    method Get (line 12) | private static string Get(string variable)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Model/Initializers/StaticDataInitializer.cs
  class StaticDataInitializer (line 6) | public class StaticDataInitializer : CreateDatabaseIfNotExists<ProductLa...
    method Seed (line 8) | protected override void Seed(ProductLaunchContext context)
    method AddCountry (line 23) | private void AddCountry(ProductLaunchContext context, string code, str...
    method AddRole (line 32) | private void AddRole(ProductLaunchContext context, string code, string...

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Model/ProductLaunchContext.cs
  class ProductLaunchContext (line 6) | public class ProductLaunchContext : DbContext
    method ProductLaunchContext (line 8) | public ProductLaunchContext() : base(Config.DbConnectionString) { }
    method OnModelCreating (line 16) | protected override void OnModelCreating(DbModelBuilder builder)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Web/About.aspx.cs
  class About (line 10) | public partial class About : Page
    method Page_Load (line 12) | protected void Page_Load(object sender, EventArgs e)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Web/About.aspx.designer.cs
  class About (line 14) | public partial class About

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Web/App_Start/BundleConfig.cs
  class BundleConfig (line 10) | public class BundleConfig
    method RegisterBundles (line 13) | public static void RegisterBundles(BundleCollection bundles)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Web/App_Start/RouteConfig.cs
  class RouteConfig (line 9) | public static class RouteConfig
    method RegisterRoutes (line 11) | public static void RegisterRoutes(RouteCollection routes)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Web/Contact.aspx.cs
  class Contact (line 10) | public partial class Contact : Page
    method Page_Load (line 12) | protected void Page_Load(object sender, EventArgs e)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Web/Contact.aspx.designer.cs
  class Contact (line 14) | public partial class Contact

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Web/Default.aspx.cs
  class _Default (line 8) | public partial class _Default : Page
    method Page_Load (line 10) | protected void Page_Load(object sender, EventArgs e)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Web/Default.aspx.designer.cs
  class _Default (line 14) | public partial class _Default

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Web/Global.asax.cs
  class Global (line 11) | public class Global : HttpApplication
    method Application_Start (line 13) | void Application_Start(object sender, EventArgs e)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/DetailsView.js
  function DetailsView (line 2) | function DetailsView() {
  function DetailsView_createPropertyString (line 12) | function DetailsView_createPropertyString() {
  function DetailsView_setStateValue (line 15) | function DetailsView_setStateValue() {
  function DetailsView_OnCallback (line 18) | function DetailsView_OnCallback (result, context) {
  function DetailsView_getHiddenFieldContents (line 28) | function DetailsView_getHiddenFieldContents(arg) {
  function createPropertyStringFromValues_DetailsView (line 31) | function createPropertyStringFromValues_DetailsView(pageIndex, dataKeys) {

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/Focus.js
  function WebForm_FindFirstFocusableChild (line 2) | function WebForm_FindFirstFocusableChild(control) {
  function WebForm_AutoFocus (line 29) | function WebForm_AutoFocus(focusId) {
  function WebForm_CanFocus (line 55) | function WebForm_CanFocus(element) {
  function WebForm_IsFocusableTag (line 64) | function WebForm_IsFocusableTag(tagName) {
  function WebForm_IsInVisibleContainer (line 71) | function WebForm_IsInVisibleContainer(ctrl) {

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/GridView.js
  function GridView (line 2) | function GridView() {
  function GridView_createPropertyString (line 14) | function GridView_createPropertyString() {
  function GridView_setStateValue (line 17) | function GridView_setStateValue() {
  function GridView_OnCallback (line 20) | function GridView_OnCallback (result, context) {
  function GridView_getHiddenFieldContents (line 30) | function GridView_getHiddenFieldContents(arg) {
  function createPropertyStringFromValues_GridView (line 33) | function createPropertyStringFromValues_GridView(pageIndex, sortDirectio...

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/MSAjax/MicrosoftAjax.js
  function Sys$Enum$parse (line 6) | function Sys$Enum$parse(c,e){var a,b,i;if(e){a=this.__lowerCaseValues;if...
  function Sys$Enum$toString (line 6) | function Sys$Enum$toString(c){if(typeof c==="undefined"||c===null)return...
  function d (line 6) | function d(a){if(a<10)return "0"+a;return a.toString()}
  function m (line 6) | function m(a){if(a<10)return "00"+a;if(a<100)return "0"+a;return a.toStr...
  function v (line 6) | function v(a){if(a<10)return "000"+a;else if(a<100)return "00"+a;else if...
  function s (line 6) | function s(){if(h||p)return h;h=t.test(e);p=true;return h}
  function g (line 6) | function g(a,b){if(f)return f[b];switch(b){case 0:return a.getFullYear()...
  function g (line 6) | function g(a,c,d){for(var b=a.length;b<c;b++)a=d?"0"+a:a+"0";return a}
  function i (line 6) | function i(j,i,l,n,p){var h=l[0],k=1,o=Math.pow(10,i),m=Math.round(j*o)/...
  function Sys$Component$_setProperties (line 6) | function Sys$Component$_setProperties(a,i){var d,j=Object.getType(a),e=j...
  function Sys$Component$_setReferences (line 6) | function Sys$Component$_setReferences(c,b){for(var a in b){var e=c["set_...
  function b (line 6) | function b(){f.initialize()}
  function v (line 6) | function v(){if(f===null)return;f=null;h=new Sys.Net.WebServiceError(tru...
  function t (line 6) | function t(d,e){if(f!==null){window.clearTimeout(f);f=null}k.dispose();d...
  function x (line 6) | function x(d){if(d.get_responseAvailable()){var f=d.get_statusCode(),c=n...

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/MSAjax/MicrosoftAjaxComponentModel.js
  function Sys$Component$_setProperties (line 6) | function Sys$Component$_setProperties(a,i){var d,j=Object.getType(a),e=j...
  function Sys$Component$_setReferences (line 6) | function Sys$Component$_setReferences(c,b){for(var a in b){var e=c["set_...
  function b (line 6) | function b(){f.initialize()}

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/MSAjax/MicrosoftAjaxCore.js
  function Sys$Enum$parse (line 6) | function Sys$Enum$parse(c,e){var a,b,i;if(e){a=this.__lowerCaseValues;if...
  function Sys$Enum$toString (line 6) | function Sys$Enum$toString(c){if(typeof c==="undefined"||c===null)return...

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/MSAjax/MicrosoftAjaxGlobalization.js
  function d (line 6) | function d(a){if(a<10)return "0"+a;return a.toString()}
  function m (line 6) | function m(a){if(a<10)return "00"+a;if(a<100)return "0"+a;return a.toStr...
  function v (line 6) | function v(a){if(a<10)return "000"+a;else if(a<100)return "00"+a;else if...
  function s (line 6) | function s(){if(h||p)return h;h=t.test(e);p=true;return h}
  function g (line 6) | function g(a,b){if(f)return f[b];switch(b){case 0:return a.getFullYear()...
  function g (line 6) | function g(a,c,d){for(var b=a.length;b<c;b++)a=d?"0"+a:a+"0";return a}
  function i (line 6) | function i(j,i,l,n,p){var h=l[0],k=1,o=Math.pow(10,i),m=Math.round(j*o)/...

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/MSAjax/MicrosoftAjaxWebForms.js
  function i (line 6) | function i(b){b=b?b.toString():"";return m.test(b)&&b.indexOf("'"+a+"'")...
  function B (line 6) | function B(a){a.cancelBubble=true}

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/MSAjax/MicrosoftAjaxWebServices.js
  function v (line 6) | function v(){if(f===null)return;f=null;h=new Sys.Net.WebServiceError(tru...
  function t (line 6) | function t(d,e){if(f!==null){window.clearTimeout(f);f=null}k.dispose();d...
  function x (line 6) | function x(d){if(d.get_responseAvailable()){var f=d.get_statusCode(),c=n...

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/Menu.js
  function Menu_ClearInterval (line 6) | function Menu_ClearInterval() {
  function Menu_Collapse (line 11) | function Menu_Collapse(item) {
  function Menu_Expand (line 20) | function Menu_Expand(item, horizontalOffset, verticalOffset, hideScrolle...
  function Menu_FindMenu (line 52) | function Menu_FindMenu(item) {
  function Menu_FindNext (line 69) | function Menu_FindNext(item) {
  function Menu_FindParentContainer (line 95) | function Menu_FindParentContainer(item) {
  function Menu_FindParentItem (line 110) | function Menu_FindParentItem(item) {
  function Menu_FindPrevious (line 120) | function Menu_FindPrevious(item) {
  function Menu_FindSubMenu (line 140) | function Menu_FindSubMenu(item) {
  function Menu_Focus (line 147) | function Menu_Focus(item) {
  function Menu_GetData (line 168) | function Menu_GetData(item) {
  function Menu_HideItems (line 179) | function Menu_HideItems(items) {
  function Menu_HoverDisabled (line 240) | function Menu_HoverDisabled(item) {
  function Menu_HoverDynamic (line 252) | function Menu_HoverDynamic(item) {
  function Menu_HoverRoot (line 273) | function Menu_HoverRoot(item) {
  function Menu_HoverStatic (line 293) | function Menu_HoverStatic(item) {
  function Menu_IsHorizontal (line 300) | function Menu_IsHorizontal(item) {
  function Menu_IsSelectable (line 313) | function Menu_IsSelectable(link) {
  function Menu_Key (line 316) | function Menu_Key(item) {
  function Menu_ResetSiblings (line 439) | function Menu_ResetSiblings(item) {
  function Menu_ResetTopMenus (line 475) | function Menu_ResetTopMenus(table, doNotReset, level, up) {
  function Menu_RestoreInterval (line 516) | function Menu_RestoreInterval() {
  function Menu_SetRoot (line 522) | function Menu_SetRoot(item) {
  function Menu_Unhover (line 531) | function Menu_Unhover(item) {
  function PopOut_Clip (line 545) | function PopOut_Clip(element, y, height) {
  function PopOut_Down (line 551) | function PopOut_Down(scroller) {
  function PopOut_Hide (line 571) | function PopOut_Hide(panelId) {
  function PopOut_HideScrollers (line 592) | function PopOut_HideScrollers(panel) {
  function PopOut_Position (line 606) | function PopOut_Position(panel, hideScrollers) {
  function PopOut_Scroll (line 761) | function PopOut_Scroll(panel, offsetDelta) {
  function PopOut_SetPanelHeight (line 769) | function PopOut_SetPanelHeight(element, height, doNotClip) {
  function PopOut_Show (line 783) | function PopOut_Show(panelId, hideScrollers, data) {
  function PopOut_ShowScrollers (line 835) | function PopOut_ShowScrollers(panel) {
  function PopOut_Stop (line 876) | function PopOut_Stop() {
  function PopOut_Up (line 882) | function PopOut_Up(scroller) {

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/TreeView.js
  function TreeView_HoverNode (line 2) | function TreeView_HoverNode(data, node) {
  function TreeView_GetNodeText (line 17) | function TreeView_GetNodeText(node) {
  function TreeView_PopulateNode (line 31) | function TreeView_PopulateNode(data, index, node, selectNode, selectImag...
  function TreeView_ProcessNodeData (line 61) | function TreeView_ProcessNodeData(result, context) {
  function TreeView_SelectNode (line 139) | function TreeView_SelectNode(data, node, nodeId) {
  function TreeView_ToggleNode (line 159) | function TreeView_ToggleNode(data, index, node, lineType, children) {
  function TreeView_UnhoverNode (line 208) | function TreeView_UnhoverNode(node) {

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/WebForms.js
  function WebForm_PostBackOptions (line 2) | function WebForm_PostBackOptions(eventTarget, eventArgument, validation,...
  function WebForm_DoPostBackWithOptions (line 11) | function WebForm_DoPostBackWithOptions(options) {
  function WebForm_DoCallback (line 48) | function WebForm_DoCallback(eventTarget, eventArgument, eventCallback, c...
  function WebForm_CallbackComplete (line 176) | function WebForm_CallbackComplete() {
  function WebForm_ExecuteCallback (line 193) | function WebForm_ExecuteCallback(callbackObject) {
  function WebForm_FillFirstAvailableSlot (line 228) | function WebForm_FillFirstAvailableSlot(array, element) {
  function WebForm_InitCallback (line 240) | function WebForm_InitCallback() {
  function WebForm_InitCallbackAddField (line 268) | function WebForm_InitCallbackAddField(name, value) {
  function WebForm_EncodeCallback (line 275) | function WebForm_EncodeCallback(parameter) {
  function WebForm_ReEnableControls (line 284) | function WebForm_ReEnableControls() {
  function WebForm_ReDisableControls (line 305) | function WebForm_ReDisableControls() {
  function WebForm_SimulateClick (line 310) | function WebForm_SimulateClick(element, event) {
  function WebForm_FireDefaultButton (line 330) | function WebForm_FireDefaultButton(event, target) {
  function WebForm_GetScrollX (line 354) | function WebForm_GetScrollX() {
  function WebForm_GetScrollY (line 368) | function WebForm_GetScrollY() {
  function WebForm_SaveScrollPositionSubmit (line 382) | function WebForm_SaveScrollPositionSubmit() {
  function WebForm_SaveScrollPositionOnSubmit (line 396) | function WebForm_SaveScrollPositionOnSubmit() {
  function WebForm_RestoreScrollPosition (line 404) | function WebForm_RestoreScrollPosition() {
  function WebForm_TextBoxKeyHandler (line 416) | function WebForm_TextBoxKeyHandler(event) {
  function WebForm_TrimString (line 436) | function WebForm_TrimString(value) {
  function WebForm_AppendToClassName (line 439) | function WebForm_AppendToClassName(element, className) {
  function WebForm_RemoveClassName (line 447) | function WebForm_RemoveClassName(element, className) {
  function WebForm_GetElementById (line 456) | function WebForm_GetElementById(elementId) {
  function WebForm_GetElementByTagName (line 465) | function WebForm_GetElementByTagName(element, tagName) {
  function WebForm_GetElementsByTagName (line 472) | function WebForm_GetElementsByTagName(element, tagName) {
  function WebForm_GetElementDir (line 483) | function WebForm_GetElementDir(element) {
  function WebForm_GetElementPosition (line 492) | function WebForm_GetElementPosition(element) {
  function WebForm_GetParentByTagName (line 540) | function WebForm_GetParentByTagName(element, tagName) {
  function WebForm_SetElementHeight (line 548) | function WebForm_SetElementHeight(element, height) {
  function WebForm_SetElementWidth (line 553) | function WebForm_SetElementWidth(element, width) {
  function WebForm_SetElementX (line 558) | function WebForm_SetElementX(element, x) {
  function WebForm_SetElementY (line 563) | function WebForm_SetElementY(element, y) {

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/WebParts.js
  function Point (line 3) | function Point(x, y) {
  function __wpTranslateOffset (line 7) | function __wpTranslateOffset(x, y, offsetElement, relativeToElement, inc...
  function __wpGetPageEventLocation (line 24) | function __wpGetPageEventLocation(event, includeScroll) {
  function __wpClearSelection (line 30) | function __wpClearSelection() {
  function WebPart (line 33) | function WebPart(webPartElement, webPartTitleElement, zone, zoneIndex, a...
  function WebPart_Dispose (line 51) | function WebPart_Dispose() {
  function WebPart_OnMouseDown (line 54) | function WebPart_OnMouseDown() {
  function WebPart_OnDragStart (line 72) | function WebPart_OnDragStart() {
  function WebPart_OnDrag (line 83) | function WebPart_OnDrag() {
  function WebPart_OnDragEnd (line 86) | function WebPart_OnDragEnd() {
  function WebPart_GetParentWebPartElement (line 89) | function WebPart_GetParentWebPartElement(containedElement) {
  function WebPart_UpdatePosition (line 99) | function WebPart_UpdatePosition() {
  function Zone (line 104) | function Zone(zoneElement, zoneIndex, uniqueID, isVertical, allowLayoutC...
  function Zone_Dispose (line 152) | function Zone_Dispose() {
  function Zone_OnDragEnter (line 158) | function Zone_OnDragEnter() {
  function Zone_OnDragOver (line 166) | function Zone_OnDragOver() {
  function Zone_OnDrop (line 174) | function Zone_OnDrop() {
  function Zone_GetParentZoneElement (line 182) | function Zone_GetParentZoneElement(containedElement) {
  function Zone_AddWebPart (line 192) | function Zone_AddWebPart(webPartElement, webPartTitleElement, allowZoneC...
  function Zone_ToggleDropCues (line 204) | function Zone_ToggleDropCues(show, index, ignoreOutline) {
  function Zone_GetWebPartIndex (line 231) | function Zone_GetWebPartIndex(location) {
  function Zone_UpdatePosition (line 256) | function Zone_UpdatePosition() {
  function WebPartDragState (line 266) | function WebPartDragState(webPartElement, effect) {
  function WebPartMenu (line 273) | function WebPartMenu(menuLabelElement, menuDropDownElement, menuElement) {
  function WebPartMenu_Dispose (line 302) | function WebPartMenu_Dispose() {
  function WebPartMenu_Show (line 307) | function WebPartMenu_Show() {
  function WebPartMenu_Hide (line 341) | function WebPartMenu_Hide() {
  function WebPartMenu_Hover (line 350) | function WebPartMenu_Hover() {
  function WebPartMenu_Unhover (line 358) | function WebPartMenu_Unhover() {
  function WebPartMenu_OnClick (line 367) | function WebPartMenu_OnClick() {
  function WebPartMenu_OnKeyPress (line 375) | function WebPartMenu_OnKeyPress() {
  function WebPartMenu_OnMouseEnter (line 385) | function WebPartMenu_OnMouseEnter() {
  function WebPartMenu_OnMouseLeave (line 391) | function WebPartMenu_OnMouseLeave() {
  function WebPartManager (line 397) | function WebPartManager() {
  function WebPartManager_Dispose (line 419) | function WebPartManager_Dispose() {
  function WebPartManager_AddZone (line 425) | function WebPartManager_AddZone(zoneElement, uniqueID, isVertical, allow...
  function WebPartManager_IsDragDropEnabled (line 431) | function WebPartManager_IsDragDropEnabled() {
  function WebPartManager_DragDrop (line 434) | function WebPartManager_DragDrop() {
  function WebPartManager_InitiateWebPartDragDrop (line 442) | function WebPartManager_InitiateWebPartDragDrop(webPartElement) {
  function WebPartManager_CompleteWebPartDragDrop (line 468) | function WebPartManager_CompleteWebPartDragDrop() {
  function WebPartManager_ContinueWebPartDragDrop (line 492) | function WebPartManager_ContinueWebPartDragDrop() {
  function WebPartManager_Execute (line 501) | function WebPartManager_Execute(script) {
  function WebPartManager_ProcessWebPartDragEnter (line 508) | function WebPartManager_ProcessWebPartDragEnter() {
  function WebPartManager_ProcessWebPartDragOver (line 550) | function WebPartManager_ProcessWebPartDragOver() {
  function WebPartManager_ProcessWebPartDrop (line 594) | function WebPartManager_ProcessWebPartDrop() {
  function WebPartManager_ShowHelp (line 609) | function WebPartManager_ShowHelp(helpUrl, helpMode) {
  function WebPartManager_ExportWebPart (line 626) | function WebPartManager_ExportWebPart(exportUrl, warn, confirmOnly) {
  function WebPartManager_UpdatePositions (line 637) | function WebPartManager_UpdatePositions() {
  function WebPartManager_SubmitPage (line 642) | function WebPartManager_SubmitPage(eventTarget, eventArgument) {

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/WebUIValidation.js
  function ValidatorUpdateDisplay (line 7) | function ValidatorUpdateDisplay(val) {
  function ValidatorUpdateIsValid (line 23) | function ValidatorUpdateIsValid() {
  function AllValidatorsValid (line 26) | function AllValidatorsValid(validators) {
  function ValidatorHookupControlID (line 37) | function ValidatorHookupControlID(controlID, val) {
  function ValidatorHookupControl (line 50) | function ValidatorHookupControl(control, val) {
  function ValidatorHookupEvent (line 82) | function ValidatorHookupEvent(control, eventType, functionPrefix) {
  function ValidatorGetValue (line 93) | function ValidatorGetValue(id) {
  function ValidatorGetValueRecursive (line 101) | function ValidatorGetValueRecursive(control)
  function Page_ClientValidate (line 113) | function Page_ClientValidate(validationGroup) {
  function ValidatorCommonOnSubmit (line 127) | function ValidatorCommonOnSubmit() {
  function ValidatorEnable (line 136) | function ValidatorEnable(val, enable) {
  function ValidatorOnChange (line 141) | function ValidatorOnChange(event) {
  function ValidatedTextBoxOnKeyPress (line 168) | function ValidatedTextBoxOnKeyPress(event) {
  function ValidatedControlOnBlur (line 183) | function ValidatedControlOnBlur(event) {
  function ValidatorValidate (line 197) | function ValidatorValidate(val, validationGroup, event) {
  function ValidatorSetFocus (line 210) | function ValidatorSetFocus(val, event) {
  function IsInVisibleContainer (line 251) | function IsInVisibleContainer(ctrl) {
  function IsValidationGroupMatch (line 266) | function IsValidationGroupMatch(control, validationGroup) {
  function ValidatorOnLoad (line 276) | function ValidatorOnLoad() {
  function ValidatorConvert (line 308) | function ValidatorConvert(op, dataType, val) {
  function ValidatorCompare (line 395) | function ValidatorCompare(operand1, operand2, operator, val) {
  function CompareValidatorEvaluateIsValid (line 419) | function CompareValidatorEvaluateIsValid(val) {
  function CustomValidatorEvaluateIsValid (line 440) | function CustomValidatorEvaluateIsValid(val) {
  function RegularExpressionValidatorEvaluateIsValid (line 455) | function RegularExpressionValidatorEvaluateIsValid(val) {
  function ValidatorTrim (line 463) | function ValidatorTrim(s) {
  function RequiredFieldValidatorEvaluateIsValid (line 467) | function RequiredFieldValidatorEvaluateIsValid(val) {
  function RangeValidatorEvaluateIsValid (line 470) | function RangeValidatorEvaluateIsValid(val) {
  function ValidationSummaryOnSubmit (line 477) | function ValidationSummaryOnSubmit(validationGroup) {
  function getAttributesWithPrefix (line 569) | function getAttributesWithPrefix(element, prefix) {
  function normalizeKey (line 585) | function normalizeKey(key) {
  function addValidationExpando (line 589) | function addValidationExpando(element) {
  function dispose (line 595) | function dispose(element) {
  function addNormalizedAttribute (line 601) | function addNormalizedAttribute(name, normalizedName) {
  function parseSpecificAttribute (line 604) | function parseSpecificAttribute(selector, attribute, validatorsArray) {
  function parse (line 613) | function parse(selector) {
  function loadValidators (line 618) | function loadValidators() {
  function registerUpdatePanel (line 628) | function registerUpdatePanel() {

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Web/Scripts/bootstrap.js
  function transitionEnd (line 48) | function transitionEnd() {
  function removeElement (line 133) | function removeElement() {
  function clearMenus (line 779) | function clearMenus() {
  function getParent (line 790) | function getParent($this) {
  function complete (line 1351) | function complete() {
  function ScrollSpy (line 1619) | function ScrollSpy(element, options) {
  function next (line 1820) | function next() {

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Web/Scripts/jquery-1.10.2.js
  function isArraylike (line 997) | function isArraylike( obj ) {
  function Sizzle (line 1197) | function Sizzle( selector, context, results, seed ) {
  function createCache (line 1312) | function createCache() {
  function markFunction (line 1330) | function markFunction( fn ) {
  function assert (line 1339) | function assert( fn ) {
  function addHandle (line 1361) | function addHandle( attrs, handler ) {
  function siblingCheck (line 1376) | function siblingCheck( a, b ) {
  function createInputPseudo (line 1403) | function createInputPseudo( type ) {
  function createButtonPseudo (line 1414) | function createButtonPseudo( type ) {
  function createPositionalPseudo (line 1425) | function createPositionalPseudo( fn ) {
  function setFilters (line 2408) | function setFilters() {}
  function tokenize (line 2412) | function tokenize( selector, parseOnly ) {
  function toSelector (line 2479) | function toSelector( tokens ) {
  function addCombinator (line 2489) | function addCombinator( matcher, combinator, base ) {
  function elementMatcher (line 2539) | function elementMatcher( matchers ) {
  function condense (line 2553) | function condense( unmatched, map, filter, context, xml ) {
  function setMatcher (line 2574) | function setMatcher( preFilter, selector, matcher, postFilter, postFinde...
  function matcherFromTokens (line 2667) | function matcherFromTokens( tokens ) {
  function matcherFromGroupMatchers (line 2722) | function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
  function multipleContexts (line 2850) | function multipleContexts( selector, contexts, results ) {
  function select (line 2859) | function select( selector, context, results, seed ) {
  function createOptions (line 2999) | function createOptions( options ) {
  function internalData (line 3582) | function internalData( elem, name, data, pvt /* Internal Use Only */ ){
  function internalRemoveData (line 3671) | function internalRemoveData( elem, name, pvt ) {
  function dataAttr (line 3868) | function dataAttr( elem, key, data ) {
  function isEmptyDataObject (line 3900) | function isEmptyDataObject( obj ) {
  function returnTrue (line 4726) | function returnTrue() {
  function returnFalse (line 4730) | function returnFalse() {
  function safeActiveElement (line 4734) | function safeActiveElement() {
  function sibling (line 5852) | function sibling( cur, dir ) {
  function winnow (line 5970) | function winnow( elements, qualifier, not ) {
  function createSafeFragment (line 5998) | function createSafeFragment( document ) {
  function manipulationTarget (line 6312) | function manipulationTarget( elem, content ) {
  function disableScript (line 6322) | function disableScript( elem ) {
  function restoreScript (line 6326) | function restoreScript( elem ) {
  function setGlobalEval (line 6337) | function setGlobalEval( elems, refElements ) {
  function cloneCopyEvent (line 6345) | function cloneCopyEvent( src, dest ) {
  function fixCloneNodeIssues (line 6373) | function fixCloneNodeIssues( src, dest ) {
  function getAll (line 6466) | function getAll( context, tag ) {
  function fixDefaultChecked (line 6489) | function fixDefaultChecked( elem ) {
  function vendorPropName (line 6831) | function vendorPropName( style, name ) {
  function isHidden (line 6853) | function isHidden( elem, el ) {
  function showHide (line 6860) | function showHide( elements, show ) {
  function setPositiveNumber (line 7189) | function setPositiveNumber( elem, value, subtract ) {
  function augmentWidthOrHeight (line 7197) | function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
  function getWidthOrHeight (line 7236) | function getWidthOrHeight( elem, name, extra ) {
  function css_defaultDisplay (line 7280) | function css_defaultDisplay( nodeName ) {
  function actualDisplay (line 7312) | function actualDisplay( name, doc ) {
  function buildParams (line 7541) | function buildParams( prefix, obj, traditional, add ) {
  function addToPrefiltersOrTransports (line 7656) | function addToPrefiltersOrTransports( structure ) {
  function inspectPrefiltersOrTransports (line 7688) | function inspectPrefiltersOrTransports( structure, options, originalOpti...
  function ajaxExtend (line 7715) | function ajaxExtend( target, src ) {
  function done (line 8163) | function done( status, nativeStatusText, responses, headers ) {
  function ajaxHandleResponses (line 8310) | function ajaxHandleResponses( s, jqXHR, responses ) {
  function ajaxConvert (line 8365) | function ajaxConvert( s, response, jqXHR, isSuccess ) {
  function createStandardXHR (line 8633) | function createStandardXHR() {
  function createActiveXHR (line 8639) | function createActiveXHR() {
  function createFxNow (line 8885) | function createFxNow() {
  function createTween (line 8892) | function createTween( value, prop, animation ) {
  function Animation (line 8906) | function Animation( elem, properties, options ) {
  function propFilter (line 9010) | function propFilter( props, specialEasing ) {
  function defaultPrefilter (line 9077) | function defaultPrefilter( elem, props, opts ) {
  function Tween (line 9202) | function Tween( elem, options, prop, end, easing ) {
  function genFx (line 9426) | function genFx( type, includeWidth ) {
  function getWindow (line 9722) | function getWindow( elem ) {

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Web/Scripts/modernizr-2.6.2.js
  function isEventSupported (line 216) | function isEventSupported( eventName, element ) {
  function setCss (line 312) | function setCss( str ) {
  function setCssAll (line 319) | function setCssAll( str1, str2 ) {
  function is (line 326) | function is( obj, type ) {
  function contains (line 333) | function contains( str, substr ) {
  function testProps (line 357) | function testProps( props, prefixed ) {
  function testDOMProps (line 373) | function testDOMProps( props, obj, elem ) {
  function testPropsAll (line 401) | function testPropsAll( prop, prefixed, elem ) {
  function webforms (line 872) | function webforms() {
  function addStyleSheet (line 1090) | function addStyleSheet(ownerDocument, cssText) {
  function getElements (line 1103) | function getElements() {
  function getExpandoData (line 1114) | function getExpandoData(ownerDocument) {
  function createElement (line 1132) | function createElement(nodeName, ownerDocument, data){
  function createDocumentFragment (line 1168) | function createDocumentFragment(ownerDocument, data){
  function shivMethods (line 1192) | function shivMethods(ownerDocument, data) {
  function shivDocument (line 1230) | function shivDocument(ownerDocument) {

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Web/Scripts/respond.js
  function callMedia (line 331) | function callMedia(){

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Web/SignUp.aspx.cs
  class SignUp (line 13) | public partial class SignUp : Page
    method PreloadStaticDataCache (line 18) | public static void PreloadStaticDataCache()
    method Page_Load (line 35) | protected void Page_Load(object sender, EventArgs e)
    method PopulateRoles (line 44) | private void PopulateRoles()
    method PopulateCountries (line 50) | private void PopulateCountries()
    method btnGo_Click (line 56) | protected void btnGo_Click(object sender, EventArgs e)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Web/SignUp.aspx.designer.cs
  class SignUp (line 13) | public partial class SignUp {

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Web/Site.Master.cs
  class SiteMaster (line 10) | public partial class SiteMaster : MasterPage
    method Page_Load (line 12) | protected void Page_Load(object sender, EventArgs e)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Web/Site.Master.designer.cs
  class SiteMaster (line 13) | public partial class SiteMaster {

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Web/Site.Mobile.Master.cs
  class Site_Mobile (line 10) | public partial class Site_Mobile : System.Web.UI.MasterPage
    method Page_Load (line 12) | protected void Page_Load(object sender, EventArgs e)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Web/Site.Mobile.Master.designer.cs
  class Site_Mobile (line 13) | public partial class Site_Mobile {

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Web/ThankYou.aspx.cs
  class ThankYou (line 10) | public partial class ThankYou : System.Web.UI.Page
    method Page_Load (line 12) | protected void Page_Load(object sender, EventArgs e)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Web/ThankYou.aspx.designer.cs
  class ThankYou (line 13) | public partial class ThankYou {

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Web/ViewSwitcher.ascx.cs
  class ViewSwitcher (line 12) | public partial class ViewSwitcher : System.Web.UI.UserControl
    method Page_Load (line 20) | protected void Page_Load(object sender, EventArgs e)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v2-src/ProductLaunch/ProductLaunch.Web/ViewSwitcher.ascx.designer.cs
  class ViewSwitcher (line 13) | public partial class ViewSwitcher {

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v3-src/ProductLaunch/ProductLaunch.Core/Env.cs
  class Env (line 6) | public class Env
    method Get (line 12) | private static string Get(string variable)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v3-src/ProductLaunch/ProductLaunch.EndToEndTests/ProspectSignUp.feature.cs
  class ProspectSignUpFeature (line 18) | [System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "2....
    method FeatureSetup (line 29) | [Microsoft.VisualStudio.TestTools.UnitTesting.ClassInitializeAttribute()]
    method FeatureTearDown (line 38) | [Microsoft.VisualStudio.TestTools.UnitTesting.ClassCleanupAttribute()]
    method TestInitialize (line 45) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestInitializeAttribute()]
    method ScenarioTearDown (line 55) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestCleanupAttribute()]
    method ScenarioSetup (line 61) | public virtual void ScenarioSetup(TechTalk.SpecFlow.ScenarioInfo scena...
    method ScenarioCleanup (line 66) | public virtual void ScenarioCleanup()
    method SignUpWithValidDetails (line 71) | public virtual void SignUpWithValidDetails(string firstName, string la...
    method SignUpWithValidDetails_Variant0 (line 88) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant1 (line 104) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant2 (line 120) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant3 (line 136) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant4 (line 152) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant5 (line 168) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant6 (line 184) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant7 (line 200) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant8 (line 216) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant9 (line 232) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant10 (line 248) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant11 (line 264) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant12 (line 280) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant13 (line 296) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant14 (line 312) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant15 (line 328) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant16 (line 344) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant17 (line 360) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant18 (line 376) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant19 (line 392) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant20 (line 408) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant21 (line 424) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant22 (line 440) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant23 (line 456) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant24 (line 472) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
    method SignUpWithValidDetails_Variant25 (line 488) | [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v3-src/ProductLaunch/ProductLaunch.EndToEndTests/ProspectSignUpSteps.cs
  class ProspectSignUpSteps (line 11) | [Binding]
    method Setup (line 16) | [BeforeFeature]
    method TearDown (line 22) | [AfterFeature]
    method GivenIBrowseToTheSignUpPageAt (line 29) | [Given(@"I browse to the Sign Up Page at ""(.*)""")]
    method GivenIEnterDetails (line 36) | [Given(@"I enter details '(.*)' '(.*)' '(.*)' '(.*)' '(.*)' '(.*)'")]
    method WhenIPressGo (line 49) | [When(@"I press Go")]
    method ThenIShouldSeeTheThankYouPage (line 56) | [Then(@"I should see the Thank You page")]

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v3-src/ProductLaunch/ProductLaunch.Entities/Country.cs
  class Country (line 3) | public class Country

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v3-src/ProductLaunch/ProductLaunch.Entities/Prospect.cs
  class Prospect (line 3) | public class Prospect

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v3-src/ProductLaunch/ProductLaunch.Entities/Role.cs
  class Role (line 3) | public class Role

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v3-src/ProductLaunch/ProductLaunch.MessageHandlers.IndexProspect/Config.cs
  class Config (line 6) | public class Config
    method Get (line 12) | private static string Get(string variable)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v3-src/ProductLaunch/ProductLaunch.MessageHandlers.IndexProspect/Documents/Prospect.cs
  class Prospect (line 5) | public class Prospect

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v3-src/ProductLaunch/ProductLaunch.MessageHandlers.IndexProspect/Indexer/Index.cs
  class Index (line 7) | public class Index
    method Setup (line 9) | public static void Setup()
    method CreateDocument (line 17) | public static void CreateDocument(Prospect prospect)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v3-src/ProductLaunch/ProductLaunch.MessageHandlers.IndexProspect/Program.cs
  class Program (line 10) | class Program
    method Main (line 14) | static void Main(string[] args)
    method IndexProspect (line 32) | private static void IndexProspect(object sender, MsgHandlerEventArgs e)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v3-src/ProductLaunch/ProductLaunch.MessageHandlers.SaveProspect/Program.cs
  class Program (line 11) | class Program
    method Main (line 15) | static void Main(string[] args)
    method SaveProspect (line 30) | private static void SaveProspect(object sender, MsgHandlerEventArgs e)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v3-src/ProductLaunch/ProductLaunch.Messaging/Config.cs
  class Config (line 6) | public class Config
    method Get (line 12) | private static string Get(string variable)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v3-src/ProductLaunch/ProductLaunch.Messaging/MessageHelper.cs
  class MessageHelper (line 7) | public class MessageHelper
    method ToData (line 9) | public static byte[] ToData<TMessage>(TMessage message)
    method FromData (line 16) | public static TMessage FromData<TMessage>(byte[] data)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v3-src/ProductLaunch/ProductLaunch.Messaging/MessageQueue.cs
  class MessageQueue (line 6) | public static class MessageQueue
    method Publish (line 9) | public static void Publish<TMessage>(TMessage message)
    method CreateConnection (line 19) | public static IConnection CreateConnection()

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v3-src/ProductLaunch/ProductLaunch.Messaging/Messages/Events/ProspectSignedUpEvent.cs
  class ProspectSignedUpEvent (line 6) | public class ProspectSignedUpEvent : Message

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v3-src/ProductLaunch/ProductLaunch.Messaging/Messages/Message.cs
  class Message (line 5) | public abstract class Message
    method Message (line 11) | public Message()

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v3-src/ProductLaunch/ProductLaunch.Model.Tests/ProductLaunchContextTest.cs
  class ProductLaunchContextTest (line 7) | [TestClass]
    method Insert (line 10) | [TestMethod]

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v3-src/ProductLaunch/ProductLaunch.Model/Config.cs
  class Config (line 6) | public class Config
    method Get (line 12) | private static string Get(string variable)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v3-src/ProductLaunch/ProductLaunch.Model/Initializers/StaticDataInitializer.cs
  class StaticDataInitializer (line 6) | public class StaticDataInitializer : CreateDatabaseIfNotExists<ProductLa...
    method Seed (line 8) | protected override void Seed(ProductLaunchContext context)
    method AddCountry (line 23) | private void AddCountry(ProductLaunchContext context, string code, str...
    method AddRole (line 32) | private void AddRole(ProductLaunchContext context, string code, string...

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v3-src/ProductLaunch/ProductLaunch.Model/ProductLaunchContext.cs
  class ProductLaunchContext (line 6) | public class ProductLaunchContext : DbContext
    method ProductLaunchContext (line 8) | public ProductLaunchContext() : base(Config.DbConnectionString) { }
    method OnModelCreating (line 16) | protected override void OnModelCreating(DbModelBuilder builder)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v3-src/ProductLaunch/ProductLaunch.Web/About.aspx.cs
  class About (line 10) | public partial class About : Page
    method Page_Load (line 12) | protected void Page_Load(object sender, EventArgs e)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v3-src/ProductLaunch/ProductLaunch.Web/About.aspx.designer.cs
  class About (line 14) | public partial class About

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v3-src/ProductLaunch/ProductLaunch.Web/App_Start/BundleConfig.cs
  class BundleConfig (line 10) | public class BundleConfig
    method RegisterBundles (line 13) | public static void RegisterBundles(BundleCollection bundles)

FILE: Docker/additional-ressources/windows/modernize-traditional-apps/modernize-aspnet/v3-src/ProductLaunch/ProductLaunch.Web/App_Start/RouteConfig.cs
  class RouteConfig (line 9) | public static class RouteConfig
    method RegisterRoutes (line 11) | public static vo
Copy disabled (too large) Download .json
Condensed preview — 2190 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (25,703K chars).
[
  {
    "path": ".gitmodules",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "CNAME",
    "chars": 20,
    "preview": "training.56kcloud.io"
  },
  {
    "path": "Cloud/README.md",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "DevOps/README.md",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "DevOpsDays/readme.md",
    "chars": 623,
    "preview": "## DevOpsDays Docker Training\n\n<img src=\"https://raw.githubusercontent.com/56kcloud/Training/master/img/56k.jpg\" alt=\"56"
  },
  {
    "path": "Docker/12factor/00_application.md",
    "chars": 1787,
    "preview": "# Build the application\n\nTo illustrate the 12 factors, we start by creating a simple Node.js application as a HTTP Rest "
  },
  {
    "path": "Docker/12factor/01_codebase.md",
    "chars": 905,
    "preview": "# 1 - Codebase\n\n**one application <=> one codebase**\n\nIf there are several codebase, it's not an application, it's a dis"
  },
  {
    "path": "Docker/12factor/02_dependencies.md",
    "chars": 1871,
    "preview": "# 2 - Dependencies\n\nApplication's dependencies must be declared and isolated\n\n## What does that mean for our application"
  },
  {
    "path": "Docker/12factor/03_configuration.md",
    "chars": 769,
    "preview": "# 3 - Configuration\n\nConfiguration (credentials, database connection string, ...) should be stored in the environment.\n\n"
  },
  {
    "path": "Docker/12factor/04_external_services.md",
    "chars": 793,
    "preview": "# 4 - External services\n\nHandle external services as external resources of the application.\n\nExamples:\n* database\n* log "
  },
  {
    "path": "Docker/12factor/05_build_release_run.md",
    "chars": 2155,
    "preview": "# 5 - Build / Release / Run\n\nBuild / Release and Run phases must be kept separated\n\n![Build/Release/Run](https://dl.drop"
  },
  {
    "path": "Docker/12factor/06_processes.md",
    "chars": 1494,
    "preview": "# 6 - Processes\n\nAn application is made up of several processes.\n\nEach process must be stateless and must not have local"
  },
  {
    "path": "Docker/12factor/07_port_binding.md",
    "chars": 1547,
    "preview": "# 7 - Port binding\n\nThis factor is related to the exposition of the application to the outside.\n\nTo be compliant with 12"
  },
  {
    "path": "Docker/12factor/08_concurrency.md",
    "chars": 538,
    "preview": "# 8 - Concurrency\n\nHorizontal scalability with the processes model.\n\nThe app can be seen as a set of processes of differ"
  },
  {
    "path": "Docker/12factor/09_disposability.md",
    "chars": 1695,
    "preview": "# 9 - Disposability\n\nEach process of an application must be disposable.\n\n* it must have a quick startup\n  * ease the hor"
  },
  {
    "path": "Docker/12factor/10_dev_prod_parity.md",
    "chars": 1064,
    "preview": "# 10 - Dev / Prod parity\n\nThe different environments must be as close as possible.\n\nDocker is very good at reducing the "
  },
  {
    "path": "Docker/12factor/11_logs.md",
    "chars": 1193,
    "preview": "# 11 - Logs\n\nLogs need to be handle as a timeseries of textual events\n\nThe application should not handle or save logs lo"
  },
  {
    "path": "Docker/12factor/12_admin_processes.md",
    "chars": 688,
    "preview": "# 12 - Admin processes\n\nAdmin process should be seen as a one-off process (opposed to long running processes that make u"
  },
  {
    "path": "Docker/12factor/README.md",
    "chars": 2036,
    "preview": "# 12 Factor Application\n\nToday, a lot of applications are services deployed in the cloud, on infrastructure of cloud pro"
  },
  {
    "path": "Docker/Docker-Orchestration/readme.md",
    "chars": 1153,
    "preview": "## Advanced Docker Orchestration by Jérôme Petazzoni\n\n- [Slides](https://jpetazzo.github.io/orchestration-workshop)\n- [O"
  },
  {
    "path": "Docker/README.md",
    "chars": 912,
    "preview": "# Container, Cloud & DevOps Tutorials and Labs\n\n<img src=\"../img/56k.jpg\" alt=\"56K.Cloud Logo\" width=\"150\" height=\"99\">\n"
  },
  {
    "path": "Docker/additional-ressources/README.md",
    "chars": 1701,
    "preview": "# Additional Docker Ressources\n\nThis repo contains [Docker](https://docker.com) labs and tutorials, useful links, newsle"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/README.md",
    "chars": 1827,
    "preview": "# Developer Tools Tutorials\n\nThis directory contains tutorials on how to set-up and use common developer tools and progr"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/README_es.md",
    "chars": 1040,
    "preview": "# Tutoriales de Herramientas de Desarrollo\n\nEste directorio contiene tutoriales sobre como configurar y usar herramienta"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java/chapters/appa-common-commands.adoc",
    "chars": 2044,
    "preview": "[appendix]\n[[Common_Docker_Commands]]\n== Common Docker Commands\n\nHere is the list of commonly used Docker commands:\n\n[wi"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java/chapters/appb-troubleshooting.adoc",
    "chars": 3095,
    "preview": "[appendix]\n[[Troubleshooting]]\n\n== Troubleshooting Docker\n\n=== Network Timed Out\n\nDepending upon the network speed and r"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java/chapters/appc-references.adoc",
    "chars": 167,
    "preview": "[appendix]\n[[References]]\n\n== References\n\n. Docker Docs: http://docs.docker.com\n. Latest lab content: https://github.com"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java/chapters/ch01-setup.adoc",
    "chars": 2809,
    "preview": ":toc:\n\n:imagesdir: images\n\n= Setup Environments\n\nThis section describes the hardware and software needed for this worksh"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java/chapters/ch02-basic-concepts.adoc",
    "chars": 6227,
    "preview": ":toc:\n\n:imagesdir: images\n\n[[Docker_Basics]]\n= Docker Basic Concepts\n\n*PURPOSE*: This chapter introduces the basic termi"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java/chapters/ch03-build-image-java-9.adoc",
    "chars": 14856,
    "preview": ":toc:\n\n:imagesdir: images\n\n= Build a Docker Image with JDK 9\n\n*PURPOSE*: This chapter explains how to create a Docker im"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java/chapters/ch03-build-image.adoc",
    "chars": 12658,
    "preview": ":toc:\n\n:imagesdir: images\n\n= Build a Docker Image\n\n*PURPOSE*: This chapter explains how to create a Docker image.\n\n== Do"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java/chapters/ch04-run-container.adoc",
    "chars": 11948,
    "preview": ":toc:\n\n:imagesdir: images\n\n= Run a Docker Container\n\nThe first step in running an application using Docker is to run a c"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java/chapters/ch05-compose.adoc",
    "chars": 12573,
    "preview": ":toc:\n\n:imagesdir: images\n\n[[Docker_Compose]]\n= Multi-container application using Docker Compose\n\n== What is Docker Comp"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java/chapters/ch06-swarm.adoc",
    "chars": 13029,
    "preview": ":toc:\n\n:imagesdir: images\n\n[[Swarm_Mode]]\n= Deploy application using Swarm mode\n\nDocker Engine includes swarm mode for n"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java/chapters/ch07-eclipse.adoc",
    "chars": 4301,
    "preview": ":toc:\n\n:imagesdir: images\n\n[[Docker_Eclipse]]\n== Docker and Eclipse\n\nThis chapter will show you basic Docker tooling wit"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java/chapters/ch07-intellij.adoc",
    "chars": 3717,
    "preview": ":toc:\n\n:imagesdir: images\n\n[[Docker_IntelliJ]]\n== Docker and IntelliJ IDEA\n\nThis chapter will show you basic Docker tool"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java/chapters/ch07-netbeans.adoc",
    "chars": 2995,
    "preview": ":toc:\n\n:imagesdir: images\n\n[[Docker_NetBeans]]\n== Docker and NetBeans\n\nThis chapter will show you basic Docker tooling w"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java/chapters/ch08-aws.adoc",
    "chars": 16641,
    "preview": ":toc:\n\n:imagesdir: images\n\n= Docker for AWS\n\nhttps://docs.docker.com/docker-for-aws/[Docker for AWS] is a CloudFormation"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java/chapters/ch08-azure.adoc",
    "chars": 47,
    "preview": ":toc:\n\n:imagesdir: images\n\n= Docker for Azure\n\n"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java/chapters/ch08-cloud.adoc",
    "chars": 5817,
    "preview": ":toc:\n\n:imagesdir: images\n\n= Docker Cloud\n\n== Key Concepts\n\nDocker Cloud is a SaaS that allows you to build, deploy and "
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java/chapters/ch09-cicd.adoc",
    "chars": 9075,
    "preview": ":toc:\n\n:imagesdir: images\n\n= CI/CD using Docker\n\n*PURPOSE*: This chapter explains how to use Jenkins and Docker to run c"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java/chapters/ch10-monitoring.adoc",
    "chars": 38795,
    "preview": ":toc:\n\n:imagesdir: images\n\n= Monitoring Docker Containers\n\nThis chapter will cover different ways to monitor a Docker co"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java/chapters/ch11-bigdata.adoc",
    "chars": 12590,
    "preview": ":toc:\n\n:imagesdir: images\n\n= Big Data Processing with Docker and Hadoop\n\n*PURPOSE*: This chapter explains how to use Doc"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java/readme.adoc",
    "chars": 1437,
    "preview": "= Docker for Java Developers\n\nThis tutorial offers Java developers an intro-level and self-paced hands-on workshop with "
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java/scripts/docker-compose-pull-images.yml",
    "chars": 708,
    "preview": "version: '3'\nservices:\n  ubuntu:\n    image: ubuntu:latest\n  busybox:\n    image: busybox:latest\n  openjdk:\n    image: ope"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/Eclipse-README.md",
    "chars": 6828,
    "preview": "## In-container Java Development: Eclipse\n\n### Pre-requisites\n\n* [Docker for OSX or Docker for Windows](https://www.dock"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/Eclipse-README_es.md",
    "chars": 7052,
    "preview": "## Desarrollo Java: Eclipse\n\n### Pre-requisitos\n\n* [Docker for OSX or Docker for Windows](https://www.docker.com/product"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/IntelliJ-README.md",
    "chars": 7317,
    "preview": "## In-container Java Development: IntelliJ Community Edition\n\n### Pre-requisites\n\n* [Docker for OSX or Docker for Window"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/IntelliJ-README_es.md",
    "chars": 7808,
    "preview": "## Desarrollo Java en Contenedor: IntelliJ Community Edition\n\n### Pre-requisitos\n\n* [Docker for OSX or Docker for Window"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/NetBeans-README.md",
    "chars": 4988,
    "preview": "## In-container Java Development: NetBeans IDE\n\n### Pre-requisites\n\n* [Docker for OSX or Docker for Windows](https://www"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/NetBeans-README_es.md",
    "chars": 5391,
    "preview": "## Desarrollo Java en Contenedor: NetBeans IDE\n\n### Pre-requisitos\n\n* [Docker for OSX or Docker for Windows](https://www"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/README.md",
    "chars": 907,
    "preview": "# Tutorial: Debugging Java Applications in Docker\n\nJava developers can use Docker to build a development environment whe"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/README_es.md",
    "chars": 963,
    "preview": "# Tutorial: Depurando Aplicaciones Java en Docker\n\nLos programadores de Java pueden utilizar Docker para construir un am"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/app/.gitignore",
    "chars": 122,
    "preview": "/target/\nUserSignup.war\nUserSignup.iml\n.DS_Store \n.classpath\n.project\n/out/\n/src/main/main.iml\n.idea\n.settings\n.classpat"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/app/pom.xml",
    "chars": 2335,
    "preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n  xsi:schemaLoc"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/app/src/main/java/com/docker/UserSignup/controller/UserController.java",
    "chars": 2104,
    "preview": "package com.docker.UserSignup.controller;\n\nimport javax.validation.Valid;\n\nimport org.springframework.beans.factory.anno"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/app/src/main/java/com/docker/UserSignup/model/User.java",
    "chars": 1890,
    "preview": "package com.docker.UserSignup.model;\n\nimport java.util.Date;\n\nimport javax.persistence.Entity;\nimport javax.persistence."
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/app/src/main/java/com/docker/UserSignup/model/UserLogin.java",
    "chars": 544,
    "preview": "package com.docker.UserSignup.model;\n\nimport javax.validation.constraints.Size;\n\nimport org.hibernate.validator.constrai"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/app/src/main/java/com/docker/UserSignup/repository/UserRepository.java",
    "chars": 531,
    "preview": "package com.docker.UserSignup.repository;\n\nimport org.springframework.data.jpa.repository.JpaRepository;\nimport org.spri"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/app/src/main/java/com/docker/UserSignup/service/UserService.java",
    "chars": 236,
    "preview": "package com.docker.UserSignup.service;\n\nimport com.docker.UserSignup.model.User;\n\npublic interface UserService {\n\tUser s"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/app/src/main/java/com/docker/UserSignup/service/UserServiceImpl.java",
    "chars": 930,
    "preview": "package com.docker.UserSignup.service;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.spring"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/app/src/main/java/com/docker/UserSignup/util/Rot13.java",
    "chars": 526,
    "preview": "package com.docker.UserSignup.util;\n\npublic class Rot13 {\n\n\tpublic static String rot13(String password) {\n\t\t  StringBuil"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/app/src/main/resources/META-INF/persistence.xml",
    "chars": 315,
    "preview": "<persistence xmlns=\"http://java.sun.com/xml/ns/persistence\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/app/src/main/resources/jpaContext.xml",
    "chars": 2273,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<beans xmlns=\"http://www.springframework.org/schema/beans\"\n\txmlns:xsi=\"http://www"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/app/src/main/resources/messages.properties",
    "chars": 225,
    "preview": "NotEmpty=Field cannot be blank\nNotNull=Field cannot be blank\n\nEmail=Email Address not valid/well-formed\nPast=Date of Bir"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/app/src/main/webapp/WEB-INF/config/servletConfig.xml",
    "chars": 1058,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<beans xmlns=\"http://www.springframework.org/schema/beans\"\n\txmlns:xsi=\"http://www"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/app/src/main/webapp/WEB-INF/jsp/failure.jsp",
    "chars": 2150,
    "preview": "<%@ page language=\"java\" contentType=\"text/html; charset=ISO-8859-1\"\n\tpageEncoding=\"ISO-8859-1\"%>\n<%@ taglib prefix=\"spr"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/app/src/main/webapp/WEB-INF/jsp/login.jsp",
    "chars": 3288,
    "preview": "<%@ page language=\"java\" contentType=\"text/html; charset=ISO-8859-1\"\n\tpageEncoding=\"ISO-8859-1\"%>\n<%@ taglib prefix=\"for"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/app/src/main/webapp/WEB-INF/jsp/signup.jsp",
    "chars": 7114,
    "preview": "<%@ page language=\"java\" contentType=\"text/html; charset=ISO-8859-1\"\n\tpageEncoding=\"ISO-8859-1\"%>\n\n<%@ taglib prefix=\"c\""
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/app/src/main/webapp/WEB-INF/jsp/success.jsp",
    "chars": 2223,
    "preview": "<%@ page language=\"java\" contentType=\"text/html; charset=ISO-8859-1\"\n\tpageEncoding=\"ISO-8859-1\"%>\n<%@ taglib prefix=\"spr"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/app/src/main/webapp/WEB-INF/web.xml",
    "chars": 1026,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<web-app version=\"2.5\"\nxmlns=\"http://java.sun.com/xml/ns/javaee\"\nxmlns:xsi=\"http"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/app/src/main/webapp/assets/css/bootstrap-united.css",
    "chars": 132105,
    "preview": "@import url(\"//fonts.googleapis.com/css?family=Ubuntu\");\n\n/*! normalize.css v2.1.3 | MIT License | git.io/normalize */\n\n"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/app/src/main/webapp/bootstrap/css/bootstrap-theme.css",
    "chars": 19791,
    "preview": "/*!\n * Bootstrap v3.0.2 by @fat and @mdo\n * Copyright 2013 Twitter, Inc.\n * Licensed under http://www.apache.org/license"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/app/src/main/webapp/bootstrap/css/bootstrap.css",
    "chars": 126432,
    "preview": "/*!\n * Bootstrap v3.0.2 by @fat and @mdo\n * Copyright 2013 Twitter, Inc.\n * Licensed under http://www.apache.org/license"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/app/src/main/webapp/bootstrap/js/bootstrap.js",
    "chars": 58327,
    "preview": "/*!\n * Bootstrap v3.0.2 by @fat and @mdo\n * Copyright 2013 Twitter, Inc.\n * Licensed under http://www.apache.org/license"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/app/src/main/webapp/datepicker/css/datepicker.css",
    "chars": 4953,
    "preview": "/*!\n * Datepicker for Bootstrap\n *\n * Copyright 2012 Stefan Petre\n * Licensed under the Apache License v2.0\n * http://ww"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/app/src/main/webapp/datepicker/js/bootstrap-datepicker.js",
    "chars": 13776,
    "preview": "/* =========================================================\n * bootstrap-datepicker.js \n * http://www.eyecon.ro/bootstr"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/app/src/main/webapp/datepicker/less/datepicker.less",
    "chars": 2022,
    "preview": "/*!\n * Datepicker for Bootstrap\n *\n * Copyright 2012 Stefan Petre\n * Licensed under the Apache License v2.0\n * http://ww"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/app/src/main/webapp/index.jsp",
    "chars": 1888,
    "preview": "<html>\n<head>\n<link href=\"assets/css/bootstrap-united.css\" rel=\"stylesheet\" />\n<link href=\"bootstrap/css/bootstrap-respo"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/app/src/main/webapp/jquery-1.8.3.js",
    "chars": 266057,
    "preview": "/*!\n * jQuery JavaScript Library v1.8.3\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Cop"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/docker-compose.yml",
    "chars": 799,
    "preview": "version: \"2\"\n\nservices:\n\n  database:\n    build:\n      context: ./registration-database\n    image: registration-database\n"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/images/resizeImg.py",
    "chars": 341,
    "preview": "#!/usr/bin/env python\n\nimport sys, os\nfrom PIL import Image\n\nprint sys.argv\n\nimgName = sys.argv[1]\nreduceWidth = float(s"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/registration-database/Dockerfile",
    "chars": 431,
    "preview": "FROM mysql:latest\n\n# Copy the database initialize script: \n# Contents of /docker-entrypoint-initdb.d are run on mysqld s"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/registration-database/README.md",
    "chars": 137,
    "preview": "Database container for the User Signup demo app\n\nThis container is a MySQL 5.6 with the necessary database, tables and p"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/registration-database/docker-entrypoint-initdb.d/initialize_db.sql",
    "chars": 409,
    "preview": "USE `dockercon2035`;\n\nCREATE TABLE `user` (\n  `id` bigint(20) NOT NULL AUTO_INCREMENT,\n  `dateOfBirth` datetime NOT NULL"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/registration-webserver/Dockerfile",
    "chars": 865,
    "preview": "#FROM pietvandongen/docker-tomcat-development:latest\nFROM tomcat:7-jre8\nMAINTAINER Sophia Parafina <sophia.parafina@dock"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/registration-webserver/README.md",
    "chars": 134,
    "preview": "Webserver container for the User Signup demo application.\n\nThis container is a Tomcat 7 servlet engine with remote debug"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/registration-webserver/tomcat/run.sh",
    "chars": 58,
    "preview": "#!/bin/sh\n\nexec ${CATALINA_HOME}/bin/catalina.sh jpda run\n"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/java-debugging/registration-webserver/tomcat/tomcat-users.xml",
    "chars": 250,
    "preview": "<?xml version='1.0' encoding='cp1252'?>\n<tomcat-users>\n\t<user username=\"system\" password=\"manager\" roles=\"admin-gui,mana"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/nodejs/porting/1_node_application.md",
    "chars": 2592,
    "preview": "# Setup our sample Node.js application\n\n## Application details\n\n* API HTTP Rest based on Node.js / [Sails.js](sailsjs.or"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/nodejs/porting/2_application_image.md",
    "chars": 1995,
    "preview": "# Create the application's image\n\n* We will use 2 images to package the application\n  * one image for the database\n  * o"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/nodejs/porting/3_publish_image.md",
    "chars": 1188,
    "preview": "# Publish image\r\n\r\nThe following procedure describes how to create a repository on Docker Hub and publish an image.\r\n\r\n#"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/nodejs/porting/4_single_host_networking.md",
    "chars": 8171,
    "preview": "# Container networking on a single Docker host\r\n\r\n## Docker host creation\r\n\r\nWe will use [Docker Machine](https://docs.d"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/nodejs/porting/5_multiple_hosts_networking.md",
    "chars": 3808,
    "preview": "# Container networking on multiple Docker hosts\r\n\r\n## Prerequisite\r\n\r\nThe multihost networking is available out the box "
  },
  {
    "path": "Docker/additional-ressources/developer-tools/nodejs/porting/6_deploy_on_swarm.md",
    "chars": 5459,
    "preview": "# Deployment on a Docker Swarm\r\n\r\nAs for the multi Docker host environment, a Docker Swarm requires a key value store to"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/nodejs/porting/README.md",
    "chars": 1310,
    "preview": "# Purpose\n\nThis tutorial starts with a simple Node.js application (HTTP Rest API built with [Sails.js](http://sailsjs.or"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/nodejs/porting/summary.md",
    "chars": 513,
    "preview": "# What we done so far\n\n* setup Docker for a simple Node.js / MongoDB application\n\n* created image for the application\n  "
  },
  {
    "path": "Docker/additional-ressources/developer-tools/nodejs-debugging/.gitignore",
    "chars": 20,
    "preview": "node_modules\n.vscode"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/nodejs-debugging/README.md",
    "chars": 847,
    "preview": "# Tutorial: Debugging Node.js Applications in Docker\n\nDebugging an application live in Node.js is relatively easy. Node "
  },
  {
    "path": "Docker/additional-ressources/developer-tools/nodejs-debugging/VSCode-README.md",
    "chars": 8418,
    "preview": "## In-container Node Development: Visual Studio Code\n\n### Pre-requisites\n\n* [Docker for OSX, Docker for Windows, or Dock"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/nodejs-debugging/app/Dockerfile",
    "chars": 212,
    "preview": "FROM node:17.6-alpine\n\nWORKDIR /code\n\nRUN npm install -g nodemon@2.0.15\n\nCOPY package.json /code/package.json\nRUN npm in"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/nodejs-debugging/app/app.js",
    "chars": 820,
    "preview": "var express = require('express');\nvar expressHandlebars = require('express-handlebars');\nvar http = require('http');\n\nva"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/nodejs-debugging/app/docker-compose.yml",
    "chars": 171,
    "preview": "version: \"3\"\n\nservices:\n  web:\n    build: .\n    command: nodemon -L --inspect=0.0.0.0:5858\n    volumes:\n      - .:/code\n"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/nodejs-debugging/app/index.html",
    "chars": 481,
    "preview": "<html>\n    <head>\n        <meta http-equiv=\"refresh\" content=\"2\">\n\n        <style type=\"text/css\">\n            body {\n  "
  },
  {
    "path": "Docker/additional-ressources/developer-tools/nodejs-debugging/app/layouts/main.handlebars",
    "chars": 368,
    "preview": "<html>\n\n<head>\n  <meta http-equiv=\"refresh\" content=\"2\">\n\n  <style type=\"text/css\">\n    body {\n      font-family: Helvet"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/nodejs-debugging/app/package.json",
    "chars": 123,
    "preview": "{\n    \"main\": \"app.js\",\n    \"dependencies\": {\n        \"express\": \"~4.17.3\",\n        \"express-handlebars\": \"~5.3.1\"\n    }"
  },
  {
    "path": "Docker/additional-ressources/developer-tools/ruby/README.md",
    "chars": 17108,
    "preview": "# Rails on Docker\n\nRuby on Rails is a popular web application framework. Implementng RoR in containers presents challeng"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/README.md",
    "chars": 7112,
    "preview": "# DockerCon US 2017 Hands-On Labs (HOL)\n\n![dcus2017](images/dockercon.png)\n\nThis repo contains the series of hands-on la"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/docker-cloud/README.md",
    "chars": 10029,
    "preview": "# Continuous Integration With Docker Cloud\r\n\r\n\r\n> **Difficulty**: Beginner\r\n\r\n> **Time**: Approximately 20 minutes\r\n\r\nIn"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/docker-enterprise/README.md",
    "chars": 31746,
    "preview": "# Application Orchestration with Docker Enterprise Edition\n\nIn this lab you will deploy an application on Docker Enterpr"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/docker-networking/README.md",
    "chars": 33766,
    "preview": "# Docker Networking\r\n\r\nHi, welcome to the Networking lab for DockerCon 2017!\r\n\r\nIn this lab you will learn about key Doc"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/docker-orchestration/README.md",
    "chars": 19896,
    "preview": "# Docker Orchestration\n\nHi, welcome to the Orchestration lab for DockerCon 2017!\n\nIn this lab you will play around with "
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/securing-apps-docker-enterprise/README.md",
    "chars": 14371,
    "preview": "# Securing Applications with Docker EE Advanced \n\nIn this lab you will integrate Docker EE Advanced in to your developme"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/template.md",
    "chars": 1237,
    "preview": "# Lab X: Lab Title\r\n\r\nQuick description of the lab.\r\n\r\n> **Difficulty**: Beginner | Intermediate | Advanced\r\n\r\n> **Time*"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-101/README.md",
    "chars": 23316,
    "preview": "# Windows Docker Containers 101\n\nDocker runs natively on Windows 10 and Windows Server 2016. In this lab you'll learn ho"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-101/tweet-app/Dockerfile",
    "chars": 1141,
    "preview": "# escape=`\nFROM microsoft/windowsservercore\nSHELL [\"powershell\", \"-Command\", \"$ErrorActionPreference = 'Stop'; $Progress"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-101/tweet-app/index.html",
    "chars": 1449,
    "preview": "<html>\n    <head>\n        <style>\n\n        body {\n        \tbackground-image: linear-gradient(-74deg, transparent 90%, rg"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-101/tweet-app/start.ps1",
    "chars": 323,
    "preview": "\nWrite-Output 'Starting w3svc'\nStart-Service W3SVC\n    \nWrite-Output 'Making HTTP GET call'\nInvoke-WebRequest http://loc"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/.gitignore",
    "chars": 4711,
    "preview": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n##\n## G"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/README.md",
    "chars": 23690,
    "preview": "# Modernize .NET Apps - for Devs\n\nYou can run full .NET Framework apps in Docker using the [Windows Server Core](https:/"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Core/Env.cs",
    "chars": 617,
    "preview": "using System;\nusing System.Collections.Generic;\n\nnamespace ProductLaunch.Core\n{\n    public class Env\n    {\n        priv"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Core/ProductLaunch.Core.csproj",
    "chars": 2414,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Core/Properties/AssemblyInfo.cs",
    "chars": 1409,
    "preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Infor"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.EndToEndTests/App.config",
    "chars": 295,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <configSections>\n    <section name=\"specFlow\" type=\"TechTalk.S"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.EndToEndTests/ProductLaunch.EndToEndTests.csproj",
    "chars": 6544,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.EndToEndTests/Properties/AssemblyInfo.cs",
    "chars": 1427,
    "preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Infor"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.EndToEndTests/ProspectSignUp.feature",
    "chars": 3145,
    "preview": "Feature: Prospect Sign Up\n\tAs a prospect interested in the product launch\n\tI want to sign up for notifications\n\tSo that"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.EndToEndTests/ProspectSignUp.feature.cs",
    "chars": 39182,
    "preview": "// ------------------------------------------------------------------------------\n//  <auto-generated>\n//      This cod"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.EndToEndTests/ProspectSignUpSteps.cs",
    "chars": 2157,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing OpenQA.Selenium;\nusing OpenQA.Selenium.Firefox;\nusing OpenQA."
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.EndToEndTests/packages.config",
    "chars": 375,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Selenium.Firefox.WebDriver\" version=\"0.13.0\" targetFra"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Entities/Country.cs",
    "chars": 172,
    "preview": "namespace ProductLaunch.Entities\n{\n    public class Country\n    {\n        public string CountryCode { get; set; }\n\n    "
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Entities/ProductLaunch.Entities.csproj",
    "chars": 2498,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Entities/Properties/AssemblyInfo.cs",
    "chars": 1417,
    "preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Infor"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Entities/Prospect.cs",
    "chars": 414,
    "preview": "namespace ProductLaunch.Entities\n{\n    public class Prospect\n    {\n        public int ProspectId { get; set; }\n        "
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Entities/Role.cs",
    "chars": 163,
    "preview": "namespace ProductLaunch.Entities\n{\n    public class Role\n    {\n        public string RoleCode { get; set; }\n\n        pu"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.MessageHandlers.IndexProspect/App.config",
    "chars": 182,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<configuration>\n    <startup> \n        <supportedRuntime version=\"v4.0\" sku=\".N"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.MessageHandlers.IndexProspect/Config.cs",
    "chars": 869,
    "preview": "using System;\nusing System.Collections.Generic;\n\nnamespace ProductLaunch.MessageHandlers.IndexProspect\n{\n    public cla"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.MessageHandlers.IndexProspect/Documents/Prospect.cs",
    "chars": 411,
    "preview": "using System;\n\nnamespace ProductLaunch.MessageHandlers.IndexProspect.Documents\n{\n    public class Prospect\n    {\n      "
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.MessageHandlers.IndexProspect/Indexer/Index.cs",
    "chars": 965,
    "preview": "using Nest;\nusing ProductLaunch.MessageHandlers.IndexProspect.Documents;\nusing System;\n\nnamespace ProductLaunch.MessageH"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.MessageHandlers.IndexProspect/ProductLaunch.MessageHandlers.IndexProspect.csproj",
    "chars": 4184,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.MessageHandlers.IndexProspect/Program.cs",
    "chars": 2174,
    "preview": "using NATS.Client;\nusing ProductLaunch.MessageHandlers.IndexProspect.Indexer;\nusing ProductLaunch.Messaging;\nusing Prod"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.MessageHandlers.IndexProspect/Properties/AssemblyInfo.cs",
    "chars": 1459,
    "preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Infor"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.MessageHandlers.IndexProspect/packages.config",
    "chars": 353,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Elasticsearch.Net\" version=\"5.0.1\" targetFramework=\"ne"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.MessageHandlers.SaveProspect/App.config",
    "chars": 174,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>  \n  <startup>\n    <supportedRuntime version=\"v4.0\" sku=\".NETFram"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.MessageHandlers.SaveProspect/ProductLaunch.MessageHandlers.SaveProspect.csproj",
    "chars": 3855,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.MessageHandlers.SaveProspect/Program.cs",
    "chars": 2019,
    "preview": "using NATS.Client;\nusing ProductLaunch.Messaging;\nusing ProductLaunch.Messaging.Messages.Events;\nusing ProductLaunch.Mo"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.MessageHandlers.SaveProspect/Properties/AssemblyInfo.cs",
    "chars": 1457,
    "preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Infor"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.MessageHandlers.SaveProspect/packages.config",
    "chars": 210,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"EntityFramework\" version=\"4.3.1\" targetFramework=\"net4"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Messaging/Config.cs",
    "chars": 848,
    "preview": "using System;\nusing System.Collections.Generic;\n\nnamespace ProductLaunch.Messaging\n{\n    public class Config\n    {\n    "
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Messaging/MessageHelper.cs",
    "chars": 653,
    "preview": "using Newtonsoft.Json;\nusing ProductLaunch.Messaging.Messages;\nusing System.Text;\n\nnamespace ProductLaunch.Messaging\n{\n"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Messaging/MessageQueue.cs",
    "chars": 629,
    "preview": "using NATS.Client;\nusing ProductLaunch.Messaging.Messages;\n\nnamespace ProductLaunch.Messaging\n{\n    public static class"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Messaging/Messages/Events/ProspectSignedUpEvent.cs",
    "chars": 408,
    "preview": "using ProductLaunch.Entities;\nusing System;\n\nnamespace ProductLaunch.Messaging.Messages.Events\n{\n    public class Prosp"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Messaging/Messages/Message.cs",
    "chars": 325,
    "preview": "using System;\n\nnamespace ProductLaunch.Messaging.Messages\n{\n    public abstract class Message\n    {\n        public stri"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Messaging/ProductLaunch.Messaging.csproj",
    "chars": 3519,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Messaging/Properties/AssemblyInfo.cs",
    "chars": 1419,
    "preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Infor"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Messaging/packages.config",
    "chars": 210,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"NATS.Client\" version=\"0.7.0\" targetFramework=\"net452\" "
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Model/App.config",
    "chars": 761,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <configSections>\n    <!-- For more information on Entity Frame"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Model/Initializers/StaticDataInitializer.cs",
    "chars": 1246,
    "preview": "using ProductLaunch.Entities;\nusing System.Data.Entity;\n\nnamespace ProductLaunch.Model.Initializers\n{\n    public class "
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Model/ProductLaunch.Model.csproj",
    "chars": 3235,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Model/ProductLaunchContext.cs",
    "chars": 768,
    "preview": "using ProductLaunch.Entities;\nusing System.Data.Entity;\n\nnamespace ProductLaunch.Model\n{\n    public class ProductLaunch"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Model/Properties/AssemblyInfo.cs",
    "chars": 1411,
    "preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Infor"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Model/packages.config",
    "chars": 138,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"EntityFramework\" version=\"4.3.1\" targetFramework=\"net4"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Model.Tests/App.config",
    "chars": 284,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <connectionStrings>\n    <add name=\"ProductLaunchDb\" providerNa"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Model.Tests/ProductLaunch.Model.Tests.csproj",
    "chars": 5313,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Model.Tests/ProductLaunchContextTest.cs",
    "chars": 1217,
    "preview": "using System;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing ProductLaunch.Entities;\n\nnamespace ProductLaunc"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Model.Tests/Properties/AssemblyInfo.cs",
    "chars": 1423,
    "preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Infor"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Model.Tests/packages.config",
    "chars": 138,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"EntityFramework\" version=\"4.3.1\" targetFramework=\"net4"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/About.aspx",
    "chars": 389,
    "preview": "<%@ Page Title=\"About\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"About.aspx.cs\" I"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/About.aspx.cs",
    "chars": 304,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System."
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/About.aspx.designer.cs",
    "chars": 436,
    "preview": "//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code w"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/App_Start/BundleConfig.cs",
    "chars": 2081,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.Optimization;\nusi"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/App_Start/RouteConfig.cs",
    "chars": 463,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Web;\nusing System.Web.Routing;\nusing Microsoft.AspNet.Frien"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/ApplicationInsights.config",
    "chars": 155,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<ApplicationInsights xmlns=\"http://schemas.microsoft.com/ApplicationInsights/201"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Bundle.config",
    "chars": 218,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<bundles version=\"1.0\">\n  <styleBundle path=\"~/Content/css\">\n    <include path="
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Config.cs",
    "chars": 833,
    "preview": "using System;\nusing System.Collections.Generic;\n\nnamespace ProductLaunch.Web\n{\n    public class Config\n    {\n        pr"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Contact.aspx",
    "chars": 710,
    "preview": "<%@ Page Title=\"Contact\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"Contact.aspx.c"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Contact.aspx.cs",
    "chars": 306,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System."
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Contact.aspx.designer.cs",
    "chars": 438,
    "preview": "//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code w"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Content/Site.css",
    "chars": 593,
    "preview": "/* Move down content because we have a fixed navbar that is 50px tall */\nbody {\n    padding-top: 50px;\n    padding-bott"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Content/bootstrap.css",
    "chars": 120502,
    "preview": "/* NUGET: BEGIN LICENSE TEXT\n *\n * Microsoft grants you the right to use these script files for the sole\n * purpose of e"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Default.aspx",
    "chars": 1743,
    "preview": "<%@ Page Title=\"Home Page\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"Default.aspx"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Default.aspx.cs",
    "chars": 245,
    "preview": "using System;\nusing System.IO;\nusing System.Net;\nusing System.Web.UI;\n\nnamespace ProductLaunch.Web\n{\n    public partial"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Default.aspx.designer.cs",
    "chars": 439,
    "preview": "//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code w"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Global.asax",
    "chars": 98,
    "preview": "<%@ Application Codebehind=\"Global.asax.cs\" Inherits=\"ProductLaunch.Web.Global\" Language=\"C#\" %>\n"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Global.asax.cs",
    "chars": 657,
    "preview": "using ProductLaunch.Model;\nusing ProductLaunch.Model.Initializers;\nusing System;\nusing System.Data.Entity;\nusing System"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/ProductLaunch.Web.csproj",
    "chars": 13646,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Project_Readme.html",
    "chars": 5125,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\" />\n    <title>Your ASP.NET application</title>\n    <s"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Properties/AssemblyInfo.cs",
    "chars": 1367,
    "preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Infor"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/DetailsView.js",
    "chars": 1309,
    "preview": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/DetailsView.js\nfunction DetailsView() {\n    this.pageIndex = null;\n    "
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/Focus.js",
    "chars": 2974,
    "preview": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/WebForms.js\nfunction WebForm_FindFirstFocusableChild(control) {\n    if "
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/GridView.js",
    "chars": 1467,
    "preview": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/GridView.js\nfunction GridView() {\n    this.pageIndex = null;\n    this.s"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/MSAjax/MicrosoftAjax.js",
    "chars": 99264,
    "preview": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/MicrosoftAjax.js\n//----------------------------------------------------"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/MSAjax/MicrosoftAjaxApplicationServices.js",
    "chars": 8966,
    "preview": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/MicrosoftAjaxApplicationServices.js\n//---------------------------------"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/MSAjax/MicrosoftAjaxComponentModel.js",
    "chars": 24209,
    "preview": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/MicrosoftAjaxComponentModel.js\n//--------------------------------------"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/MSAjax/MicrosoftAjaxCore.js",
    "chars": 26939,
    "preview": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/MicrosoftAjaxCore.js\n//------------------------------------------------"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/MSAjax/MicrosoftAjaxGlobalization.js",
    "chars": 20028,
    "preview": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/MicrosoftAjaxGlobalization.js\n//---------------------------------------"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/MSAjax/MicrosoftAjaxHistory.js",
    "chars": 6721,
    "preview": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/MicrosoftAjaxHistory.js\n//---------------------------------------------"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/MSAjax/MicrosoftAjaxNetwork.js",
    "chars": 12825,
    "preview": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/MicrosoftAjaxNetwork.js\n//---------------------------------------------"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/MSAjax/MicrosoftAjaxSerialization.js",
    "chars": 5787,
    "preview": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/MicrosoftAjaxSerialization.js\n//---------------------------------------"
  },
  {
    "path": "Docker/additional-ressources/dockercon-us-2017/windows-modernize-aspnet-dev/v1-src/ProductLaunch/ProductLaunch.Web/Scripts/WebForms/MSAjax/MicrosoftAjaxTimer.js",
    "chars": 2616,
    "preview": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/MicrosoftAjaxTimer.js\n//-----------------------------------------------"
  }
]

// ... and 1990 more files (download for full content)

About this extraction

This page contains the full source code of the 56kcloud/Training GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 2190 files (57.6 MB), approximately 6.1M tokens, and a symbol index with 9407 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!