Merge pull request #22267 from mlaventure/1.11.1-changelog

Add changelog for v1.11.1
diff --git a/Dockerfile b/Dockerfile
index 5a06467..119bbdc 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -248,7 +248,7 @@
 	&& rm -rf "$GOPATH"
 
 # Install runc
-ENV RUNC_COMMIT e87436998478d222be209707503c27f6f91be0c5
+ENV RUNC_COMMIT baf6536d6259209c3edfa2b22237af82942d3dfa
 RUN set -x \
 	&& export GOPATH="$(mktemp -d)" \
 	&& git clone git://github.com/opencontainers/runc.git "$GOPATH/src/github.com/opencontainers/runc" \
@@ -258,7 +258,7 @@
 	&& cp runc /usr/local/bin/docker-runc
 
 # Install containerd
-ENV CONTAINERD_COMMIT d2f03861c91edaafdcb3961461bf82ae83785ed7
+ENV CONTAINERD_COMMIT v0.2.1
 RUN set -x \
 	&& export GOPATH="$(mktemp -d)" \
 	&& git clone git://github.com/docker/containerd.git "$GOPATH/src/github.com/docker/containerd" \
diff --git a/Dockerfile.aarch64 b/Dockerfile.aarch64
index be9c0f8..ec59c7e 100644
--- a/Dockerfile.aarch64
+++ b/Dockerfile.aarch64
@@ -181,7 +181,7 @@
 	&& rm -rf "$GOPATH"
 
 # Install runc
-ENV RUNC_COMMIT e87436998478d222be209707503c27f6f91be0c5
+ENV RUNC_COMMIT baf6536d6259209c3edfa2b22237af82942d3dfa
 RUN set -x \
 	&& export GOPATH="$(mktemp -d)" \
 	&& git clone git://github.com/opencontainers/runc.git "$GOPATH/src/github.com/opencontainers/runc" \
@@ -191,7 +191,7 @@
 	&& cp runc /usr/local/bin/docker-runc
 
 # Install containerd
-ENV CONTAINERD_COMMIT d2f03861c91edaafdcb3961461bf82ae83785ed7
+ENV CONTAINERD_COMMIT v0.2.1
 RUN set -x \
 	&& export GOPATH="$(mktemp -d)" \
 	&& git clone git://github.com/docker/containerd.git "$GOPATH/src/github.com/docker/containerd" \
diff --git a/Dockerfile.armhf b/Dockerfile.armhf
index 1af5abd..5fd4880 100644
--- a/Dockerfile.armhf
+++ b/Dockerfile.armhf
@@ -200,7 +200,7 @@
 	&& rm -rf "$GOPATH"
 
 # Install runc
-ENV RUNC_COMMIT e87436998478d222be209707503c27f6f91be0c5
+ENV RUNC_COMMIT baf6536d6259209c3edfa2b22237af82942d3dfa
 RUN set -x \
 	&& export GOPATH="$(mktemp -d)" \
 	&& git clone git://github.com/opencontainers/runc.git "$GOPATH/src/github.com/opencontainers/runc" \
@@ -210,7 +210,7 @@
 	&& cp runc /usr/local/bin/docker-runc
 
 # Install containerd
-ENV CONTAINERD_COMMIT d2f03861c91edaafdcb3961461bf82ae83785ed7
+ENV CONTAINERD_COMMIT v0.2.1
 RUN set -x \
 	&& export GOPATH="$(mktemp -d)" \
 	&& git clone git://github.com/docker/containerd.git "$GOPATH/src/github.com/docker/containerd" \
diff --git a/Dockerfile.gccgo b/Dockerfile.gccgo
index 1fb0db2..1156a97 100644
--- a/Dockerfile.gccgo
+++ b/Dockerfile.gccgo
@@ -74,7 +74,7 @@
 ENV DOCKER_BUILDTAGS apparmor seccomp selinux
 
 # Install runc
-ENV RUNC_COMMIT e87436998478d222be209707503c27f6f91be0c5
+ENV RUNC_COMMIT baf6536d6259209c3edfa2b22237af82942d3dfa
 RUN set -x \
 	&& export GOPATH="$(mktemp -d)" \
 	&& git clone git://github.com/opencontainers/runc.git "$GOPATH/src/github.com/opencontainers/runc" \
@@ -84,7 +84,7 @@
 	&& cp runc /usr/local/bin/docker-runc
 
 # Install containerd
-ENV CONTAINERD_COMMIT d2f03861c91edaafdcb3961461bf82ae83785ed7
+ENV CONTAINERD_COMMIT v0.2.1
 RUN set -x \
 	&& export GOPATH="$(mktemp -d)" \
 	&& git clone git://github.com/docker/containerd.git "$GOPATH/src/github.com/docker/containerd" \
diff --git a/Dockerfile.ppc64le b/Dockerfile.ppc64le
index be64af8..2b7411e 100644
--- a/Dockerfile.ppc64le
+++ b/Dockerfile.ppc64le
@@ -199,7 +199,7 @@
 	&& rm -rf "$GOPATH"
 
 # Install runc
-ENV RUNC_COMMIT e87436998478d222be209707503c27f6f91be0c5
+ENV RUNC_COMMIT baf6536d6259209c3edfa2b22237af82942d3dfa
 RUN set -x \
 	&& export GOPATH="$(mktemp -d)" \
 	&& git clone git://github.com/opencontainers/runc.git "$GOPATH/src/github.com/opencontainers/runc" \
@@ -209,7 +209,7 @@
 	&& cp runc /usr/local/bin/docker-runc
 
 # Install containerd
-ENV CONTAINERD_COMMIT d2f03861c91edaafdcb3961461bf82ae83785ed7
+ENV CONTAINERD_COMMIT v0.2.1
 RUN set -x \
 	&& export GOPATH="$(mktemp -d)" \
 	&& git clone git://github.com/docker/containerd.git "$GOPATH/src/github.com/docker/containerd" \
diff --git a/Dockerfile.s390x b/Dockerfile.s390x
index b758209..00b551e 100644
--- a/Dockerfile.s390x
+++ b/Dockerfile.s390x
@@ -178,7 +178,7 @@
 	&& rm -rf "$GOPATH"
 
 # Install runc
-ENV RUNC_COMMIT e87436998478d222be209707503c27f6f91be0c5
+ENV RUNC_COMMIT baf6536d6259209c3edfa2b22237af82942d3dfa
 RUN set -x \
 	&& export GOPATH="$(mktemp -d)" \
 	&& git clone git://github.com/opencontainers/runc.git "$GOPATH/src/github.com/opencontainers/runc" \
@@ -188,7 +188,7 @@
 	&& cp runc /usr/local/bin/docker-runc
 
 # Install containerd
-ENV CONTAINERD_COMMIT d2f03861c91edaafdcb3961461bf82ae83785ed7
+ENV CONTAINERD_COMMIT v0.2.1
 RUN set -x \
 	&& export GOPATH="$(mktemp -d)" \
 	&& git clone git://github.com/docker/containerd.git "$GOPATH/src/github.com/docker/containerd" \
diff --git a/Dockerfile.simple b/Dockerfile.simple
index 775584b..aabadad 100644
--- a/Dockerfile.simple
+++ b/Dockerfile.simple
@@ -30,7 +30,7 @@
 	&& rm -rf /var/lib/apt/lists/*
 
 # Install runc
-ENV RUNC_COMMIT e87436998478d222be209707503c27f6f91be0c5
+ENV RUNC_COMMIT baf6536d6259209c3edfa2b22237af82942d3dfa
 RUN set -x \
 	&& export GOPATH="$(mktemp -d)" \
 	&& git clone git://github.com/opencontainers/runc.git "$GOPATH/src/github.com/opencontainers/runc" \
@@ -40,7 +40,7 @@
 	&& cp runc /usr/local/bin/docker-runc
 
 # Install containerd
-ENV CONTAINERD_COMMIT d2f03861c91edaafdcb3961461bf82ae83785ed7
+ENV CONTAINERD_COMMIT v0.2.1
 RUN set -x \
 	&& export GOPATH="$(mktemp -d)" \
 	&& git clone git://github.com/docker/containerd.git "$GOPATH/src/github.com/docker/containerd" \
diff --git a/VERSION b/VERSION
index 1cac385..720c738 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.11.0
+1.11.1
diff --git a/api/server/httputils/errors.go b/api/server/httputils/errors.go
index c6b0a6b..cf8d2ae 100644
--- a/api/server/httputils/errors.go
+++ b/api/server/httputils/errors.go
@@ -52,6 +52,7 @@
 			"conflict":              http.StatusConflict,
 			"impossible":            http.StatusNotAcceptable,
 			"wrong login/password":  http.StatusUnauthorized,
+			"unauthorized":          http.StatusUnauthorized,
 			"hasn't been activated": http.StatusForbidden,
 		} {
 			if strings.Contains(errStr, keyword) {
diff --git a/api/server/router/image/image_routes.go b/api/server/router/image/image_routes.go
index 0ead075..58abd4b 100644
--- a/api/server/router/image/image_routes.go
+++ b/api/server/router/image/image_routes.go
@@ -7,11 +7,9 @@
 	"fmt"
 	"io"
 	"net/http"
-	"net/url"
 	"strings"
 
 	"github.com/docker/distribution/digest"
-	"github.com/docker/distribution/registry/api/errcode"
 	"github.com/docker/docker/api/server/httputils"
 	"github.com/docker/docker/builder/dockerfile"
 	"github.com/docker/docker/pkg/ioutils"
@@ -132,12 +130,6 @@
 				err = s.backend.PullImage(ctx, ref, metaHeaders, authConfig, output)
 			}
 		}
-		// Check the error from pulling an image to make sure the request
-		// was authorized. Modify the status if the request was
-		// unauthorized to respond with 401 rather than 500.
-		if err != nil && isAuthorizedError(err) {
-			err = errcode.ErrorCodeUnauthorized.WithMessage(fmt.Sprintf("Authentication is required: %s", err))
-		}
 	} else { //import
 		var newRef reference.Named
 		if repo != "" {
@@ -389,16 +381,3 @@
 	}
 	return httputils.WriteJSON(w, http.StatusOK, query.Results)
 }
-
-func isAuthorizedError(err error) bool {
-	if urlError, ok := err.(*url.Error); ok {
-		err = urlError.Err
-	}
-
-	if dError, ok := err.(errcode.Error); ok {
-		if dError.ErrorCode() == errcode.ErrorCodeUnauthorized {
-			return true
-		}
-	}
-	return false
-}
diff --git a/builder/dockerfile/builder.go b/builder/dockerfile/builder.go
index 37cca99..daa7049 100644
--- a/builder/dockerfile/builder.go
+++ b/builder/dockerfile/builder.go
@@ -216,12 +216,20 @@
 		return "", err
 	}
 
+	if len(b.options.Labels) > 0 {
+		line := "LABEL "
+		for k, v := range b.options.Labels {
+			line += fmt.Sprintf("%q=%q ", k, v)
+		}
+		_, node, err := parser.ParseLine(line)
+		if err != nil {
+			return "", err
+		}
+		b.dockerfile.Children = append(b.dockerfile.Children, node)
+	}
+
 	var shortImgID string
 	for i, n := range b.dockerfile.Children {
-		// we only want to add labels to the last layer
-		if i == len(b.dockerfile.Children)-1 {
-			b.addLabels()
-		}
 		select {
 		case <-b.cancelled:
 			logrus.Debug("Builder: build cancelled!")
@@ -237,16 +245,6 @@
 			return "", err
 		}
 
-		// Commit the layer when there are only one children in
-		// the dockerfile, this is only the `FROM` tag, and
-		// build labels. Otherwise, the new image won't be
-		// labeled properly.
-		// Commit here, so the ID of the final image is reported
-		// properly.
-		if len(b.dockerfile.Children) == 1 && len(b.options.Labels) > 0 {
-			b.commit("", b.runConfig.Cmd, "")
-		}
-
 		shortImgID = stringid.TruncateID(b.image)
 		fmt.Fprintf(b.Stdout, " ---> %s\n", shortImgID)
 		if b.options.Remove {
diff --git a/builder/dockerfile/internals.go b/builder/dockerfile/internals.go
index 33da911..a9be9fd 100644
--- a/builder/dockerfile/internals.go
+++ b/builder/dockerfile/internals.go
@@ -37,19 +37,6 @@
 	"github.com/docker/engine-api/types/strslice"
 )
 
-func (b *Builder) addLabels() {
-	// merge labels
-	if len(b.options.Labels) > 0 {
-		logrus.Debugf("[BUILDER] setting labels %v", b.options.Labels)
-		if b.runConfig.Labels == nil {
-			b.runConfig.Labels = make(map[string]string)
-		}
-		for kL, vL := range b.options.Labels {
-			b.runConfig.Labels[kL] = vL
-		}
-	}
-}
-
 func (b *Builder) commit(id string, autoCmd strslice.StrSlice, comment string) error {
 	if b.disableCommit {
 		return nil
@@ -413,20 +400,7 @@
 		b.image = img.ImageID()
 
 		if img.RunConfig() != nil {
-			imgConfig := *img.RunConfig()
-			// inherit runConfig labels from the current
-			// state if they've been set already.
-			// Ensures that images with only a FROM
-			// get the labels populated properly.
-			if b.runConfig.Labels != nil {
-				if imgConfig.Labels == nil {
-					imgConfig.Labels = make(map[string]string)
-				}
-				for k, v := range b.runConfig.Labels {
-					imgConfig.Labels[k] = v
-				}
-			}
-			b.runConfig = &imgConfig
+			b.runConfig = img.RunConfig()
 		}
 	}
 
diff --git a/builder/dockerfile/parser/line_parsers.go b/builder/dockerfile/parser/line_parsers.go
index 8cfd39b..1d7ece4 100644
--- a/builder/dockerfile/parser/line_parsers.go
+++ b/builder/dockerfile/parser/line_parsers.go
@@ -34,7 +34,7 @@
 		return nil, nil, nil
 	}
 
-	_, child, err := parseLine(rest)
+	_, child, err := ParseLine(rest)
 	if err != nil {
 		return nil, nil, err
 	}
diff --git a/builder/dockerfile/parser/parser.go b/builder/dockerfile/parser/parser.go
index d16683a..ece601a 100644
--- a/builder/dockerfile/parser/parser.go
+++ b/builder/dockerfile/parser/parser.go
@@ -68,8 +68,8 @@
 	}
 }
 
-// parse a line and return the remainder.
-func parseLine(line string) (string, *Node, error) {
+// ParseLine parse a line and return the remainder.
+func ParseLine(line string) (string, *Node, error) {
 	if line = stripComments(line); line == "" {
 		return "", nil, nil
 	}
@@ -111,7 +111,7 @@
 	for scanner.Scan() {
 		scannedLine := strings.TrimLeftFunc(scanner.Text(), unicode.IsSpace)
 		currentLine++
-		line, child, err := parseLine(scannedLine)
+		line, child, err := ParseLine(scannedLine)
 		if err != nil {
 			return nil, err
 		}
@@ -126,7 +126,7 @@
 					continue
 				}
 
-				line, child, err = parseLine(line + newline)
+				line, child, err = ParseLine(line + newline)
 				if err != nil {
 					return nil, err
 				}
@@ -136,7 +136,7 @@
 				}
 			}
 			if child == nil && line != "" {
-				_, child, err = parseLine(line)
+				_, child, err = ParseLine(line)
 				if err != nil {
 					return nil, err
 				}
diff --git a/container/container.go b/container/container.go
index 58892e7..ebafde7 100644
--- a/container/container.go
+++ b/container/container.go
@@ -516,9 +516,9 @@
 	return written, err
 }
 
-// ShouldRestart decides whether the daemon should restart the container or not.
+// ShouldRestartOnBoot decides whether the daemon should restart the container or not.
 // This is based on the container's restart policy.
-func (container *Container) ShouldRestart() bool {
+func (container *Container) ShouldRestartOnBoot() bool {
 	return container.HostConfig.RestartPolicy.Name == "always" ||
 		(container.HostConfig.RestartPolicy.Name == "unless-stopped" && !container.HasBeenManuallyStopped) ||
 		(container.HostConfig.RestartPolicy.Name == "on-failure" && container.ExitCode != 0)
diff --git a/contrib/builder/deb/amd64/debian-jessie/Dockerfile b/contrib/builder/deb/amd64/debian-jessie/Dockerfile
index 6494f89..43e2cb0 100644
--- a/contrib/builder/deb/amd64/debian-jessie/Dockerfile
+++ b/contrib/builder/deb/amd64/debian-jessie/Dockerfile
@@ -12,5 +12,5 @@
 
 ENV AUTO_GOPATH 1
 
-ENV DOCKER_BUILDTAGS apparmor selinux
+ENV DOCKER_BUILDTAGS apparmor pkcs11 selinux
 ENV RUNC_BUILDTAGS apparmor selinux
diff --git a/contrib/builder/deb/amd64/debian-stretch/Dockerfile b/contrib/builder/deb/amd64/debian-stretch/Dockerfile
index 257f9d4..5bba0ae 100644
--- a/contrib/builder/deb/amd64/debian-stretch/Dockerfile
+++ b/contrib/builder/deb/amd64/debian-stretch/Dockerfile
@@ -12,5 +12,5 @@
 
 ENV AUTO_GOPATH 1
 
-ENV DOCKER_BUILDTAGS apparmor seccomp selinux
+ENV DOCKER_BUILDTAGS apparmor pkcs11 seccomp selinux
 ENV RUNC_BUILDTAGS apparmor seccomp selinux
diff --git a/contrib/builder/deb/amd64/debian-wheezy/Dockerfile b/contrib/builder/deb/amd64/debian-wheezy/Dockerfile
index 3053011..3568c69 100644
--- a/contrib/builder/deb/amd64/debian-wheezy/Dockerfile
+++ b/contrib/builder/deb/amd64/debian-wheezy/Dockerfile
@@ -13,5 +13,5 @@
 
 ENV AUTO_GOPATH 1
 
-ENV DOCKER_BUILDTAGS apparmor selinux
+ENV DOCKER_BUILDTAGS apparmor pkcs11 selinux
 ENV RUNC_BUILDTAGS apparmor selinux
diff --git a/contrib/builder/deb/amd64/generate.sh b/contrib/builder/deb/amd64/generate.sh
index 86dfab0..fe9ff22 100755
--- a/contrib/builder/deb/amd64/generate.sh
+++ b/contrib/builder/deb/amd64/generate.sh
@@ -41,7 +41,7 @@
 
 	echo >> "$version/Dockerfile"
 
-	extraBuildTags=
+	extraBuildTags='pkcs11'
 	runcBuildTags=
 
 	# this list is sorted alphabetically; please keep it that way
diff --git a/contrib/builder/deb/amd64/ubuntu-precise/Dockerfile b/contrib/builder/deb/amd64/ubuntu-precise/Dockerfile
index f58041e..d88301e 100644
--- a/contrib/builder/deb/amd64/ubuntu-precise/Dockerfile
+++ b/contrib/builder/deb/amd64/ubuntu-precise/Dockerfile
@@ -12,5 +12,5 @@
 
 ENV AUTO_GOPATH 1
 
-ENV DOCKER_BUILDTAGS apparmor exclude_graphdriver_btrfs exclude_graphdriver_devicemapper selinux
+ENV DOCKER_BUILDTAGS apparmor exclude_graphdriver_btrfs exclude_graphdriver_devicemapper pkcs11 selinux
 ENV RUNC_BUILDTAGS apparmor selinux
diff --git a/contrib/builder/deb/amd64/ubuntu-trusty/Dockerfile b/contrib/builder/deb/amd64/ubuntu-trusty/Dockerfile
index 5a8354d..1e83056 100644
--- a/contrib/builder/deb/amd64/ubuntu-trusty/Dockerfile
+++ b/contrib/builder/deb/amd64/ubuntu-trusty/Dockerfile
@@ -12,5 +12,5 @@
 
 ENV AUTO_GOPATH 1
 
-ENV DOCKER_BUILDTAGS apparmor selinux
+ENV DOCKER_BUILDTAGS apparmor pkcs11 selinux
 ENV RUNC_BUILDTAGS apparmor selinux
diff --git a/contrib/builder/deb/amd64/ubuntu-wily/Dockerfile b/contrib/builder/deb/amd64/ubuntu-wily/Dockerfile
index 3b45e6b..acf268f 100644
--- a/contrib/builder/deb/amd64/ubuntu-wily/Dockerfile
+++ b/contrib/builder/deb/amd64/ubuntu-wily/Dockerfile
@@ -12,5 +12,5 @@
 
 ENV AUTO_GOPATH 1
 
-ENV DOCKER_BUILDTAGS apparmor seccomp selinux
+ENV DOCKER_BUILDTAGS apparmor pkcs11 seccomp selinux
 ENV RUNC_BUILDTAGS apparmor seccomp selinux
diff --git a/contrib/builder/deb/amd64/ubuntu-xenial/Dockerfile b/contrib/builder/deb/amd64/ubuntu-xenial/Dockerfile
index 888a248..1a4cc8e 100644
--- a/contrib/builder/deb/amd64/ubuntu-xenial/Dockerfile
+++ b/contrib/builder/deb/amd64/ubuntu-xenial/Dockerfile
@@ -12,5 +12,5 @@
 
 ENV AUTO_GOPATH 1
 
-ENV DOCKER_BUILDTAGS apparmor seccomp selinux
+ENV DOCKER_BUILDTAGS apparmor pkcs11 seccomp selinux
 ENV RUNC_BUILDTAGS apparmor seccomp selinux
diff --git a/contrib/builder/rpm/amd64/centos-7/Dockerfile b/contrib/builder/rpm/amd64/centos-7/Dockerfile
index 1adddc1..25d09df 100644
--- a/contrib/builder/rpm/amd64/centos-7/Dockerfile
+++ b/contrib/builder/rpm/amd64/centos-7/Dockerfile
@@ -14,6 +14,6 @@
 
 ENV AUTO_GOPATH 1
 
-ENV DOCKER_BUILDTAGS selinux
+ENV DOCKER_BUILDTAGS pkcs11 selinux
 ENV RUNC_BUILDTAGS selinux
 
diff --git a/contrib/builder/rpm/amd64/fedora-22/Dockerfile b/contrib/builder/rpm/amd64/fedora-22/Dockerfile
index 835f8db..4013803 100644
--- a/contrib/builder/rpm/amd64/fedora-22/Dockerfile
+++ b/contrib/builder/rpm/amd64/fedora-22/Dockerfile
@@ -13,6 +13,6 @@
 
 ENV AUTO_GOPATH 1
 
-ENV DOCKER_BUILDTAGS seccomp selinux
+ENV DOCKER_BUILDTAGS pkcs11 seccomp selinux
 ENV RUNC_BUILDTAGS seccomp selinux
 
diff --git a/contrib/builder/rpm/amd64/fedora-23/Dockerfile b/contrib/builder/rpm/amd64/fedora-23/Dockerfile
index 62b6bcc..5d311a0 100644
--- a/contrib/builder/rpm/amd64/fedora-23/Dockerfile
+++ b/contrib/builder/rpm/amd64/fedora-23/Dockerfile
@@ -13,6 +13,6 @@
 
 ENV AUTO_GOPATH 1
 
-ENV DOCKER_BUILDTAGS seccomp selinux
+ENV DOCKER_BUILDTAGS pkcs11 seccomp selinux
 ENV RUNC_BUILDTAGS seccomp selinux
 
diff --git a/contrib/builder/rpm/amd64/generate.sh b/contrib/builder/rpm/amd64/generate.sh
index 05a7797..a8f9c35 100755
--- a/contrib/builder/rpm/amd64/generate.sh
+++ b/contrib/builder/rpm/amd64/generate.sh
@@ -38,7 +38,7 @@
 
 	echo >> "$version/Dockerfile"
 
-	extraBuildTags=
+	extraBuildTags='pkcs11'
 	runcBuildTags=
 
 	case "$from" in
diff --git a/contrib/builder/rpm/amd64/opensuse-13.2/Dockerfile b/contrib/builder/rpm/amd64/opensuse-13.2/Dockerfile
index 67f5c44..348e260 100644
--- a/contrib/builder/rpm/amd64/opensuse-13.2/Dockerfile
+++ b/contrib/builder/rpm/amd64/opensuse-13.2/Dockerfile
@@ -13,6 +13,6 @@
 
 ENV AUTO_GOPATH 1
 
-ENV DOCKER_BUILDTAGS selinux
+ENV DOCKER_BUILDTAGS pkcs11 selinux
 ENV RUNC_BUILDTAGS selinux
 
diff --git a/contrib/builder/rpm/amd64/oraclelinux-6/Dockerfile b/contrib/builder/rpm/amd64/oraclelinux-6/Dockerfile
index defcbf6..a8f9c15 100644
--- a/contrib/builder/rpm/amd64/oraclelinux-6/Dockerfile
+++ b/contrib/builder/rpm/amd64/oraclelinux-6/Dockerfile
@@ -16,7 +16,7 @@
 
 ENV AUTO_GOPATH 1
 
-ENV DOCKER_BUILDTAGS selinux
+ENV DOCKER_BUILDTAGS pkcs11 selinux
 ENV RUNC_BUILDTAGS selinux
 
 ENV CGO_CPPFLAGS -D__EXPORTED_HEADERS__ \
diff --git a/contrib/builder/rpm/amd64/oraclelinux-7/Dockerfile b/contrib/builder/rpm/amd64/oraclelinux-7/Dockerfile
index e92086a..30572e4 100644
--- a/contrib/builder/rpm/amd64/oraclelinux-7/Dockerfile
+++ b/contrib/builder/rpm/amd64/oraclelinux-7/Dockerfile
@@ -13,6 +13,6 @@
 
 ENV AUTO_GOPATH 1
 
-ENV DOCKER_BUILDTAGS selinux
+ENV DOCKER_BUILDTAGS pkcs11 selinux
 ENV RUNC_BUILDTAGS selinux
 
diff --git a/daemon/daemon.go b/daemon/daemon.go
index ee68a3c..b7eadaa 100644
--- a/daemon/daemon.go
+++ b/daemon/daemon.go
@@ -140,6 +140,10 @@
 //    unique enough to only return a single container object
 //  If none of these searches succeed, an error is returned
 func (daemon *Daemon) GetContainer(prefixOrName string) (*container.Container, error) {
+	if len(prefixOrName) == 0 {
+		return nil, errors.NewBadRequestError(fmt.Errorf("No container name or ID supplied"))
+	}
+
 	if containerByID := daemon.containers.Get(prefixOrName); containerByID != nil {
 		// prefix is an exact match to a full container ID
 		return containerByID, nil
@@ -305,7 +309,7 @@
 			}
 			// fixme: only if not running
 			// get list of containers we need to restart
-			if daemon.configStore.AutoRestart && !c.IsRunning() && !c.IsPaused() && c.ShouldRestart() {
+			if daemon.configStore.AutoRestart && !c.IsRunning() && !c.IsPaused() && c.ShouldRestartOnBoot() {
 				mapLock.Lock()
 				restartContainers[c] = make(chan struct{})
 				mapLock.Unlock()
@@ -532,6 +536,9 @@
 
 // GetByName returns a container given a name.
 func (daemon *Daemon) GetByName(name string) (*container.Container, error) {
+	if len(name) == 0 {
+		return nil, fmt.Errorf("No container name supplied")
+	}
 	fullName := name
 	if name[0] != '/' {
 		fullName = "/" + name
@@ -1598,7 +1605,7 @@
 func (daemon *Daemon) Reload(config *Config) error {
 	daemon.configStore.reloadLock.Lock()
 	defer daemon.configStore.reloadLock.Unlock()
-	if config.IsValueSet("label") {
+	if config.IsValueSet("labels") {
 		daemon.configStore.Labels = config.Labels
 	}
 	if config.IsValueSet("debug") {
diff --git a/daemon/daemon_test.go b/daemon/daemon_test.go
index 382aac2..da6bc25 100644
--- a/daemon/daemon_test.go
+++ b/daemon/daemon_test.go
@@ -320,7 +320,7 @@
 	}
 
 	valuesSets := make(map[string]interface{})
-	valuesSets["label"] = "foo:baz"
+	valuesSets["labels"] = "foo:baz"
 	newConfig := &Config{
 		CommonConfig: CommonConfig{
 			Labels:    []string{"foo:baz"},
@@ -345,7 +345,7 @@
 	}
 
 	valuesSets := make(map[string]interface{})
-	valuesSets["label"] = "foo:baz"
+	valuesSets["labels"] = "foo:baz"
 	newConfig := &Config{
 		CommonConfig: CommonConfig{
 			Labels:    []string{"foo:baz"},
diff --git a/daemon/oci_linux.go b/daemon/oci_linux.go
index ca9ed02..0c3636c 100644
--- a/daemon/oci_linux.go
+++ b/daemon/oci_linux.go
@@ -671,6 +671,7 @@
 	}
 	s.Process.SelinuxLabel = c.GetProcessLabel()
 	s.Process.NoNewPrivileges = c.NoNewPrivileges
+	s.Linux.MountLabel = c.MountLabel
 
 	return (*libcontainerd.Spec)(&s), nil
 }
diff --git a/daemon/stats.go b/daemon/stats.go
index 1942cca..cb3478c 100644
--- a/daemon/stats.go
+++ b/daemon/stats.go
@@ -41,11 +41,11 @@
 
 	var preCPUStats types.CPUStats
 	getStatJSON := func(v interface{}) *types.StatsJSON {
-		ss := v.(*types.StatsJSON)
+		ss := v.(types.StatsJSON)
 		ss.PreCPUStats = preCPUStats
 		// ss.MemoryStats.Limit = uint64(update.MemoryLimit)
 		preCPUStats = ss.CPUStats
-		return ss
+		return &ss
 	}
 
 	enc := json.NewEncoder(outStream)
diff --git a/daemon/stats_collector_unix.go b/daemon/stats_collector_unix.go
index fb1931d..1f01632 100644
--- a/daemon/stats_collector_unix.go
+++ b/daemon/stats_collector_unix.go
@@ -135,7 +135,7 @@
 			// FIXME: move to containerd
 			stats.CPUStats.SystemUsage = systemUsage
 
-			pair.publisher.Publish(stats)
+			pair.publisher.Publish(*stats)
 		}
 	}
 }
diff --git a/distribution/pull_v2.go b/distribution/pull_v2.go
index ecddc17..748ef42 100644
--- a/distribution/pull_v2.go
+++ b/distribution/pull_v2.go
@@ -17,7 +17,6 @@
 	"github.com/docker/distribution/manifest/schema1"
 	"github.com/docker/distribution/manifest/schema2"
 	"github.com/docker/distribution/registry/api/errcode"
-	"github.com/docker/distribution/registry/client"
 	"github.com/docker/distribution/registry/client/auth"
 	"github.com/docker/distribution/registry/client/transport"
 	"github.com/docker/docker/distribution/metadata"
@@ -338,7 +337,7 @@
 		// NOTE: not using TagService.Get, since it uses HEAD requests
 		// against the manifests endpoint, which are not supported by
 		// all registry versions.
-		manifest, err = manSvc.Get(ctx, "", client.WithTag(tagged.Tag()))
+		manifest, err = manSvc.Get(ctx, "", distribution.WithTag(tagged.Tag()))
 		if err != nil {
 			return false, allowV1Fallback(err)
 		}
diff --git a/distribution/push_v2.go b/distribution/push_v2.go
index e812c1d..e86badb 100644
--- a/distribution/push_v2.go
+++ b/distribution/push_v2.go
@@ -166,7 +166,7 @@
 		return err
 	}
 
-	putOptions := []distribution.ManifestServiceOption{client.WithTag(ref.Tag())}
+	putOptions := []distribution.ManifestServiceOption{distribution.WithTag(ref.Tag())}
 	if _, err = manSvc.Put(ctx, manifest, putOptions...); err != nil {
 		logrus.Warnf("failed to upload schema2 manifest: %v - falling back to schema1", err)
 
diff --git a/docs/reference/api/docker_remote_api_v1.23.md b/docs/reference/api/docker_remote_api_v1.23.md
index 8b43f82..30f5562 100644
--- a/docs/reference/api/docker_remote_api_v1.23.md
+++ b/docs/reference/api/docker_remote_api_v1.23.md
@@ -517,8 +517,8 @@
 			"Tty": false,
 			"User": "",
 			"Volumes": {
-                          "/volumes/data": {}
-                        },
+				"/volumes/data": {}
+			},
 			"WorkingDir": "",
 			"StopSignal": "SIGTERM"
 		},
@@ -1660,7 +1660,7 @@
         You can provide one or more `t` parameters.
 -   **remote** – A Git repository URI or HTTP/HTTPS URI build source. If the
         URI specifies a filename, the file's contents are placed into a file
-		called `Dockerfile`.
+        called `Dockerfile`.
 -   **q** – Suppress verbose build output.
 -   **nocache** – Do not use the cache when building the image.
 -   **pull** - Attempt to pull the image even if an older image exists locally.
@@ -1678,6 +1678,7 @@
         variable expansion in other Dockerfile instructions. This is not meant for
         passing secret values. [Read more about the buildargs instruction](../../reference/builder.md#arg)
 -   **shmsize** - Size of `/dev/shm` in bytes. The size must be greater than 0.  If omitted the system uses 64MB.
+-   **labels** – JSON map of string pairs for labels to set on the image.
 
     Request Headers:
 
@@ -2639,7 +2640,7 @@
 **Example response**:
 
     HTTP/1.1 200 OK
-    Content-Type: vnd.docker.raw-stream
+    Content-Type: application/vnd.docker.raw-stream
 
     {{ STREAM }}
 
@@ -2774,7 +2775,11 @@
     Content-Type: application/json
 
     {
-      "Name": "tardis"
+      "Name": "tardis",
+      "Labels": {
+        "com.example.some-label": "some-value",
+        "com.example.some-other-label": "some-other-value"
+      },
     }
 
 **Example response**:
@@ -2785,7 +2790,11 @@
     {
       "Name": "tardis",
       "Driver": "local",
-      "Mountpoint": "/var/lib/docker/volumes/tardis"
+      "Mountpoint": "/var/lib/docker/volumes/tardis",
+      "Labels": {
+        "com.example.some-label": "some-value",
+        "com.example.some-other-label": "some-other-value"
+      },
     }
 
 Status Codes:
@@ -2799,6 +2808,7 @@
 - **Driver** - Name of the volume driver to use. Defaults to `local` for the name.
 - **DriverOpts** - A mapping of driver options and values. These options are
     passed directly to the driver and are driver specific.
+- **Labels** - Labels to set on the volume, specified as a map: `{"key":"value" [,"key2":"value2"]}`
 
 ### Inspect a volume
 
@@ -2816,9 +2826,13 @@
     Content-Type: application/json
 
     {
-      "Name": "tardis",
-      "Driver": "local",
-      "Mountpoint": "/var/lib/docker/volumes/tardis"
+        "Name": "tardis",
+        "Driver": "local",
+        "Mountpoint": "/var/lib/docker/volumes/tardis/_data",
+        "Labels": {
+            "com.example.some-label": "some-value",
+            "com.example.some-other-label": "some-other-value"
+        }
     }
 
 Status Codes:
@@ -2989,6 +3003,10 @@
     "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
     "com.docker.network.bridge.name": "docker0",
     "com.docker.network.driver.mtu": "1500"
+  },
+  "Labels": {
+    "com.example.some-label": "some-value",
+    "com.example.some-other-label": "some-other-value"
   }
 }
 ```
@@ -3012,6 +3030,7 @@
 
 {
   "Name":"isolated_nw",
+  "CheckDuplicate":false,
   "Driver":"bridge",
   "EnableIPv6": true,
   "IPAM":{
@@ -3030,7 +3049,19 @@
         "foo": "bar"
     }
   },
-  "Internal":true
+  "Internal":true,
+  "Options": {
+    "com.docker.network.bridge.default_bridge": "true",
+    "com.docker.network.bridge.enable_icc": "true",
+    "com.docker.network.bridge.enable_ip_masquerade": "true",
+    "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
+    "com.docker.network.bridge.name": "docker0",
+    "com.docker.network.driver.mtu": "1500"
+  },
+  "Labels": {
+    "com.example.some-label": "some-value",
+    "com.example.some-other-label": "some-other-value"
+  }
 }
 ```
 
@@ -3055,12 +3086,13 @@
 JSON Parameters:
 
 - **Name** - The new network's name. this is a mandatory field
+- **CheckDuplicate** - Requests daemon to check for networks with same name
 - **Driver** - Name of the network driver plugin to use. Defaults to `bridge` driver
 - **Internal** - Restrict external access to the network
 - **IPAM** - Optional custom IP scheme for the network
 - **EnableIPv6** - Enable IPv6 on the network
 - **Options** - Network specific options to be used by the drivers
-- **CheckDuplicate** - Requests daemon to check for networks with same name
+- **Labels** - Labels to set on the network, specified as a map: `{"key":"value" [,"key2":"value2"]}`
 
 ### Connect a container to a network
 
diff --git a/hack/vendor.sh b/hack/vendor.sh
index 59dc5b1..e5a6547 100755
--- a/hack/vendor.sh
+++ b/hack/vendor.sh
@@ -49,7 +49,7 @@
 clone git github.com/miekg/dns 75e6e86cc601825c5dbcd4e0c209eab180997cd7
 
 # get graph and distribution packages
-clone git github.com/docker/distribution d06d6d3b093302c02a93153ac7b06ebc0ffd1793
+clone git github.com/docker/distribution 467fc068d88aa6610691b7f1a677271a3fac4aac
 clone git github.com/vbatts/tar-split v0.9.11
 
 # get desired notary commit, might also need to be updated in Dockerfile
@@ -61,7 +61,7 @@
 clone git github.com/agl/ed25519 d2b94fd789ea21d12fac1a4443dd3a3f79cda72c
 
 clone git github.com/opencontainers/runc 7b6c4c418d5090f4f11eee949fdf49afd15838c9 # libcontainer
-clone git github.com/opencontainers/specs 93ca97e83ca7fb4fba6d9e30d5470f99ddc02d11 # specs
+clone git github.com/opencontainers/specs f955d90e70a98ddfb886bd930ffd076da9b67998 # specs
 clone git github.com/seccomp/libseccomp-golang 1b506fc7c24eec5a3693cdcbed40d9c226cfc6a1
 # libcontainer deps (see src/github.com/opencontainers/runc/Godeps/Godeps.json)
 clone git github.com/coreos/go-systemd v4
@@ -90,5 +90,5 @@
 clone git google.golang.org/cloud dae7e3d993bc3812a2185af60552bb6b847e52a0 https://code.googlesource.com/gocloud
 
 # containerd
-clone git github.com/docker/containerd 07c95162cdcead88dfe4ca0ffb3cea02375ec54d
+clone git github.com/docker/containerd v0.2.1
 clean
diff --git a/integration-cli/docker_api_auth_test.go b/integration-cli/docker_api_auth_test.go
new file mode 100644
index 0000000..63e78ab
--- /dev/null
+++ b/integration-cli/docker_api_auth_test.go
@@ -0,0 +1,23 @@
+package main
+
+import (
+	"net/http"
+
+	"github.com/docker/docker/pkg/integration/checker"
+	"github.com/docker/engine-api/types"
+	"github.com/go-check/check"
+)
+
+// Test case for #22244
+func (s *DockerSuite) TestAuthApi(c *check.C) {
+	config := types.AuthConfig{
+		Username: "no-user",
+		Password: "no-password",
+	}
+
+	expected := "Get https://registry-1.docker.io/v2/: unauthorized: incorrect username or password\n"
+	status, body, err := sockRequest("POST", "/auth", config)
+	c.Assert(err, check.IsNil)
+	c.Assert(status, check.Equals, http.StatusUnauthorized)
+	c.Assert(string(body), checker.Contains, expected, check.Commentf("Expected: %v, got: %v", expected, string(body)))
+}
diff --git a/integration-cli/docker_api_containers_test.go b/integration-cli/docker_api_containers_test.go
index eb67145..2622a54 100644
--- a/integration-cli/docker_api_containers_test.go
+++ b/integration-cli/docker_api_containers_test.go
@@ -1616,3 +1616,11 @@
 		c.Fatalf("Expected output to contain %q, got %q", expected, string(b))
 	}
 }
+
+// test case for #22210 where an emtpy container name caused panic.
+func (s *DockerSuite) TestContainerApiDeleteWithEmptyName(c *check.C) {
+	status, out, err := sockRequest("DELETE", "/containers/", nil)
+	c.Assert(err, checker.IsNil)
+	c.Assert(status, checker.Equals, http.StatusBadRequest)
+	c.Assert(string(out), checker.Contains, "No container name or ID supplied")
+}
diff --git a/integration-cli/docker_cli_build_test.go b/integration-cli/docker_cli_build_test.go
index fa0bf46..a53df64 100644
--- a/integration-cli/docker_cli_build_test.go
+++ b/integration-cli/docker_cli_build_test.go
@@ -6883,3 +6883,94 @@
 	out, _, err := runCommandWithOutput(buildCmd)
 	c.Assert(err, check.IsNil, check.Commentf(out))
 }
+
+// Test cases in #22036
+func (s *DockerSuite) TestBuildLabelsOverride(c *check.C) {
+	testRequires(c, DaemonIsLinux)
+
+	// Command line option labels will always override
+	name := "scratchy"
+	expected := `{"bar":"from-flag","foo":"from-flag"}`
+	_, err := buildImage(name,
+		`FROM scratch
+                LABEL foo=from-dockerfile`,
+		true, "--label", "foo=from-flag", "--label", "bar=from-flag")
+	c.Assert(err, check.IsNil)
+
+	res := inspectFieldJSON(c, name, "Config.Labels")
+	if res != expected {
+		c.Fatalf("Labels %s, expected %s", res, expected)
+	}
+
+	name = "from"
+	expected = `{"foo":"from-dockerfile"}`
+	_, err = buildImage(name,
+		`FROM scratch
+                LABEL foo from-dockerfile`,
+		true)
+	c.Assert(err, check.IsNil)
+
+	res = inspectFieldJSON(c, name, "Config.Labels")
+	if res != expected {
+		c.Fatalf("Labels %s, expected %s", res, expected)
+	}
+
+	// Command line option label will override even via `FROM`
+	name = "new"
+	expected = `{"bar":"from-dockerfile2","foo":"new"}`
+	_, err = buildImage(name,
+		`FROM from
+                LABEL bar from-dockerfile2`,
+		true, "--label", "foo=new")
+	c.Assert(err, check.IsNil)
+
+	res = inspectFieldJSON(c, name, "Config.Labels")
+	if res != expected {
+		c.Fatalf("Labels %s, expected %s", res, expected)
+	}
+
+	// Command line option without a value set (--label foo, --label bar=)
+	// will be treated as --label foo="", --label bar=""
+	name = "scratchy2"
+	expected = `{"bar":"","foo":""}`
+	_, err = buildImage(name,
+		`FROM scratch
+                LABEL foo=from-dockerfile`,
+		true, "--label", "foo", "--label", "bar=")
+	c.Assert(err, check.IsNil)
+
+	res = inspectFieldJSON(c, name, "Config.Labels")
+	if res != expected {
+		c.Fatalf("Labels %s, expected %s", res, expected)
+	}
+
+	// Command line option without a value set (--label foo, --label bar=)
+	// will be treated as --label foo="", --label bar=""
+	// This time is for inherited images
+	name = "new2"
+	expected = `{"bar":"","foo":""}`
+	_, err = buildImage(name,
+		`FROM from
+                LABEL bar from-dockerfile2`,
+		true, "--label", "foo=", "--label", "bar")
+	c.Assert(err, check.IsNil)
+
+	res = inspectFieldJSON(c, name, "Config.Labels")
+	if res != expected {
+		c.Fatalf("Labels %s, expected %s", res, expected)
+	}
+
+	// Command line option labels with only `FROM`
+	name = "scratchy"
+	expected = `{"bar":"from-flag","foo":"from-flag"}`
+	_, err = buildImage(name,
+		`FROM scratch`,
+		true, "--label", "foo=from-flag", "--label", "bar=from-flag")
+	c.Assert(err, check.IsNil)
+
+	res = inspectFieldJSON(c, name, "Config.Labels")
+	if res != expected {
+		c.Fatalf("Labels %s, expected %s", res, expected)
+	}
+
+}
diff --git a/integration-cli/docker_cli_daemon_test.go b/integration-cli/docker_cli_daemon_test.go
index 661fbc4..348653b 100644
--- a/integration-cli/docker_cli_daemon_test.go
+++ b/integration-cli/docker_cli_daemon_test.go
@@ -21,6 +21,7 @@
 	"time"
 
 	"github.com/docker/docker/pkg/integration/checker"
+	"github.com/docker/docker/pkg/mount"
 	"github.com/docker/go-units"
 	"github.com/docker/libnetwork/iptables"
 	"github.com/docker/libtrust"
@@ -1849,31 +1850,28 @@
 }
 
 // Test daemon for no space left on device error
-func (s *DockerDaemonSuite) TestDaemonNoSpaceleftOnDeviceError(c *check.C) {
+func (s *DockerDaemonSuite) TestDaemonNoSpaceLeftOnDeviceError(c *check.C) {
 	testRequires(c, SameHostDaemon, DaemonIsLinux, Network)
 
+	testDir, err := ioutil.TempDir("", "no-space-left-on-device-test")
+	c.Assert(err, checker.IsNil)
+	defer os.RemoveAll(testDir)
+	c.Assert(mount.MakeRShared(testDir), checker.IsNil)
+	defer mount.Unmount(testDir)
+	defer mount.Unmount(filepath.Join(testDir, "test-mount"))
+
 	// create a 2MiB image and mount it as graph root
-	cmd := exec.Command("dd", "of=/tmp/testfs.img", "bs=1M", "seek=2", "count=0")
-	if err := cmd.Run(); err != nil {
-		c.Fatalf("dd failed: %v", err)
-	}
-	cmd = exec.Command("mkfs.ext4", "-F", "/tmp/testfs.img")
-	if err := cmd.Run(); err != nil {
-		c.Fatalf("mkfs.ext4 failed: %v", err)
-	}
-	cmd = exec.Command("mkdir", "-p", "/tmp/testfs-mount")
-	if err := cmd.Run(); err != nil {
-		c.Fatalf("mkdir failed: %v", err)
-	}
-	cmd = exec.Command("mount", "-t", "ext4", "-no", "loop,rw", "/tmp/testfs.img", "/tmp/testfs-mount")
-	if err := cmd.Run(); err != nil {
-		c.Fatalf("mount failed: %v", err)
-	}
-	err := s.d.Start("--graph", "/tmp/testfs-mount")
+	// Why in a container? Because `mount` sometimes behaves weirdly and often fails outright on this test in debian:jessie (which is what the test suite runs under if run from the Makefile)
+	dockerCmd(c, "run", "--rm", "-v", testDir+":/test", "busybox", "sh", "-c", "dd of=/test/testfs.img bs=1M seek=2 count=0")
+	out, _, err := runCommandWithOutput(exec.Command("mkfs.ext4", "-F", filepath.Join(testDir, "testfs.img"))) // `mkfs.ext4` is not in busybox
+	c.Assert(err, checker.IsNil, check.Commentf(out))
+	dockerCmd(c, "run", "--privileged", "--rm", "-v", testDir+":/test:shared", "busybox", "sh", "-c", "mkdir -p /test/test-mount && mount -t ext4 -no loop,rw /test/testfs.img /test/test-mount")
+
+	err = s.d.Start("--graph", filepath.Join(testDir, "test-mount"))
 	c.Assert(err, check.IsNil)
 
 	// pull a repository large enough to fill the mount point
-	out, err := s.d.Cmd("pull", "registry:2")
+	out, err = s.d.Cmd("pull", "registry:2")
 	c.Assert(out, checker.Contains, "no space left on device")
 }
 
diff --git a/integration-cli/docker_cli_external_graphdriver_unix_test.go b/integration-cli/docker_cli_external_graphdriver_unix_test.go
index 9fd36ec..33fe405 100644
--- a/integration-cli/docker_cli_external_graphdriver_unix_test.go
+++ b/integration-cli/docker_cli_external_graphdriver_unix_test.go
@@ -16,6 +16,7 @@
 	"github.com/docker/docker/daemon/graphdriver"
 	"github.com/docker/docker/daemon/graphdriver/vfs"
 	"github.com/docker/docker/pkg/archive"
+	"github.com/docker/docker/pkg/plugins"
 	"github.com/go-check/check"
 )
 
@@ -26,10 +27,11 @@
 }
 
 type DockerExternalGraphdriverSuite struct {
-	server *httptest.Server
-	ds     *DockerSuite
-	d      *Daemon
-	ec     *graphEventsCounter
+	server  *httptest.Server
+	jserver *httptest.Server
+	ds      *DockerSuite
+	d       *Daemon
+	ec      map[string]*graphEventsCounter
 }
 
 type graphEventsCounter struct {
@@ -51,7 +53,6 @@
 
 func (s *DockerExternalGraphdriverSuite) SetUpTest(c *check.C) {
 	s.d = NewDaemon(c)
-	s.ec = &graphEventsCounter{}
 }
 
 func (s *DockerExternalGraphdriverSuite) TearDownTest(c *check.C) {
@@ -60,9 +61,30 @@
 }
 
 func (s *DockerExternalGraphdriverSuite) SetUpSuite(c *check.C) {
+	s.ec = make(map[string]*graphEventsCounter)
+	s.setUpPluginViaSpecFile(c)
+	s.setUpPluginViaJSONFile(c)
+}
+
+func (s *DockerExternalGraphdriverSuite) setUpPluginViaSpecFile(c *check.C) {
 	mux := http.NewServeMux()
 	s.server = httptest.NewServer(mux)
 
+	s.setUpPlugin(c, "test-external-graph-driver", "spec", mux, []byte(s.server.URL))
+}
+
+func (s *DockerExternalGraphdriverSuite) setUpPluginViaJSONFile(c *check.C) {
+	mux := http.NewServeMux()
+	s.jserver = httptest.NewServer(mux)
+
+	p := plugins.Plugin{Name: "json-external-graph-driver", Addr: s.jserver.URL}
+	b, err := json.Marshal(p)
+	c.Assert(err, check.IsNil)
+
+	s.setUpPlugin(c, "json-external-graph-driver", "json", mux, b)
+}
+
+func (s *DockerExternalGraphdriverSuite) setUpPlugin(c *check.C, name string, ext string, mux *http.ServeMux, b []byte) {
 	type graphDriverRequest struct {
 		ID         string `json:",omitempty"`
 		Parent     string `json:",omitempty"`
@@ -99,24 +121,25 @@
 		return nil
 	}
 
-	base, err := ioutil.TempDir("", "external-graph-test")
+	base, err := ioutil.TempDir("", name)
 	c.Assert(err, check.IsNil)
 	vfsProto, err := vfs.Init(base, []string{}, nil, nil)
 	c.Assert(err, check.IsNil, check.Commentf("error initializing graph driver"))
 	driver := graphdriver.NewNaiveDiffDriver(vfsProto, nil, nil)
 
+	s.ec[ext] = &graphEventsCounter{}
 	mux.HandleFunc("/Plugin.Activate", func(w http.ResponseWriter, r *http.Request) {
-		s.ec.activations++
+		s.ec[ext].activations++
 		respond(w, `{"Implements": ["GraphDriver"]}`)
 	})
 
 	mux.HandleFunc("/GraphDriver.Init", func(w http.ResponseWriter, r *http.Request) {
-		s.ec.init++
+		s.ec[ext].init++
 		respond(w, "{}")
 	})
 
 	mux.HandleFunc("/GraphDriver.Create", func(w http.ResponseWriter, r *http.Request) {
-		s.ec.creations++
+		s.ec[ext].creations++
 
 		var req graphDriverRequest
 		if err := decReq(r.Body, &req, w); err != nil {
@@ -130,7 +153,7 @@
 	})
 
 	mux.HandleFunc("/GraphDriver.Remove", func(w http.ResponseWriter, r *http.Request) {
-		s.ec.removals++
+		s.ec[ext].removals++
 
 		var req graphDriverRequest
 		if err := decReq(r.Body, &req, w); err != nil {
@@ -145,7 +168,7 @@
 	})
 
 	mux.HandleFunc("/GraphDriver.Get", func(w http.ResponseWriter, r *http.Request) {
-		s.ec.gets++
+		s.ec[ext].gets++
 
 		var req graphDriverRequest
 		if err := decReq(r.Body, &req, w); err != nil {
@@ -161,7 +184,7 @@
 	})
 
 	mux.HandleFunc("/GraphDriver.Put", func(w http.ResponseWriter, r *http.Request) {
-		s.ec.puts++
+		s.ec[ext].puts++
 
 		var req graphDriverRequest
 		if err := decReq(r.Body, &req, w); err != nil {
@@ -176,7 +199,7 @@
 	})
 
 	mux.HandleFunc("/GraphDriver.Exists", func(w http.ResponseWriter, r *http.Request) {
-		s.ec.exists++
+		s.ec[ext].exists++
 
 		var req graphDriverRequest
 		if err := decReq(r.Body, &req, w); err != nil {
@@ -186,12 +209,12 @@
 	})
 
 	mux.HandleFunc("/GraphDriver.Status", func(w http.ResponseWriter, r *http.Request) {
-		s.ec.stats++
+		s.ec[ext].stats++
 		respond(w, &graphDriverResponse{Status: driver.Status()})
 	})
 
 	mux.HandleFunc("/GraphDriver.Cleanup", func(w http.ResponseWriter, r *http.Request) {
-		s.ec.cleanups++
+		s.ec[ext].cleanups++
 		err := driver.Cleanup()
 		if err != nil {
 			respond(w, err)
@@ -201,7 +224,7 @@
 	})
 
 	mux.HandleFunc("/GraphDriver.GetMetadata", func(w http.ResponseWriter, r *http.Request) {
-		s.ec.metadata++
+		s.ec[ext].metadata++
 
 		var req graphDriverRequest
 		if err := decReq(r.Body, &req, w); err != nil {
@@ -217,7 +240,7 @@
 	})
 
 	mux.HandleFunc("/GraphDriver.Diff", func(w http.ResponseWriter, r *http.Request) {
-		s.ec.diff++
+		s.ec[ext].diff++
 
 		var req graphDriverRequest
 		if err := decReq(r.Body, &req, w); err != nil {
@@ -233,7 +256,7 @@
 	})
 
 	mux.HandleFunc("/GraphDriver.Changes", func(w http.ResponseWriter, r *http.Request) {
-		s.ec.changes++
+		s.ec[ext].changes++
 		var req graphDriverRequest
 		if err := decReq(r.Body, &req, w); err != nil {
 			return
@@ -248,7 +271,7 @@
 	})
 
 	mux.HandleFunc("/GraphDriver.ApplyDiff", func(w http.ResponseWriter, r *http.Request) {
-		s.ec.applydiff++
+		s.ec[ext].applydiff++
 		var diff archive.Reader = r.Body
 		defer r.Body.Close()
 
@@ -268,7 +291,7 @@
 	})
 
 	mux.HandleFunc("/GraphDriver.DiffSize", func(w http.ResponseWriter, r *http.Request) {
-		s.ec.diffsize++
+		s.ec[ext].diffsize++
 
 		var req graphDriverRequest
 		if err := decReq(r.Body, &req, w); err != nil {
@@ -286,19 +309,26 @@
 	err = os.MkdirAll("/etc/docker/plugins", 0755)
 	c.Assert(err, check.IsNil, check.Commentf("error creating /etc/docker/plugins"))
 
-	err = ioutil.WriteFile("/etc/docker/plugins/test-external-graph-driver.spec", []byte(s.server.URL), 0644)
-	c.Assert(err, check.IsNil, check.Commentf("error writing to /etc/docker/plugins/test-external-graph-driver.spec"))
+	specFile := "/etc/docker/plugins/" + name + "." + ext
+	err = ioutil.WriteFile(specFile, b, 0644)
+	c.Assert(err, check.IsNil, check.Commentf("error writing to %s", specFile))
 }
 
 func (s *DockerExternalGraphdriverSuite) TearDownSuite(c *check.C) {
 	s.server.Close()
+	s.jserver.Close()
 
 	err := os.RemoveAll("/etc/docker/plugins")
 	c.Assert(err, check.IsNil, check.Commentf("error removing /etc/docker/plugins"))
 }
 
 func (s *DockerExternalGraphdriverSuite) TestExternalGraphDriver(c *check.C) {
-	if err := s.d.StartWithBusybox("-s", "test-external-graph-driver"); err != nil {
+	s.testExternalGraphDriver("test-external-graph-driver", "spec", c)
+	s.testExternalGraphDriver("json-external-graph-driver", "json", c)
+}
+
+func (s *DockerExternalGraphdriverSuite) testExternalGraphDriver(name string, ext string, c *check.C) {
+	if err := s.d.StartWithBusybox("-s", name); err != nil {
 		b, _ := ioutil.ReadFile(s.d.LogFileName())
 		c.Assert(err, check.IsNil, check.Commentf("\n%s", string(b)))
 	}
@@ -306,11 +336,11 @@
 	out, err := s.d.Cmd("run", "-d", "--name=graphtest", "busybox", "sh", "-c", "echo hello > /hello")
 	c.Assert(err, check.IsNil, check.Commentf(out))
 
-	err = s.d.Restart("-s", "test-external-graph-driver")
+	err = s.d.Restart("-s", name)
 
 	out, err = s.d.Cmd("inspect", "--format='{{.GraphDriver.Name}}'", "graphtest")
 	c.Assert(err, check.IsNil, check.Commentf(out))
-	c.Assert(strings.TrimSpace(out), check.Equals, "test-external-graph-driver")
+	c.Assert(strings.TrimSpace(out), check.Equals, name)
 
 	out, err = s.d.Cmd("diff", "graphtest")
 	c.Assert(err, check.IsNil, check.Commentf(out))
@@ -327,19 +357,19 @@
 
 	// Don't check s.ec.exists, because the daemon no longer calls the
 	// Exists function.
-	c.Assert(s.ec.activations, check.Equals, 2)
-	c.Assert(s.ec.init, check.Equals, 2)
-	c.Assert(s.ec.creations >= 1, check.Equals, true)
-	c.Assert(s.ec.removals >= 1, check.Equals, true)
-	c.Assert(s.ec.gets >= 1, check.Equals, true)
-	c.Assert(s.ec.puts >= 1, check.Equals, true)
-	c.Assert(s.ec.stats, check.Equals, 3)
-	c.Assert(s.ec.cleanups, check.Equals, 2)
-	c.Assert(s.ec.applydiff >= 1, check.Equals, true)
-	c.Assert(s.ec.changes, check.Equals, 1)
-	c.Assert(s.ec.diffsize, check.Equals, 0)
-	c.Assert(s.ec.diff, check.Equals, 0)
-	c.Assert(s.ec.metadata, check.Equals, 1)
+	c.Assert(s.ec[ext].activations, check.Equals, 2)
+	c.Assert(s.ec[ext].init, check.Equals, 2)
+	c.Assert(s.ec[ext].creations >= 1, check.Equals, true)
+	c.Assert(s.ec[ext].removals >= 1, check.Equals, true)
+	c.Assert(s.ec[ext].gets >= 1, check.Equals, true)
+	c.Assert(s.ec[ext].puts >= 1, check.Equals, true)
+	c.Assert(s.ec[ext].stats, check.Equals, 3)
+	c.Assert(s.ec[ext].cleanups, check.Equals, 2)
+	c.Assert(s.ec[ext].applydiff >= 1, check.Equals, true)
+	c.Assert(s.ec[ext].changes, check.Equals, 1)
+	c.Assert(s.ec[ext].diffsize, check.Equals, 0)
+	c.Assert(s.ec[ext].diff, check.Equals, 0)
+	c.Assert(s.ec[ext].metadata, check.Equals, 1)
 }
 
 func (s *DockerExternalGraphdriverSuite) TestExternalGraphDriverPull(c *check.C) {
diff --git a/libcontainerd/client_linux.go b/libcontainerd/client_linux.go
index 01806da..8eab751 100644
--- a/libcontainerd/client_linux.go
+++ b/libcontainerd/client_linux.go
@@ -163,15 +163,9 @@
 		}
 	}()
 
-	// uid/gid
-	rootfsDir := filepath.Join(container.dir, "rootfs")
-	if err := idtools.MkdirAllAs(rootfsDir, 0700, uid, gid); err != nil && !os.IsExist(err) {
+	if err := idtools.MkdirAllAs(container.dir, 0700, uid, gid); err != nil && !os.IsExist(err) {
 		return err
 	}
-	if err := syscall.Mount(spec.Root.Path, rootfsDir, "bind", syscall.MS_REC|syscall.MS_BIND, ""); err != nil {
-		return err
-	}
-	spec.Root.Path = "rootfs"
 
 	f, err := os.Create(filepath.Join(container.dir, configFilename))
 	if err != nil {
@@ -258,6 +252,22 @@
 	return (*Stats)(resp), nil
 }
 
+// Take care of the old 1.11.0 behavior in case the version upgrade
+// happenned without a clean daemon shutdown
+func (clnt *client) cleanupOldRootfs(containerID string) {
+	// Unmount and delete the bundle folder
+	if mts, err := mount.GetMounts(); err == nil {
+		for _, mts := range mts {
+			if strings.HasSuffix(mts.Mountpoint, containerID+"/rootfs") {
+				if err := syscall.Unmount(mts.Mountpoint, syscall.MNT_DETACH); err == nil {
+					os.RemoveAll(strings.TrimSuffix(mts.Mountpoint, "/rootfs"))
+				}
+				break
+			}
+		}
+	}
+}
+
 func (clnt *client) setExited(containerID string) error {
 	clnt.lock(containerID)
 	defer clnt.unlock(containerID)
@@ -273,17 +283,7 @@
 		ExitCode: exitCode,
 	})
 
-	// Unmount and delete the bundle folder
-	if mts, err := mount.GetMounts(); err == nil {
-		for _, mts := range mts {
-			if strings.HasSuffix(mts.Mountpoint, containerID+"/rootfs") {
-				if err := syscall.Unmount(mts.Mountpoint, syscall.MNT_DETACH); err == nil {
-					os.RemoveAll(strings.TrimSuffix(mts.Mountpoint, "/rootfs"))
-				}
-				break
-			}
-		}
-	}
+	clnt.cleanupOldRootfs(containerID)
 
 	return err
 }
diff --git a/libcontainerd/container.go b/libcontainerd/container.go
index 197990f..30bc950 100644
--- a/libcontainerd/container.go
+++ b/libcontainerd/container.go
@@ -2,6 +2,7 @@
 
 import (
 	"fmt"
+	"time"
 
 	"github.com/docker/docker/restartmanager"
 )
@@ -18,6 +19,7 @@
 	restartManager restartmanager.RestartManager
 	restarting     bool
 	processes      map[string]*process
+	startedAt      time.Time
 }
 
 // WithRestartManager sets the restartmanager to be used with the container.
diff --git a/libcontainerd/container_linux.go b/libcontainerd/container_linux.go
index 6f168ca..7fa6770 100644
--- a/libcontainerd/container_linux.go
+++ b/libcontainerd/container_linux.go
@@ -6,9 +6,11 @@
 	"os"
 	"path/filepath"
 	"syscall"
+	"time"
 
 	"github.com/Sirupsen/logrus"
 	containerd "github.com/docker/containerd/api/grpc/types"
+	"github.com/docker/docker/restartmanager"
 	"github.com/opencontainers/specs/specs-go"
 	"golang.org/x/net/context"
 )
@@ -22,6 +24,9 @@
 }
 
 func (ctr *container) clean() error {
+	if os.Getenv("LIBCONTAINERD_NOCLEAN") == "1" {
+		return nil
+	}
 	if _, err := os.Lstat(ctr.dir); err != nil {
 		if os.IsNotExist(err) {
 			return nil
@@ -29,13 +34,25 @@
 		return err
 	}
 
-	syscall.Unmount(filepath.Join(ctr.dir, "rootfs"), syscall.MNT_DETACH) // ignore error
 	if err := os.RemoveAll(ctr.dir); err != nil {
 		return err
 	}
 	return nil
 }
 
+// cleanProcess removes the fifos used by an additional process.
+// Caller needs to lock container ID before calling this method.
+func (ctr *container) cleanProcess(id string) {
+	if p, ok := ctr.processes[id]; ok {
+		for _, i := range []int{syscall.Stdin, syscall.Stdout, syscall.Stderr} {
+			if err := os.Remove(p.fifo(i)); err != nil {
+				logrus.Warnf("failed to remove %v for process %v: %v", p.fifo(i), id, err)
+			}
+		}
+	}
+	delete(ctr.processes, id)
+}
+
 func (ctr *container) spec() (*specs.Spec, error) {
 	var spec specs.Spec
 	dt, err := ioutil.ReadFile(filepath.Join(ctr.dir, configFilename))
@@ -74,6 +91,7 @@
 		ctr.closeFifos(iopipe)
 		return err
 	}
+	ctr.startedAt = time.Now()
 
 	if err := ctr.client.backend.AttachStreams(ctr.containerID, *iopipe); err != nil {
 		return err
@@ -115,24 +133,29 @@
 			st.State = StateExitProcess
 		}
 		if st.State == StateExit && ctr.restartManager != nil {
-			restart, wait, err := ctr.restartManager.ShouldRestart(e.Status)
+			restart, wait, err := ctr.restartManager.ShouldRestart(e.Status, false, time.Since(ctr.startedAt))
 			if err != nil {
-				logrus.Error(err)
+				logrus.Warnf("container %s %v", ctr.containerID, err)
 			} else if restart {
 				st.State = StateRestart
 				ctr.restarting = true
 				ctr.client.deleteContainer(e.Id)
 				go func() {
 					err := <-wait
+					ctr.client.lock(ctr.containerID)
+					defer ctr.client.unlock(ctr.containerID)
 					ctr.restarting = false
 					if err != nil {
 						st.State = StateExit
+						ctr.clean()
 						ctr.client.q.append(e.Id, func() {
 							if err := ctr.client.backend.StateChanged(e.Id, st); err != nil {
 								logrus.Error(err)
 							}
 						})
-						logrus.Error(err)
+						if err != restartmanager.ErrRestartCanceled {
+							logrus.Error(err)
+						}
 					} else {
 						ctr.start()
 					}
@@ -142,11 +165,12 @@
 
 		// Remove process from list if we have exited
 		// We need to do so here in case the Message Handler decides to restart it.
-		if st.State == StateExit {
-			if os.Getenv("LIBCONTAINERD_NOCLEAN") != "1" {
-				ctr.clean()
-			}
+		switch st.State {
+		case StateExit:
+			ctr.clean()
 			ctr.client.deleteContainer(e.Id)
+		case StateExitProcess:
+			ctr.cleanProcess(st.ProcessID)
 		}
 		ctr.client.q.append(e.Id, func() {
 			if err := ctr.client.backend.StateChanged(e.Id, st); err != nil {
diff --git a/libcontainerd/container_windows.go b/libcontainerd/container_windows.go
index f1df64a..b07141a 100644
--- a/libcontainerd/container_windows.go
+++ b/libcontainerd/container_windows.go
@@ -4,6 +4,7 @@
 	"io"
 	"strings"
 	"syscall"
+	"time"
 
 	"github.com/Microsoft/hcsshim"
 	"github.com/Sirupsen/logrus"
@@ -78,6 +79,7 @@
 		}
 		return err
 	}
+	ctr.startedAt = time.Now()
 
 	// Convert io.ReadClosers to io.Readers
 	if stdout != nil {
@@ -164,7 +166,7 @@
 		defer ctr.client.unlock(ctr.containerID)
 
 		if si.State == StateExit && ctr.restartManager != nil {
-			restart, wait, err := ctr.restartManager.ShouldRestart(uint32(exitCode))
+			restart, wait, err := ctr.restartManager.ShouldRestart(uint32(exitCode), false, time.Since(ctr.startedAt))
 			if err != nil {
 				logrus.Error(err)
 			} else if restart {
diff --git a/libcontainerd/process_linux.go b/libcontainerd/process_linux.go
index 136a6e2..3c48576 100644
--- a/libcontainerd/process_linux.go
+++ b/libcontainerd/process_linux.go
@@ -79,7 +79,9 @@
 
 func openReaderFromFifo(fn string) io.Reader {
 	r, w := io.Pipe()
+	c := make(chan struct{})
 	go func() {
+		close(c)
 		stdoutf, err := os.OpenFile(fn, syscall.O_RDONLY, 0)
 		if err != nil {
 			r.CloseWithError(err)
@@ -90,6 +92,7 @@
 		w.Close()
 		stdoutf.Close()
 	}()
+	<-c // wait for the goroutine to get scheduled and syscall to block
 	return r
 }
 
diff --git a/libcontainerd/remote_linux.go b/libcontainerd/remote_linux.go
index 436f43c..4f907ab 100644
--- a/libcontainerd/remote_linux.go
+++ b/libcontainerd/remote_linux.go
@@ -23,6 +23,7 @@
 	"golang.org/x/net/context"
 	"google.golang.org/grpc"
 	"google.golang.org/grpc/grpclog"
+	"google.golang.org/grpc/transport"
 )
 
 const (
@@ -37,17 +38,18 @@
 
 type remote struct {
 	sync.RWMutex
-	apiClient   containerd.APIClient
-	daemonPid   int
-	stateDir    string
-	rpcAddr     string
-	startDaemon bool
-	debugLog    bool
-	rpcConn     *grpc.ClientConn
-	clients     []*client
-	eventTsPath string
-	pastEvents  map[string]*containerd.Event
-	runtimeArgs []string
+	apiClient     containerd.APIClient
+	daemonPid     int
+	stateDir      string
+	rpcAddr       string
+	startDaemon   bool
+	closeManually bool
+	debugLog      bool
+	rpcConn       *grpc.ClientConn
+	clients       []*client
+	eventTsPath   string
+	pastEvents    map[string]*containerd.Event
+	runtimeArgs   []string
 }
 
 // New creates a fresh instance of libcontainerd remote.
@@ -147,6 +149,7 @@
 	if r.daemonPid == -1 {
 		return
 	}
+	r.closeManually = true
 	r.rpcConn.Close()
 	// Ask the daemon to quit
 	syscall.Kill(r.daemonPid, syscall.SIGTERM)
@@ -254,6 +257,11 @@
 	for {
 		e, err := events.Recv()
 		if err != nil {
+			if grpc.ErrorDesc(err) == transport.ErrConnClosing.Desc &&
+				r.closeManually {
+				// ignore error if grpc remote connection is closed manually
+				return
+			}
 			logrus.Errorf("failed to receive event from containerd: %v", err)
 			go r.startEventsMonitor()
 			return
diff --git a/pkg/plugins/discovery.go b/pkg/plugins/discovery.go
index 3f79661..9dc6419 100644
--- a/pkg/plugins/discovery.go
+++ b/pkg/plugins/discovery.go
@@ -9,6 +9,7 @@
 	"os"
 	"path/filepath"
 	"strings"
+	"sync"
 )
 
 var (
@@ -118,6 +119,7 @@
 	if len(p.TLSConfig.CAFile) == 0 {
 		p.TLSConfig.InsecureSkipVerify = true
 	}
+	p.activateWait = sync.NewCond(&sync.Mutex{})
 
 	return &p, nil
 }
diff --git a/registry/service.go b/registry/service.go
index acafc34..cdeca58 100644
--- a/registry/service.go
+++ b/registry/service.go
@@ -37,6 +37,9 @@
 // It can be used to verify the validity of a client's credentials.
 func (s *Service) Auth(authConfig *types.AuthConfig, userAgent string) (status, token string, err error) {
 	serverAddress := authConfig.ServerAddress
+	if serverAddress == "" {
+		serverAddress = IndexServer
+	}
 	if !strings.HasPrefix(serverAddress, "https://") && !strings.HasPrefix(serverAddress, "http://") {
 		serverAddress = "https://" + serverAddress
 	}
diff --git a/restartmanager/restartmanager.go b/restartmanager/restartmanager.go
index 39b8b15..0e844de 100644
--- a/restartmanager/restartmanager.go
+++ b/restartmanager/restartmanager.go
@@ -1,6 +1,7 @@
 package restartmanager
 
 import (
+	"errors"
 	"fmt"
 	"sync"
 	"time"
@@ -13,10 +14,14 @@
 	defaultTimeout    = 100 * time.Millisecond
 )
 
+// ErrRestartCanceled is returned when the restart manager has been
+// canceled and will no longer restart the container.
+var ErrRestartCanceled = errors.New("restart canceled")
+
 // RestartManager defines object that controls container restarting rules.
 type RestartManager interface {
 	Cancel() error
-	ShouldRestart(exitCode uint32) (bool, chan error, error)
+	ShouldRestart(exitCode uint32, hasBeenManuallyStopped bool, executionDuration time.Duration) (bool, chan error, error)
 }
 
 type restartManager struct {
@@ -41,7 +46,10 @@
 	rm.Unlock()
 }
 
-func (rm *restartManager) ShouldRestart(exitCode uint32) (bool, chan error, error) {
+func (rm *restartManager) ShouldRestart(exitCode uint32, hasBeenManuallyStopped bool, executionDuration time.Duration) (bool, chan error, error) {
+	if rm.policy.IsNone() {
+		return false, nil, nil
+	}
 	rm.Lock()
 	unlockOnExit := true
 	defer func() {
@@ -51,7 +59,7 @@
 	}()
 
 	if rm.canceled {
-		return false, nil, fmt.Errorf("restartmanager canceled")
+		return false, nil, ErrRestartCanceled
 	}
 
 	if rm.active {
@@ -64,6 +72,11 @@
 		rm.failureCount = 0
 	}
 
+	// if the container ran for more than 10s, reguardless of status and policy reset the
+	// the timeout back to the default.
+	if executionDuration.Seconds() >= 10 {
+		rm.timeout = 0
+	}
 	if rm.timeout == 0 {
 		rm.timeout = defaultTimeout
 	} else {
@@ -94,7 +107,7 @@
 	go func() {
 		select {
 		case <-rm.cancel:
-			ch <- fmt.Errorf("restartmanager canceled")
+			ch <- ErrRestartCanceled
 			close(ch)
 		case <-time.After(rm.timeout):
 			rm.Lock()
diff --git a/restartmanager/restartmanager_test.go b/restartmanager/restartmanager_test.go
index 22f6a0c..9c9f805 100644
--- a/restartmanager/restartmanager_test.go
+++ b/restartmanager/restartmanager_test.go
@@ -1,3 +1,34 @@
 package restartmanager
 
-// FIXME
+import (
+	"testing"
+	"time"
+
+	"github.com/docker/engine-api/types/container"
+)
+
+func TestRestartManagerTimeout(t *testing.T) {
+	rm := New(container.RestartPolicy{Name: "always", MaximumRetryCount: 0}).(*restartManager)
+	should, _, err := rm.ShouldRestart(0, false, 1*time.Second)
+	if err != nil {
+		t.Fatal(err)
+	}
+	if !should {
+		t.Fatal("container should be restarted")
+	}
+	if rm.timeout != 100*time.Millisecond {
+		t.Fatalf("restart manager should have a timeout of 100ms but has %s", rm.timeout)
+	}
+}
+
+func TestRestartManagerTimeoutReset(t *testing.T) {
+	rm := New(container.RestartPolicy{Name: "always", MaximumRetryCount: 0}).(*restartManager)
+	rm.timeout = 5 * time.Second
+	_, _, err := rm.ShouldRestart(0, false, 10*time.Second)
+	if err != nil {
+		t.Fatal(err)
+	}
+	if rm.timeout != 100*time.Millisecond {
+		t.Fatalf("restart manager should have a timeout of 100ms but has %s", rm.timeout)
+	}
+}
diff --git a/vendor/src/github.com/docker/containerd/api/grpc/types/api.pb.go b/vendor/src/github.com/docker/containerd/api/grpc/types/api.pb.go
index 85eda97..ea82960 100644
--- a/vendor/src/github.com/docker/containerd/api/grpc/types/api.pb.go
+++ b/vendor/src/github.com/docker/containerd/api/grpc/types/api.pb.go
@@ -469,14 +469,14 @@
 
 type NetworkStats struct {
 	Name       string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
-	RxBytes    uint64 `protobuf:"varint,2,opt,name=rx_bytes" json:"rx_bytes,omitempty"`
-	Rx_Packets uint64 `protobuf:"varint,3,opt,name=rx_Packets" json:"rx_Packets,omitempty"`
-	RxErrors   uint64 `protobuf:"varint,4,opt,name=Rx_errors" json:"Rx_errors,omitempty"`
-	RxDropped  uint64 `protobuf:"varint,5,opt,name=Rx_dropped" json:"Rx_dropped,omitempty"`
-	TxBytes    uint64 `protobuf:"varint,6,opt,name=Tx_bytes" json:"Tx_bytes,omitempty"`
-	TxPackets  uint64 `protobuf:"varint,7,opt,name=Tx_packets" json:"Tx_packets,omitempty"`
-	TxErrors   uint64 `protobuf:"varint,8,opt,name=Tx_errors" json:"Tx_errors,omitempty"`
-	TxDropped  uint64 `protobuf:"varint,9,opt,name=Tx_dropped" json:"Tx_dropped,omitempty"`
+	RxBytes    uint64 `protobuf:"varint,2,opt,name=rx_bytes,json=rxBytes" json:"rx_bytes,omitempty"`
+	Rx_Packets uint64 `protobuf:"varint,3,opt,name=rx_Packets,json=rxPackets" json:"rx_Packets,omitempty"`
+	RxErrors   uint64 `protobuf:"varint,4,opt,name=Rx_errors,json=rxErrors" json:"Rx_errors,omitempty"`
+	RxDropped  uint64 `protobuf:"varint,5,opt,name=Rx_dropped,json=rxDropped" json:"Rx_dropped,omitempty"`
+	TxBytes    uint64 `protobuf:"varint,6,opt,name=Tx_bytes,json=txBytes" json:"Tx_bytes,omitempty"`
+	TxPackets  uint64 `protobuf:"varint,7,opt,name=Tx_packets,json=txPackets" json:"Tx_packets,omitempty"`
+	TxErrors   uint64 `protobuf:"varint,8,opt,name=Tx_errors,json=txErrors" json:"Tx_errors,omitempty"`
+	TxDropped  uint64 `protobuf:"varint,9,opt,name=Tx_dropped,json=txDropped" json:"Tx_dropped,omitempty"`
 }
 
 func (m *NetworkStats) Reset()                    { *m = NetworkStats{} }
@@ -485,10 +485,10 @@
 func (*NetworkStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} }
 
 type CpuUsage struct {
-	TotalUsage        uint64   `protobuf:"varint,1,opt,name=total_usage" json:"total_usage,omitempty"`
-	PercpuUsage       []uint64 `protobuf:"varint,2,rep,name=percpu_usage" json:"percpu_usage,omitempty"`
-	UsageInKernelmode uint64   `protobuf:"varint,3,opt,name=usage_in_kernelmode" json:"usage_in_kernelmode,omitempty"`
-	UsageInUsermode   uint64   `protobuf:"varint,4,opt,name=usage_in_usermode" json:"usage_in_usermode,omitempty"`
+	TotalUsage        uint64   `protobuf:"varint,1,opt,name=total_usage,json=totalUsage" json:"total_usage,omitempty"`
+	PercpuUsage       []uint64 `protobuf:"varint,2,rep,name=percpu_usage,json=percpuUsage" json:"percpu_usage,omitempty"`
+	UsageInKernelmode uint64   `protobuf:"varint,3,opt,name=usage_in_kernelmode,json=usageInKernelmode" json:"usage_in_kernelmode,omitempty"`
+	UsageInUsermode   uint64   `protobuf:"varint,4,opt,name=usage_in_usermode,json=usageInUsermode" json:"usage_in_usermode,omitempty"`
 }
 
 func (m *CpuUsage) Reset()                    { *m = CpuUsage{} }
@@ -498,8 +498,8 @@
 
 type ThrottlingData struct {
 	Periods          uint64 `protobuf:"varint,1,opt,name=periods" json:"periods,omitempty"`
-	ThrottledPeriods uint64 `protobuf:"varint,2,opt,name=throttled_periods" json:"throttled_periods,omitempty"`
-	ThrottledTime    uint64 `protobuf:"varint,3,opt,name=throttled_time" json:"throttled_time,omitempty"`
+	ThrottledPeriods uint64 `protobuf:"varint,2,opt,name=throttled_periods,json=throttledPeriods" json:"throttled_periods,omitempty"`
+	ThrottledTime    uint64 `protobuf:"varint,3,opt,name=throttled_time,json=throttledTime" json:"throttled_time,omitempty"`
 }
 
 func (m *ThrottlingData) Reset()                    { *m = ThrottlingData{} }
@@ -508,9 +508,9 @@
 func (*ThrottlingData) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} }
 
 type CpuStats struct {
-	CpuUsage       *CpuUsage       `protobuf:"bytes,1,opt,name=cpu_usage" json:"cpu_usage,omitempty"`
-	ThrottlingData *ThrottlingData `protobuf:"bytes,2,opt,name=throttling_data" json:"throttling_data,omitempty"`
-	SystemUsage    uint64          `protobuf:"varint,3,opt,name=system_usage" json:"system_usage,omitempty"`
+	CpuUsage       *CpuUsage       `protobuf:"bytes,1,opt,name=cpu_usage,json=cpuUsage" json:"cpu_usage,omitempty"`
+	ThrottlingData *ThrottlingData `protobuf:"bytes,2,opt,name=throttling_data,json=throttlingData" json:"throttling_data,omitempty"`
+	SystemUsage    uint64          `protobuf:"varint,3,opt,name=system_usage,json=systemUsage" json:"system_usage,omitempty"`
 }
 
 func (m *CpuStats) Reset()                    { *m = CpuStats{} }
@@ -534,6 +534,7 @@
 
 type PidsStats struct {
 	Current uint64 `protobuf:"varint,1,opt,name=current" json:"current,omitempty"`
+	Limit   uint64 `protobuf:"varint,2,opt,name=limit" json:"limit,omitempty"`
 }
 
 func (m *PidsStats) Reset()                    { *m = PidsStats{} }
@@ -543,7 +544,7 @@
 
 type MemoryData struct {
 	Usage    uint64 `protobuf:"varint,1,opt,name=usage" json:"usage,omitempty"`
-	MaxUsage uint64 `protobuf:"varint,2,opt,name=max_usage" json:"max_usage,omitempty"`
+	MaxUsage uint64 `protobuf:"varint,2,opt,name=max_usage,json=maxUsage" json:"max_usage,omitempty"`
 	Failcnt  uint64 `protobuf:"varint,3,opt,name=failcnt" json:"failcnt,omitempty"`
 	Limit    uint64 `protobuf:"varint,4,opt,name=limit" json:"limit,omitempty"`
 }
@@ -556,8 +557,8 @@
 type MemoryStats struct {
 	Cache       uint64            `protobuf:"varint,1,opt,name=cache" json:"cache,omitempty"`
 	Usage       *MemoryData       `protobuf:"bytes,2,opt,name=usage" json:"usage,omitempty"`
-	SwapUsage   *MemoryData       `protobuf:"bytes,3,opt,name=swap_usage" json:"swap_usage,omitempty"`
-	KernelUsage *MemoryData       `protobuf:"bytes,4,opt,name=kernel_usage" json:"kernel_usage,omitempty"`
+	SwapUsage   *MemoryData       `protobuf:"bytes,3,opt,name=swap_usage,json=swapUsage" json:"swap_usage,omitempty"`
+	KernelUsage *MemoryData       `protobuf:"bytes,4,opt,name=kernel_usage,json=kernelUsage" json:"kernel_usage,omitempty"`
 	Stats       map[string]uint64 `protobuf:"bytes,5,rep,name=stats" json:"stats,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
 }
 
@@ -607,14 +608,14 @@
 func (*BlkioStatsEntry) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} }
 
 type BlkioStats struct {
-	IoServiceBytesRecursive []*BlkioStatsEntry `protobuf:"bytes,1,rep,name=io_service_bytes_recursive" json:"io_service_bytes_recursive,omitempty"`
-	IoServicedRecursive     []*BlkioStatsEntry `protobuf:"bytes,2,rep,name=io_serviced_recursive" json:"io_serviced_recursive,omitempty"`
-	IoQueuedRecursive       []*BlkioStatsEntry `protobuf:"bytes,3,rep,name=io_queued_recursive" json:"io_queued_recursive,omitempty"`
-	IoServiceTimeRecursive  []*BlkioStatsEntry `protobuf:"bytes,4,rep,name=io_service_time_recursive" json:"io_service_time_recursive,omitempty"`
-	IoWaitTimeRecursive     []*BlkioStatsEntry `protobuf:"bytes,5,rep,name=io_wait_time_recursive" json:"io_wait_time_recursive,omitempty"`
-	IoMergedRecursive       []*BlkioStatsEntry `protobuf:"bytes,6,rep,name=io_merged_recursive" json:"io_merged_recursive,omitempty"`
-	IoTimeRecursive         []*BlkioStatsEntry `protobuf:"bytes,7,rep,name=io_time_recursive" json:"io_time_recursive,omitempty"`
-	SectorsRecursive        []*BlkioStatsEntry `protobuf:"bytes,8,rep,name=sectors_recursive" json:"sectors_recursive,omitempty"`
+	IoServiceBytesRecursive []*BlkioStatsEntry `protobuf:"bytes,1,rep,name=io_service_bytes_recursive,json=ioServiceBytesRecursive" json:"io_service_bytes_recursive,omitempty"`
+	IoServicedRecursive     []*BlkioStatsEntry `protobuf:"bytes,2,rep,name=io_serviced_recursive,json=ioServicedRecursive" json:"io_serviced_recursive,omitempty"`
+	IoQueuedRecursive       []*BlkioStatsEntry `protobuf:"bytes,3,rep,name=io_queued_recursive,json=ioQueuedRecursive" json:"io_queued_recursive,omitempty"`
+	IoServiceTimeRecursive  []*BlkioStatsEntry `protobuf:"bytes,4,rep,name=io_service_time_recursive,json=ioServiceTimeRecursive" json:"io_service_time_recursive,omitempty"`
+	IoWaitTimeRecursive     []*BlkioStatsEntry `protobuf:"bytes,5,rep,name=io_wait_time_recursive,json=ioWaitTimeRecursive" json:"io_wait_time_recursive,omitempty"`
+	IoMergedRecursive       []*BlkioStatsEntry `protobuf:"bytes,6,rep,name=io_merged_recursive,json=ioMergedRecursive" json:"io_merged_recursive,omitempty"`
+	IoTimeRecursive         []*BlkioStatsEntry `protobuf:"bytes,7,rep,name=io_time_recursive,json=ioTimeRecursive" json:"io_time_recursive,omitempty"`
+	SectorsRecursive        []*BlkioStatsEntry `protobuf:"bytes,8,rep,name=sectors_recursive,json=sectorsRecursive" json:"sectors_recursive,omitempty"`
 }
 
 func (m *BlkioStats) Reset()                    { *m = BlkioStats{} }
@@ -680,7 +681,7 @@
 
 type HugetlbStats struct {
 	Usage    uint64 `protobuf:"varint,1,opt,name=usage" json:"usage,omitempty"`
-	MaxUsage uint64 `protobuf:"varint,2,opt,name=max_usage" json:"max_usage,omitempty"`
+	MaxUsage uint64 `protobuf:"varint,2,opt,name=max_usage,json=maxUsage" json:"max_usage,omitempty"`
 	Failcnt  uint64 `protobuf:"varint,3,opt,name=failcnt" json:"failcnt,omitempty"`
 	Limit    uint64 `protobuf:"varint,4,opt,name=limit" json:"limit,omitempty"`
 }
@@ -691,11 +692,11 @@
 func (*HugetlbStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37} }
 
 type CgroupStats struct {
-	CpuStats     *CpuStats                `protobuf:"bytes,1,opt,name=cpu_stats" json:"cpu_stats,omitempty"`
-	MemoryStats  *MemoryStats             `protobuf:"bytes,2,opt,name=memory_stats" json:"memory_stats,omitempty"`
-	BlkioStats   *BlkioStats              `protobuf:"bytes,3,opt,name=blkio_stats" json:"blkio_stats,omitempty"`
-	HugetlbStats map[string]*HugetlbStats `protobuf:"bytes,4,rep,name=hugetlb_stats" json:"hugetlb_stats,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
-	PidsStats    *PidsStats               `protobuf:"bytes,5,opt,name=pids_stats" json:"pids_stats,omitempty"`
+	CpuStats     *CpuStats                `protobuf:"bytes,1,opt,name=cpu_stats,json=cpuStats" json:"cpu_stats,omitempty"`
+	MemoryStats  *MemoryStats             `protobuf:"bytes,2,opt,name=memory_stats,json=memoryStats" json:"memory_stats,omitempty"`
+	BlkioStats   *BlkioStats              `protobuf:"bytes,3,opt,name=blkio_stats,json=blkioStats" json:"blkio_stats,omitempty"`
+	HugetlbStats map[string]*HugetlbStats `protobuf:"bytes,4,rep,name=hugetlb_stats,json=hugetlbStats" json:"hugetlb_stats,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	PidsStats    *PidsStats               `protobuf:"bytes,5,opt,name=pids_stats,json=pidsStats" json:"pids_stats,omitempty"`
 }
 
 func (m *CgroupStats) Reset()                    { *m = CgroupStats{} }
@@ -739,8 +740,8 @@
 }
 
 type StatsResponse struct {
-	NetworkStats []*NetworkStats `protobuf:"bytes,1,rep,name=network_stats" json:"network_stats,omitempty"`
-	CgroupStats  *CgroupStats    `protobuf:"bytes,2,opt,name=cgroup_stats" json:"cgroup_stats,omitempty"`
+	NetworkStats []*NetworkStats `protobuf:"bytes,1,rep,name=network_stats,json=networkStats" json:"network_stats,omitempty"`
+	CgroupStats  *CgroupStats    `protobuf:"bytes,2,opt,name=cgroup_stats,json=cgroupStats" json:"cgroup_stats,omitempty"`
 	Timestamp    uint64          `protobuf:"varint,3,opt,name=timestamp" json:"timestamp,omitempty"`
 }
 
@@ -1182,118 +1183,144 @@
 }
 
 var fileDescriptor0 = []byte{
-	// 1806 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xd4, 0x58, 0xd9, 0x8e, 0xdb, 0x5e,
-	0x19, 0x9f, 0xec, 0xc9, 0x97, 0x38, 0x33, 0xe3, 0xd9, 0x32, 0xe9, 0x36, 0xb8, 0x85, 0x56, 0xa8,
-	0x1a, 0x95, 0x94, 0xa5, 0x14, 0x09, 0x51, 0xa6, 0x15, 0x05, 0x4d, 0x4b, 0x3a, 0x0b, 0x88, 0xab,
-	0xc8, 0xb1, 0x4f, 0x93, 0xc3, 0x38, 0xb6, 0xf1, 0x39, 0x9e, 0xe5, 0x21, 0xb8, 0xe5, 0x9a, 0x7b,
-	0x24, 0xc4, 0x15, 0x0f, 0xc0, 0xb3, 0x70, 0xc5, 0x53, 0xf0, 0x9d, 0xc5, 0x8e, 0xed, 0x2c, 0x83,
-	0x84, 0xfe, 0x17, 0xff, 0x9b, 0x28, 0xe7, 0x9c, 0x6f, 0xfd, 0x7d, 0xdb, 0x39, 0x86, 0x96, 0x1d,
-	0xd2, 0xe3, 0x30, 0x0a, 0x78, 0x60, 0xd6, 0xf8, 0x5d, 0x48, 0x98, 0x35, 0x86, 0xdd, 0xcb, 0xd0,
-	0xb5, 0x39, 0x19, 0x46, 0x81, 0x43, 0x18, 0x3b, 0x23, 0x7f, 0x8a, 0x09, 0xe3, 0x26, 0x40, 0x99,
-	0xba, 0xbd, 0xd2, 0x51, 0xe9, 0x45, 0xcb, 0x6c, 0x43, 0x25, 0xc4, 0x45, 0x59, 0x2e, 0xf0, 0xc4,
-	0xf1, 0x02, 0x46, 0xce, 0xb9, 0x4b, 0xfd, 0x5e, 0x05, 0xf7, 0x9a, 0xa6, 0x01, 0xb5, 0x1b, 0xea,
-	0xf2, 0x69, 0xaf, 0x8a, 0x4b, 0xc3, 0xec, 0x42, 0x7d, 0x4a, 0xe8, 0x64, 0xca, 0x7b, 0x35, 0xb1,
-	0xb6, 0x0e, 0x60, 0xaf, 0xa0, 0x83, 0x85, 0x81, 0xcf, 0x88, 0xf5, 0xd7, 0x12, 0xec, 0x9f, 0x44,
-	0x04, 0x4f, 0x4e, 0x02, 0x9f, 0xdb, 0xd4, 0x27, 0xd1, 0x32, 0xfd, 0xb8, 0x18, 0xc7, 0xbe, 0xeb,
-	0x91, 0xa1, 0x8d, 0x3a, 0xe6, 0x66, 0x4c, 0x89, 0x73, 0x15, 0x06, 0xd4, 0xe7, 0xd2, 0x8c, 0x96,
-	0x30, 0x83, 0x49, 0xab, 0xaa, 0x72, 0x89, 0x66, 0xe0, 0x32, 0x88, 0x95, 0x19, 0xc9, 0x9a, 0x44,
-	0x51, 0xaf, 0x9e, 0xac, 0x3d, 0x7b, 0x4c, 0x3c, 0xd6, 0x6b, 0x1c, 0x55, 0x70, 0xbd, 0x03, 0x6d,
-	0x3f, 0x18, 0xd2, 0xeb, 0x80, 0x9f, 0x05, 0x01, 0xef, 0x35, 0x85, 0x6b, 0xd6, 0xcf, 0xe1, 0x60,
-	0xc1, 0x42, 0x65, 0xbd, 0xf9, 0x14, 0x5a, 0x4e, 0xb2, 0x29, 0x2d, 0x6d, 0x0f, 0xb6, 0x8e, 0x25,
-	0xaa, 0xc7, 0x29, 0xb1, 0xf5, 0x06, 0x8c, 0x73, 0x3a, 0xf1, 0x6d, 0xef, 0x5e, 0x60, 0x85, 0x79,
-	0x92, 0x52, 0x7a, 0x63, 0x58, 0x5b, 0xd0, 0x4d, 0x38, 0x35, 0x5c, 0x7f, 0x2f, 0xc3, 0xf6, 0x3b,
-	0xd7, 0x5d, 0x13, 0xa9, 0x2d, 0x68, 0x72, 0x12, 0xcd, 0xa8, 0x90, 0x52, 0x96, 0xa1, 0x39, 0x84,
-	0x6a, 0xcc, 0xd0, 0xbe, 0x8a, 0xb4, 0xaf, 0xad, 0xed, 0xbb, 0xc4, 0x2d, 0xb3, 0x03, 0x55, 0x3b,
-	0x9a, 0x30, 0x44, 0xab, 0xa2, 0x6c, 0x21, 0xfe, 0x35, 0x42, 0xa5, 0x17, 0xce, 0x8d, 0xab, 0x71,
-	0xd2, 0x56, 0x36, 0xf2, 0x18, 0x37, 0x0b, 0x18, 0xb7, 0x0a, 0x18, 0x83, 0x5c, 0xef, 0x42, 0xc7,
-	0xb1, 0x43, 0x7b, 0x4c, 0x3d, 0xca, 0x29, 0x61, 0xbd, 0xb6, 0x14, 0x7f, 0x00, 0x9b, 0x76, 0x18,
-	0xda, 0xd1, 0x2c, 0x88, 0xd0, 0x99, 0xaf, 0xd4, 0x23, 0xbd, 0x4e, 0x42, 0xce, 0x88, 0x47, 0xfd,
-	0xf8, 0xf6, 0x54, 0x44, 0xa6, 0x67, 0xc8, 0x5d, 0x24, 0xf7, 0x83, 0xcf, 0xe4, 0x66, 0x18, 0xd1,
-	0x6b, 0xa4, 0x9d, 0xa0, 0x9c, 0xae, 0x74, 0xee, 0x31, 0x34, 0x22, 0x8f, 0xce, 0x28, 0x67, 0xbd,
-	0x4d, 0x14, 0xdc, 0x1e, 0x18, 0xda, 0xbf, 0x33, 0xb9, 0x6b, 0x0d, 0xa0, 0xae, 0xfe, 0x09, 0x5f,
-	0xc5, 0x89, 0x86, 0x09, 0x57, 0x2c, 0xf8, 0xca, 0x25, 0x44, 0x55, 0xb1, 0x9a, 0xda, 0x91, 0x2b,
-	0x21, 0xaa, 0x62, 0xc0, 0xaa, 0x12, 0x1d, 0xf4, 0x3a, 0xd6, 0xb8, 0x1a, 0x62, 0x31, 0xd1, 0x81,
-	0x32, 0xcc, 0x7d, 0xe8, 0xda, 0xae, 0x8b, 0xfe, 0x04, 0x08, 0xf3, 0xaf, 0xa8, 0xcb, 0x90, 0xb3,
-	0x82, 0x01, 0xdb, 0x05, 0x33, 0x1b, 0x1d, 0x1d, 0xb4, 0xd3, 0x34, 0x81, 0xd2, 0x74, 0x5d, 0x16,
-	0xb9, 0xef, 0xe6, 0xf2, 0xb9, 0x2c, 0xa3, 0xb5, 0x9d, 0x64, 0x53, 0x7a, 0x60, 0xf5, 0xa1, 0xb7,
-	0x28, 0x4d, 0x6b, 0x7a, 0x0d, 0x07, 0xef, 0x89, 0x47, 0xee, 0xd3, 0x84, 0xee, 0xfa, 0xf6, 0x8c,
-	0xa8, 0xac, 0x13, 0x02, 0x17, 0x99, 0xb4, 0xc0, 0xa7, 0xb0, 0x77, 0x4a, 0x19, 0x5f, 0x2b, 0xce,
-	0xfa, 0x03, 0xc0, 0x9c, 0x20, 0x15, 0x9e, 0xaa, 0x22, 0xb7, 0x94, 0xeb, 0x54, 0x44, 0x10, 0xb9,
-	0x13, 0xea, 0x96, 0x81, 0xc5, 0x16, 0xfb, 0xf4, 0xf6, 0x3c, 0x70, 0xae, 0x08, 0x67, 0xb2, 0x62,
-	0x65, 0x1f, 0x61, 0x53, 0xe2, 0x79, 0xb2, 0x60, 0x9b, 0xd6, 0x2f, 0x60, 0xbf, 0xa8, 0x5f, 0x97,
-	0xde, 0xf7, 0xa0, 0x3d, 0x47, 0x8b, 0xa1, 0xb6, 0xca, 0x2a, 0xb8, 0x3a, 0xe7, 0x1c, 0xd1, 0x5a,
-	0x66, 0xf8, 0x11, 0x74, 0xd3, 0x32, 0x95, 0x44, 0x2a, 0x79, 0x6d, 0x1e, 0x33, 0x4d, 0xf1, 0xb7,
-	0x32, 0x34, 0x74, 0x38, 0x93, 0x22, 0xf8, 0x06, 0xcb, 0x6c, 0x1b, 0x5a, 0xec, 0x8e, 0x71, 0x32,
-	0x1b, 0xea, 0x62, 0x33, 0xbe, 0x5d, 0xc5, 0xf6, 0xe7, 0x12, 0xb4, 0x52, 0x40, 0xef, 0xed, 0xdf,
-	0xdf, 0x81, 0x56, 0xa8, 0xa0, 0x25, 0xaa, 0x7e, 0xda, 0x83, 0xae, 0x96, 0x97, 0x40, 0x3e, 0x0f,
-	0x47, 0xb5, 0xd0, 0xaf, 0x15, 0x7a, 0x08, 0x6c, 0x28, 0xaa, 0xaf, 0x2e, 0xaa, 0xcf, 0xdc, 0x44,
-	0xf3, 0x62, 0x9f, 0x53, 0x4c, 0x3e, 0xd9, 0xa9, 0xac, 0xe7, 0xd0, 0xf8, 0x64, 0x3b, 0x53, 0xb4,
-	0x46, 0x50, 0x3a, 0xa1, 0x0e, 0xab, 0x1c, 0x4f, 0x33, 0x82, 0x68, 0xdc, 0xa9, 0xfa, 0xb7, 0x7e,
-	0x87, 0x2d, 0x5a, 0x25, 0x89, 0xce, 0xae, 0x67, 0x58, 0x8b, 0x89, 0x23, 0x49, 0x72, 0x2d, 0x74,
-	0x76, 0xf3, 0x09, 0x34, 0x66, 0x4a, 0xbe, 0x2e, 0xd7, 0xc4, 0x7e, 0xad, 0xd5, 0xba, 0x82, 0x7d,
-	0x35, 0xf6, 0xd6, 0x0e, 0xb7, 0x85, 0x19, 0xa0, 0x5c, 0x56, 0x13, 0xed, 0x05, 0xb4, 0x22, 0xc2,
-	0x82, 0x38, 0x42, 0x40, 0x24, 0x0a, 0xed, 0xc1, 0x5e, 0x92, 0x5b, 0x52, 0xf4, 0x99, 0x3e, 0xb5,
-	0xfe, 0x5d, 0x82, 0x6e, 0x7e, 0x4b, 0x94, 0xd8, 0xd8, 0xbb, 0xa2, 0xc1, 0xef, 0xd5, 0x2c, 0x56,
-	0xce, 0x63, 0x96, 0x21, 0x14, 0xe7, 0xd8, 0xf0, 0x50, 0x62, 0x39, 0xb3, 0x35, 0x24, 0x11, 0x0d,
-	0x54, 0x13, 0x34, 0x44, 0x82, 0xe3, 0xd6, 0x97, 0x38, 0xe0, 0xb6, 0x9e, 0xe9, 0x62, 0xde, 0x22,
-	0x84, 0x84, 0x9f, 0x08, 0x20, 0x6b, 0xe9, 0x0c, 0x96, 0x7b, 0x9f, 0xc8, 0x8c, 0xe9, 0x2c, 0x46,
-	0xa5, 0x0a, 0xdc, 0x53, 0x91, 0x14, 0x3a, 0x8f, 0x91, 0x50, 0x6d, 0x9e, 0xdf, 0xd8, 0xa1, 0x4c,
-	0x66, 0x03, 0x2b, 0x66, 0x5b, 0xed, 0xa1, 0xbd, 0x24, 0xba, 0xb6, 0x45, 0x3b, 0x95, 0x79, 0x2d,
-	0x8f, 0xae, 0x48, 0xe4, 0x13, 0xef, 0x53, 0x46, 0x12, 0xc8, 0xa1, 0x78, 0x08, 0x07, 0x0b, 0x98,
-	0xea, 0x6e, 0x65, 0x81, 0xf1, 0xe1, 0x9a, 0x60, 0x3b, 0x48, 0x50, 0x46, 0xbf, 0x44, 0x3a, 0x20,
-	0xa0, 0xb3, 0x50, 0x7a, 0x5f, 0xb5, 0xbe, 0x40, 0x4d, 0xd2, 0x14, 0xe6, 0x81, 0x8a, 0xc7, 0xb2,
-	0x10, 0x18, 0x49, 0x7c, 0xaa, 0x49, 0x8d, 0xce, 0x45, 0xd6, 0xa4, 0xc8, 0x7f, 0x96, 0xa0, 0xf3,
-	0x99, 0xf0, 0x9b, 0x20, 0xba, 0x12, 0x59, 0xc4, 0x0a, 0x2d, 0x10, 0x91, 0x8c, 0x6e, 0x47, 0xe3,
-	0x3b, 0xae, 0xe1, 0xae, 0x0a, 0x30, 0x70, 0x67, 0x68, 0xab, 0xc6, 0x27, 0x87, 0x8e, 0x90, 0x7b,
-	0x76, 0x3b, 0xc2, 0x4a, 0x0e, 0x22, 0x15, 0x67, 0x49, 0x86, 0x5b, 0x6e, 0x14, 0x84, 0x21, 0x71,
-	0x95, 0x2e, 0x21, 0xec, 0x22, 0x11, 0x56, 0x4f, 0xa8, 0x70, 0x27, 0xd4, 0xc2, 0x1a, 0x89, 0xb0,
-	0x8b, 0x54, 0x58, 0x33, 0x43, 0x96, 0x08, 0x6b, 0x49, 0xc3, 0x67, 0xd0, 0xc4, 0x58, 0x5e, 0x32,
-	0x7b, 0x22, 0x53, 0x85, 0x63, 0xac, 0xbd, 0x51, 0x2c, 0x96, 0x0a, 0x2c, 0xd1, 0x1f, 0x42, 0x12,
-	0x61, 0x84, 0xf5, 0x6e, 0x19, 0x0b, 0xa1, 0x6a, 0x3e, 0x80, 0x1d, 0xb9, 0x1c, 0x51, 0x7f, 0xa4,
-	0xa2, 0x34, 0x0b, 0x5c, 0xa2, 0xfd, 0xc0, 0xc8, 0xa5, 0x87, 0xa2, 0x1f, 0xca, 0x23, 0xe9, 0x8f,
-	0x75, 0x01, 0xdd, 0x8b, 0x29, 0xde, 0x3c, 0x39, 0x76, 0x9c, 0xc9, 0x7b, 0x9b, 0xdb, 0xa2, 0x62,
-	0x43, 0x99, 0x74, 0x4c, 0x2b, 0x44, 0x6e, 0xae, 0x48, 0x88, 0x3b, 0x4a, 0x8e, 0x14, 0x68, 0x38,
-	0x73, 0xe7, 0x47, 0xb2, 0xc8, 0xd5, 0xb4, 0xe6, 0xd2, 0x09, 0x05, 0xbc, 0x25, 0xf3, 0x38, 0xe3,
-	0x42, 0x7b, 0xb0, 0x99, 0x54, 0x6d, 0xe2, 0xe8, 0x31, 0x6c, 0xf2, 0xd4, 0x8a, 0x11, 0x26, 0x92,
-	0xad, 0x8b, 0x37, 0x29, 0xab, 0x82, 0x8d, 0xa2, 0x47, 0xca, 0xa6, 0xac, 0xc5, 0x2a, 0xad, 0x0f,
-	0xa1, 0x85, 0x4d, 0x9a, 0x29, 0xb5, 0xe8, 0x86, 0x13, 0x47, 0x11, 0x66, 0x95, 0x4e, 0xb2, 0xcf,
-	0x00, 0x2a, 0x71, 0xa5, 0x04, 0xec, 0xe1, 0x59, 0x50, 0x31, 0x38, 0x33, 0xfb, 0x36, 0x45, 0x54,
-	0x6c, 0xa1, 0x80, 0xaf, 0x36, 0xf5, 0x1c, 0x7d, 0x8f, 0xad, 0x0a, 0x16, 0xd9, 0x52, 0x35, 0x72,
-	0xff, 0x29, 0x41, 0x5b, 0x09, 0x54, 0x0a, 0xf1, 0xd8, 0xc1, 0x16, 0x93, 0x48, 0x3c, 0x4a, 0x14,
-	0xe4, 0x2f, 0x0d, 0x19, 0x13, 0xf0, 0x6e, 0xc1, 0xb0, 0xf0, 0x32, 0x2e, 0x2c, 0x25, 0x7b, 0x0e,
-	0x1d, 0x15, 0x50, 0x4d, 0x58, 0x5d, 0x45, 0xf8, 0x52, 0x8c, 0x25, 0xb4, 0x44, 0xf6, 0xe1, 0xf6,
-	0xe0, 0x51, 0x8e, 0x42, 0xda, 0x78, 0x2c, 0x7f, 0x3f, 0xf8, 0x3c, 0xba, 0xeb, 0xbf, 0x04, 0x98,
-	0xaf, 0x44, 0x39, 0x5d, 0x91, 0x3b, 0x5d, 0x1c, 0xe8, 0xc9, 0xb5, 0xed, 0xc5, 0x1a, 0x88, 0xb7,
-	0xe5, 0x37, 0x25, 0xeb, 0x37, 0xb0, 0xf9, 0x4b, 0xd1, 0xb4, 0x32, 0x2c, 0x48, 0x35, 0xb3, 0xff,
-	0x18, 0x44, 0xda, 0x5f, 0xb1, 0xa4, 0x3e, 0x2e, 0x15, 0x7a, 0x58, 0xbb, 0x41, 0x38, 0x7f, 0x00,
-	0x28, 0x79, 0x0a, 0xb8, 0x7f, 0x55, 0x00, 0xe6, 0xc2, 0xcc, 0xb7, 0xd0, 0xa7, 0xc1, 0x48, 0x34,
-	0x1b, 0xea, 0x10, 0x55, 0x45, 0xa3, 0x88, 0x60, 0xec, 0x18, 0xbd, 0x26, 0xba, 0xcd, 0xef, 0x6b,
-	0x5f, 0x8a, 0x36, 0xfc, 0x08, 0xf6, 0xe6, 0xbc, 0x6e, 0x86, 0xad, 0xbc, 0x96, 0xed, 0x35, 0xec,
-	0x20, 0x1b, 0xb6, 0xa3, 0x38, 0xc7, 0x54, 0x59, 0xcb, 0xf4, 0x53, 0x38, 0xcc, 0xd8, 0x29, 0x92,
-	0x3d, 0xc3, 0x5a, 0x5d, 0xcb, 0xfa, 0x63, 0xd8, 0x47, 0xd6, 0x1b, 0x9b, 0xf2, 0x22, 0x5f, 0xed,
-	0x7f, 0xb0, 0x73, 0x46, 0xa2, 0x49, 0xce, 0xce, 0xfa, 0x5a, 0xa6, 0x1f, 0xc0, 0x36, 0x32, 0x15,
-	0xf4, 0x34, 0xee, 0x63, 0x61, 0xc4, 0xe1, 0xd8, 0x98, 0x32, 0x2c, 0xcd, 0x75, 0x2c, 0xd6, 0x10,
-	0x3a, 0x1f, 0xe3, 0x09, 0xe1, 0xde, 0x38, 0xcd, 0xfe, 0xff, 0xb3, 0x9e, 0xfe, 0x51, 0x86, 0xf6,
-	0xc9, 0x24, 0x0a, 0xe2, 0x30, 0xd7, 0x37, 0x54, 0x4a, 0x2f, 0xf4, 0x0d, 0x45, 0xf3, 0x02, 0x3a,
-	0x6a, 0x5a, 0x69, 0x32, 0x55, 0x6b, 0xe6, 0x62, 0xe6, 0x8b, 0xab, 0xa9, 0x9c, 0xba, 0x9a, 0x30,
-	0x5f, 0x6d, 0x99, 0x6c, 0xfc, 0x19, 0x18, 0x53, 0xe5, 0x97, 0xa6, 0x54, 0x91, 0x7d, 0x96, 0x68,
-	0x9e, 0x1b, 0x78, 0x9c, 0xf5, 0x5f, 0xe1, 0x88, 0x37, 0x14, 0x71, 0xf5, 0x19, 0x25, 0x65, 0x98,
-	0x7d, 0x7b, 0xa6, 0x9d, 0xa9, 0xff, 0x11, 0xb6, 0x17, 0x59, 0x73, 0x05, 0x68, 0x65, 0x0b, 0xb0,
-	0x3d, 0xd8, 0xd1, 0x22, 0xb2, 0x5c, 0xb2, 0x2a, 0x6f, 0xd5, 0x15, 0x29, 0x7d, 0xd5, 0x98, 0xdf,
-	0x07, 0xc3, 0x57, 0x43, 0x2f, 0xc5, 0xad, 0x92, 0x11, 0x90, 0x1b, 0x88, 0x88, 0x9d, 0x23, 0xbd,
-	0x59, 0x8a, 0x5d, 0x36, 0x12, 0xb9, 0xf1, 0xaa, 0x5a, 0xad, 0xbe, 0xc1, 0x2f, 0x7b, 0xed, 0x0e,
-	0xfe, 0x52, 0x87, 0xca, 0xbb, 0xe1, 0xaf, 0xcd, 0x33, 0xd8, 0x2c, 0xbc, 0xd1, 0xcd, 0xa4, 0x27,
-	0x2d, 0xff, 0xba, 0xd0, 0x7f, 0xbc, 0xea, 0x58, 0xdf, 0x25, 0x36, 0x84, 0xcc, 0xc2, 0x45, 0x23,
-	0x95, 0xb9, 0xfc, 0x52, 0x97, 0xca, 0x5c, 0x75, 0x3f, 0xd9, 0x30, 0x7f, 0x02, 0x75, 0xf5, 0xa2,
-	0x37, 0x77, 0x35, 0x6d, 0xee, 0xd3, 0x40, 0x7f, 0xaf, 0xb0, 0x9b, 0x32, 0x9e, 0x82, 0x91, 0xfb,
-	0x80, 0x62, 0x3e, 0xc8, 0xe9, 0xca, 0x7f, 0x10, 0xe8, 0x3f, 0x5c, 0x7e, 0x98, 0x4a, 0x3b, 0x01,
-	0x98, 0xbf, 0x53, 0xcd, 0x9e, 0xa6, 0x5e, 0xf8, 0xb0, 0xd0, 0x3f, 0x5c, 0x72, 0x92, 0x0a, 0xb9,
-	0x84, 0xad, 0xe2, 0x43, 0xd4, 0x2c, 0xa0, 0x5a, 0x7c, 0x36, 0xf6, 0x9f, 0xac, 0x3c, 0xcf, 0x8a,
-	0x2d, 0x3e, 0x47, 0x53, 0xb1, 0x2b, 0x1e, 0xb7, 0xa9, 0xd8, 0x95, 0xef, 0xd8, 0x0d, 0xf3, 0xb7,
-	0xd0, 0xcd, 0xbf, 0x24, 0xcd, 0x04, 0xa4, 0xa5, 0x0f, 0xdc, 0xfe, 0xa3, 0x15, 0xa7, 0xa9, 0xc0,
-	0x1f, 0x42, 0x4d, 0xbd, 0x19, 0x93, 0x8c, 0xcf, 0x3e, 0x33, 0xfb, 0xbb, 0xf9, 0xcd, 0x94, 0xeb,
-	0x15, 0xd4, 0xd5, 0x15, 0x35, 0x4d, 0x80, 0xdc, 0x8d, 0xb5, 0xdf, 0xc9, 0xee, 0x5a, 0x1b, 0xaf,
-	0x4a, 0x89, 0x1e, 0x96, 0xd3, 0xc3, 0x96, 0xe9, 0xc9, 0x04, 0x67, 0x5c, 0x97, 0x9f, 0xf8, 0x5e,
-	0xff, 0x37, 0x00, 0x00, 0xff, 0xff, 0xee, 0xbf, 0x26, 0x33, 0xef, 0x13, 0x00, 0x00,
+	// 2212 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xec, 0x39, 0x4b, 0x73, 0x1c, 0x49,
+	0xd1, 0x9e, 0xa7, 0x34, 0x39, 0x0f, 0x49, 0x6d, 0x3d, 0xc6, 0xb3, 0x6b, 0xaf, 0xbf, 0x8e, 0x0f,
+	0xd6, 0xc0, 0x22, 0x8c, 0xbc, 0x1b, 0x38, 0x20, 0x20, 0x62, 0x2d, 0x1b, 0x30, 0x6b, 0x2d, 0x72,
+	0x4b, 0x8a, 0xbd, 0x10, 0x31, 0xd1, 0x9a, 0x2e, 0xcf, 0x34, 0xea, 0xe9, 0xee, 0xed, 0xae, 0xd1,
+	0xe3, 0xc2, 0x11, 0x6e, 0x1c, 0xb9, 0x10, 0xc1, 0x85, 0x1b, 0x77, 0x0e, 0xfc, 0x02, 0xfe, 0x09,
+	0xb1, 0x3f, 0x81, 0x23, 0x59, 0x95, 0xd5, 0x55, 0xd5, 0xf3, 0x90, 0x96, 0x03, 0xc1, 0x85, 0xcb,
+	0x44, 0xe5, 0xa3, 0x32, 0xb3, 0xf2, 0x55, 0xd9, 0x35, 0xd0, 0xf2, 0xd3, 0x70, 0x3f, 0xcd, 0x12,
+	0x9e, 0x38, 0x0d, 0x7e, 0x93, 0xb2, 0xdc, 0xfd, 0x6d, 0x05, 0xb6, 0xcf, 0xd2, 0xc0, 0xe7, 0xec,
+	0x38, 0x4b, 0x46, 0x2c, 0xcf, 0x3d, 0xf6, 0xe5, 0x8c, 0xe5, 0xdc, 0xe9, 0x41, 0x35, 0x0c, 0xfa,
+	0x95, 0xc7, 0x95, 0x27, 0x2d, 0x0f, 0x57, 0xce, 0x26, 0xd4, 0x52, 0x44, 0x54, 0x25, 0x42, 0x2c,
+	0x9d, 0x47, 0x00, 0xa3, 0x28, 0xc9, 0xd9, 0x09, 0x0f, 0xc2, 0xb8, 0x5f, 0x43, 0xc2, 0xba, 0x67,
+	0x61, 0x9c, 0x6d, 0x68, 0x5c, 0x85, 0x01, 0x9f, 0xf4, 0xeb, 0x48, 0xea, 0x7a, 0x04, 0x38, 0xbb,
+	0xd0, 0x9c, 0xb0, 0x70, 0x3c, 0xe1, 0xfd, 0x86, 0x44, 0x2b, 0xc8, 0xdd, 0x83, 0x9d, 0x39, 0x3b,
+	0xf2, 0x34, 0x89, 0x73, 0xe6, 0x7e, 0x55, 0x81, 0xdd, 0xc3, 0x8c, 0x21, 0xe5, 0x30, 0x89, 0xb9,
+	0x1f, 0xc6, 0x2c, 0x5b, 0x65, 0x23, 0x5a, 0x74, 0x3e, 0x8b, 0x83, 0x88, 0x1d, 0xfb, 0xa8, 0x96,
+	0x4c, 0xb5, 0x30, 0xd2, 0xe2, 0x09, 0x1b, 0x5d, 0xa4, 0x49, 0x18, 0x73, 0x69, 0x31, 0xd2, 0x0d,
+	0x46, 0x58, 0x9c, 0xcb, 0xc3, 0xd4, 0x25, 0x89, 0x00, 0x61, 0x31, 0x2e, 0x92, 0x19, 0x59, 0xdc,
+	0xf2, 0x14, 0xa4, 0xf0, 0x2c, 0xcb, 0xfa, 0x4d, 0x8d, 0x47, 0x48, 0xe0, 0x23, 0xff, 0x9c, 0x45,
+	0x79, 0x7f, 0xed, 0x71, 0x4d, 0xe0, 0x09, 0x72, 0x1e, 0x43, 0x3b, 0x4e, 0x8e, 0xc3, 0xcb, 0x84,
+	0x7b, 0x49, 0xc2, 0xfb, 0xeb, 0xd2, 0x61, 0x36, 0xca, 0x7d, 0x0d, 0x7b, 0x0b, 0x27, 0x25, 0x2f,
+	0x38, 0xfb, 0xd0, 0x1a, 0x15, 0x48, 0x79, 0xe2, 0xf6, 0xc1, 0xe6, 0xbe, 0x0c, 0xe1, 0xbe, 0x61,
+	0x36, 0x2c, 0x28, 0xaa, 0x7b, 0x12, 0x8e, 0x63, 0x3f, 0xfa, 0xfa, 0xf1, 0x14, 0xe7, 0x91, 0x5b,
+	0xa4, 0x67, 0x30, 0x32, 0x04, 0xb9, 0x9b, 0xd0, 0x2b, 0x44, 0xa9, 0x90, 0xfc, 0xb5, 0x06, 0x5b,
+	0x9f, 0x06, 0xc1, 0x1d, 0x19, 0x33, 0x80, 0x75, 0xce, 0xb2, 0x69, 0x28, 0x24, 0x56, 0xe5, 0x61,
+	0x35, 0xec, 0x7c, 0x00, 0xf5, 0x59, 0x8e, 0x27, 0xa9, 0xc9, 0x93, 0xb4, 0xd5, 0x49, 0xce, 0x10,
+	0xe5, 0x49, 0x82, 0xe3, 0x40, 0xdd, 0xcf, 0xc6, 0x39, 0x46, 0x42, 0xb8, 0x50, 0xae, 0x85, 0xc9,
+	0x2c, 0xbe, 0xc4, 0x28, 0x08, 0x94, 0x58, 0x0a, 0xcc, 0xe8, 0x2a, 0x50, 0xfe, 0x17, 0xcb, 0xe2,
+	0x58, 0x6b, 0xe6, 0x58, 0x3a, 0xa8, 0xeb, 0xcb, 0x83, 0xda, 0x5a, 0x11, 0x54, 0x28, 0x05, 0xd5,
+	0x85, 0xce, 0xc8, 0x4f, 0xfd, 0xf3, 0x30, 0x0a, 0x79, 0xc8, 0xf2, 0x7e, 0x5b, 0x1a, 0x51, 0xc2,
+	0x39, 0x4f, 0x60, 0xc3, 0x4f, 0x53, 0x3f, 0x9b, 0x26, 0x19, 0xba, 0xe6, 0x5d, 0x18, 0xb1, 0x7e,
+	0x47, 0x0a, 0x99, 0x47, 0x0b, 0x69, 0x39, 0x8b, 0xc2, 0x78, 0x76, 0xfd, 0x46, 0xe4, 0x46, 0xbf,
+	0x2b, 0xd9, 0x4a, 0x38, 0x21, 0x2d, 0x4e, 0x3e, 0x67, 0x57, 0xc7, 0x59, 0x78, 0x89, 0x7b, 0xc6,
+	0xa8, 0xb4, 0x27, 0xbd, 0x38, 0x8f, 0x76, 0x3e, 0x84, 0xb5, 0x2c, 0x0a, 0xa7, 0x21, 0xcf, 0xfb,
+	0x1b, 0x68, 0x56, 0xfb, 0xa0, 0xab, 0xfc, 0xe9, 0x49, 0xac, 0x57, 0x50, 0xdd, 0x97, 0xd0, 0x24,
+	0x94, 0x70, 0xaf, 0x60, 0x51, 0xd1, 0x92, 0x6b, 0x81, 0xcb, 0x93, 0x77, 0x5c, 0xc6, 0xaa, 0xee,
+	0xc9, 0xb5, 0xc0, 0x4d, 0xfc, 0x2c, 0x90, 0x71, 0x42, 0x9c, 0x58, 0xbb, 0x1e, 0xd4, 0x45, 0xa0,
+	0x84, 0xab, 0x67, 0x2a, 0xe0, 0x5d, 0x4f, 0x2c, 0x05, 0x66, 0xac, 0x72, 0x0a, 0x31, 0xb8, 0x74,
+	0xbe, 0x09, 0x3d, 0x3f, 0x08, 0xd0, 0x3d, 0x09, 0x46, 0xfd, 0x67, 0x61, 0x90, 0xa3, 0xa4, 0x1a,
+	0x12, 0xe7, 0xb0, 0xee, 0x36, 0x38, 0x76, 0x42, 0xa9, 0x3c, 0xfb, 0x95, 0xae, 0x07, 0x5d, 0xa3,
+	0xab, 0x92, 0xed, 0xfb, 0xa5, 0xd2, 0xae, 0xca, 0xb4, 0xda, 0x2a, 0x0a, 0xc4, 0xec, 0xb6, 0x98,
+	0xdc, 0x01, 0xf4, 0x17, 0xa5, 0x2b, 0xcd, 0x3f, 0x86, 0xbd, 0x97, 0x2c, 0x62, 0x5f, 0x47, 0x33,
+	0xba, 0x28, 0xf6, 0xa7, 0x4c, 0x55, 0x92, 0x5c, 0x0b, 0xd1, 0x8b, 0xdb, 0x95, 0xe8, 0x0f, 0x61,
+	0xe7, 0x4d, 0x98, 0xf3, 0x3b, 0x05, 0xbb, 0xbf, 0x01, 0x30, 0x4c, 0x5a, 0x4d, 0xc5, 0xa8, 0x11,
+	0x38, 0x76, 0x1d, 0x72, 0x55, 0x5d, 0x72, 0x2d, 0x62, 0xc0, 0x47, 0xa9, 0x6a, 0xc7, 0x62, 0x29,
+	0xfa, 0xce, 0x2c, 0x0e, 0xaf, 0x4f, 0x92, 0xd1, 0x05, 0xe3, 0xb9, 0xec, 0x6d, 0xd8, 0x77, 0x2c,
+	0x94, 0x2c, 0x91, 0x09, 0x8b, 0x22, 0xd9, 0xe0, 0xd6, 0x3d, 0x02, 0xdc, 0x23, 0xd8, 0x9d, 0x37,
+	0x54, 0x35, 0xa3, 0x67, 0xd0, 0x36, 0x7e, 0xcc, 0xd1, 0xa4, 0xda, 0x72, 0x6f, 0xdb, 0x5c, 0xee,
+	0x23, 0xe8, 0x9c, 0x70, 0xf4, 0xf6, 0xaa, 0xe3, 0x3e, 0x81, 0x9e, 0xee, 0x64, 0x92, 0x91, 0x6a,
+	0xd1, 0xe7, 0xb3, 0x5c, 0x71, 0x29, 0xc8, 0xfd, 0x5b, 0x0d, 0xd6, 0x54, 0xaa, 0x14, 0xf5, 0x5e,
+	0x31, 0xf5, 0xfe, 0x5f, 0x69, 0x3b, 0xef, 0x43, 0x2b, 0xbf, 0xc9, 0x39, 0x9b, 0x1e, 0xab, 0xe6,
+	0xd3, 0xf5, 0x0c, 0xe2, 0x7f, 0x2d, 0xc8, 0xb4, 0xa0, 0xbf, 0x57, 0xa0, 0xa5, 0xc3, 0xfc, 0x6f,
+	0x5f, 0xe0, 0x1f, 0x41, 0x2b, 0xa5, 0xc0, 0x33, 0xea, 0x24, 0xed, 0x83, 0x9e, 0x52, 0x54, 0xf4,
+	0x0e, 0xc3, 0x60, 0xe5, 0x4f, 0xdd, 0xce, 0x1f, 0xeb, 0x82, 0x6e, 0x94, 0x2e, 0x68, 0x0c, 0x7e,
+	0x2a, 0x5a, 0x54, 0x53, 0xb6, 0x28, 0xb9, 0x76, 0xfa, 0x78, 0xb0, 0x59, 0xcc, 0x43, 0xac, 0x3c,
+	0xba, 0x53, 0x0a, 0xd0, 0xfd, 0x04, 0xd6, 0x8e, 0xfc, 0xd1, 0x04, 0xcf, 0x21, 0x36, 0x8e, 0x52,
+	0x95, 0xa6, 0xb8, 0x51, 0xac, 0x85, 0x92, 0x29, 0x43, 0x7f, 0xdf, 0xa8, 0x7e, 0xaa, 0x20, 0xf7,
+	0x02, 0x2f, 0x66, 0x2a, 0x03, 0x55, 0x4c, 0x4f, 0xb1, 0x73, 0x15, 0x0e, 0x29, 0x6a, 0x69, 0xf1,
+	0x6a, 0xb7, 0x78, 0x30, 0x2c, 0x6b, 0x53, 0xd2, 0xac, 0x1a, 0x5d, 0xe1, 0x03, 0x65, 0x8f, 0x57,
+	0x90, 0xdd, 0xdf, 0xe1, 0xec, 0x44, 0x53, 0xd5, 0x9d, 0xb3, 0xd3, 0xf2, 0x79, 0x80, 0xdc, 0x57,
+	0x2b, 0xb9, 0xef, 0x19, 0xb4, 0x32, 0x96, 0x27, 0xb3, 0x0c, 0xdd, 0x2c, 0x3d, 0xdb, 0x3e, 0xd8,
+	0x29, 0x2a, 0x49, 0xea, 0xf2, 0x14, 0xd5, 0x33, 0x7c, 0xee, 0x57, 0x55, 0xe8, 0x95, 0xa9, 0xa2,
+	0x2f, 0x9d, 0x47, 0x17, 0x61, 0xf2, 0x05, 0x8d, 0x83, 0xe4, 0x3c, 0x1b, 0x25, 0xaa, 0x0a, 0x7d,
+	0x79, 0x82, 0xb7, 0x0e, 0x6a, 0xa2, 0x5b, 0xc5, 0x20, 0x14, 0xf5, 0x98, 0x65, 0x61, 0x12, 0xa8,
+	0x91, 0xc5, 0x20, 0x44, 0x1b, 0x40, 0xe0, 0xed, 0x2c, 0xe1, 0xbe, 0x1a, 0x40, 0x35, 0x2c, 0xe7,
+	0x40, 0x8c, 0x11, 0xe3, 0x87, 0x22, 0x6a, 0x0d, 0x35, 0x07, 0x6a, 0x8c, 0xa1, 0x1f, 0xb1, 0x69,
+	0xae, 0xca, 0xdc, 0xc2, 0x08, 0xcb, 0x29, 0x9a, 0x6f, 0x44, 0x52, 0xab, 0x7a, 0xb7, 0x51, 0x42,
+	0x02, 0x81, 0x27, 0x57, 0x7e, 0x2a, 0xcb, 0xbe, 0xeb, 0x59, 0x18, 0x4c, 0xe4, 0x2d, 0x82, 0xd0,
+	0x1b, 0x2c, 0xbb, 0xf4, 0xc5, 0x55, 0x28, 0xdb, 0x40, 0xd7, 0x5b, 0x24, 0x08, 0xee, 0x0b, 0x96,
+	0xc5, 0x2c, 0x3a, 0xb2, 0xb4, 0x02, 0x71, 0x2f, 0x10, 0xdc, 0x07, 0xb0, 0xb7, 0x10, 0x73, 0x75,
+	0xf7, 0x7c, 0x17, 0xba, 0xaf, 0x2e, 0x19, 0x76, 0xe3, 0x22, 0x0b, 0xd0, 0x87, 0x22, 0x99, 0x31,
+	0xb2, 0xd3, 0x54, 0x46, 0xa0, 0xee, 0x19, 0x84, 0x9b, 0x43, 0x43, 0xb2, 0x2f, 0x1d, 0x17, 0x28,
+	0x81, 0xaa, 0x3a, 0x81, 0xca, 0xe9, 0xd2, 0xd5, 0xe9, 0xa2, 0x12, 0xab, 0x6e, 0x12, 0xab, 0xa4,
+	0xb4, 0x31, 0xaf, 0xf4, 0xf7, 0x55, 0xe8, 0x7c, 0xce, 0xf8, 0x55, 0x92, 0x5d, 0x88, 0x42, 0xc9,
+	0x97, 0xde, 0x7c, 0x0f, 0x60, 0x3d, 0xbb, 0x1e, 0x9e, 0xdf, 0x70, 0x95, 0x18, 0x75, 0xac, 0xcb,
+	0xeb, 0x17, 0x02, 0x74, 0x1e, 0x02, 0x20, 0xe9, 0xd8, 0xa7, 0xdb, 0x8e, 0x06, 0x97, 0x56, 0x76,
+	0xad, 0x10, 0xce, 0x7b, 0xd0, 0xf2, 0xae, 0x87, 0xd8, 0x4f, 0x93, 0x8c, 0xb2, 0xb7, 0xee, 0xa1,
+	0xa8, 0x57, 0x12, 0x16, 0x7b, 0x91, 0x18, 0x64, 0x49, 0x9a, 0xb2, 0xa0, 0x30, 0x2d, 0xbb, 0x7e,
+	0x49, 0x08, 0xa1, 0xf5, 0xb4, 0xd0, 0xda, 0x24, 0xad, 0xdc, 0x68, 0x45, 0x52, 0xaa, 0xb4, 0xae,
+	0xa9, 0x43, 0xd9, 0x5a, 0x4f, 0xb5, 0xd6, 0x75, 0xd2, 0xca, 0x2d, 0xad, 0xa7, 0x46, 0x6b, 0xab,
+	0xd8, 0xab, 0xb4, 0xba, 0x7f, 0xa9, 0xc0, 0x3a, 0xa6, 0xe5, 0x59, 0xee, 0x8f, 0x19, 0xde, 0x60,
+	0x6d, 0x8e, 0x29, 0x1c, 0x0d, 0x67, 0x02, 0x54, 0x21, 0x03, 0x89, 0x22, 0x86, 0xff, 0x83, 0x4e,
+	0xca, 0x32, 0x4c, 0x56, 0xc5, 0x51, 0xc5, 0x86, 0x52, 0xf7, 0xda, 0x84, 0x23, 0x96, 0x7d, 0xb8,
+	0x2f, 0x69, 0xc3, 0x30, 0x1e, 0x52, 0xfa, 0x4c, 0x93, 0x80, 0x29, 0x57, 0x6d, 0x49, 0xd2, 0xeb,
+	0xf8, 0x33, 0x4d, 0x70, 0xbe, 0x0d, 0x5b, 0x9a, 0x5f, 0xdc, 0x92, 0x92, 0x9b, 0x5c, 0xb7, 0xa1,
+	0xb8, 0xcf, 0x14, 0x1a, 0x87, 0x96, 0xde, 0xe9, 0x04, 0x3f, 0x30, 0x39, 0x5e, 0x23, 0xe3, 0x97,
+	0x3e, 0x16, 0x1b, 0x76, 0xd0, 0x54, 0x96, 0x64, 0xae, 0xac, 0x2d, 0x40, 0xe7, 0x3b, 0xb0, 0xc5,
+	0x89, 0x97, 0x05, 0xc3, 0x82, 0x87, 0xa2, 0xb9, 0xa9, 0x09, 0xc7, 0x8a, 0xf9, 0x1b, 0xd0, 0x33,
+	0xcc, 0xb2, 0x1f, 0x93, 0xbd, 0x5d, 0x8d, 0x3d, 0x15, 0x5d, 0xf9, 0x8f, 0xe4, 0x2c, 0xca, 0x9c,
+	0x8f, 0x64, 0x87, 0xb0, 0x5c, 0xd5, 0x3e, 0xd8, 0x28, 0x3a, 0xab, 0x72, 0x86, 0xec, 0x0a, 0xe4,
+	0x96, 0x9f, 0xc0, 0x06, 0xd7, 0xa6, 0x0f, 0xb1, 0x80, 0x7c, 0xd5, 0x5e, 0x8b, 0xee, 0x56, 0x3e,
+	0x98, 0xd7, 0xe3, 0xe5, 0x83, 0xa2, 0xe7, 0xe9, 0xca, 0x57, 0x0a, 0xc9, 0xbe, 0x36, 0xe1, 0xa4,
+	0x0a, 0xf7, 0x47, 0xd0, 0xc2, 0x79, 0x20, 0x27, 0xeb, 0xd0, 0x31, 0xa3, 0x59, 0x96, 0x61, 0x7d,
+	0x15, 0x8e, 0x51, 0xa0, 0x98, 0x17, 0xe4, 0x75, 0xa9, 0x9c, 0x41, 0x80, 0x9b, 0x00, 0x50, 0x99,
+	0x4b, 0x6d, 0xc8, 0x63, 0xa7, 0x00, 0x01, 0x22, 0xcf, 0xa6, 0xfe, 0xb5, 0x0e, 0xbd, 0xcc, 0x33,
+	0x44, 0xd0, 0x01, 0x51, 0xe1, 0x3b, 0x3f, 0x8c, 0x46, 0xea, 0xdb, 0x17, 0x15, 0x2a, 0xd0, 0x28,
+	0xac, 0xdb, 0x0a, 0xff, 0x5c, 0x85, 0x36, 0x69, 0x24, 0x83, 0x91, 0x6b, 0x84, 0x17, 0x8b, 0x56,
+	0x29, 0x01, 0xbc, 0xfa, 0x1b, 0x46, 0x9d, 0x19, 0x03, 0x8d, 0xa9, 0x85, 0x6d, 0x78, 0xd1, 0xe5,
+	0xd8, 0xfb, 0x2c, 0xef, 0x2c, 0xe5, 0x6e, 0x09, 0x26, 0x32, 0xf8, 0x63, 0xe8, 0x50, 0x7e, 0xaa,
+	0x3d, 0xf5, 0x55, 0x7b, 0xda, 0xc4, 0x46, 0xbb, 0x9e, 0x89, 0x69, 0x0b, 0xed, 0x95, 0xb7, 0x7b,
+	0xfb, 0xe0, 0x61, 0x89, 0x5d, 0x9e, 0x64, 0x5f, 0xfe, 0xbe, 0x8a, 0x39, 0xb6, 0x59, 0xe2, 0x1d,
+	0x3c, 0x07, 0x30, 0x48, 0xd1, 0xb3, 0x2e, 0xd8, 0x4d, 0x31, 0x55, 0xe2, 0x52, 0x9c, 0xfd, 0xd2,
+	0x8f, 0x66, 0x85, 0x53, 0x09, 0xf8, 0x61, 0xf5, 0x79, 0xc5, 0x1d, 0xc1, 0xc6, 0x0b, 0x71, 0x67,
+	0x59, 0xdb, 0x91, 0x79, 0xea, 0xff, 0x3a, 0xc9, 0x0a, 0x47, 0x49, 0x40, 0x62, 0xc3, 0x18, 0xb1,
+	0x4a, 0x84, 0x04, 0x44, 0x1b, 0x4d, 0x52, 0x75, 0xc3, 0xe2, 0xca, 0x28, 0xaa, 0x5b, 0x8a, 0xdc,
+	0x7f, 0xd4, 0x01, 0x8c, 0x16, 0xe7, 0x04, 0x06, 0x61, 0x32, 0x14, 0x17, 0x44, 0x38, 0x62, 0xd4,
+	0x90, 0x86, 0x19, 0xc3, 0xf4, 0xc9, 0xc3, 0x4b, 0xa6, 0x66, 0x88, 0x5d, 0x75, 0xee, 0x39, 0xe3,
+	0xbc, 0x3d, 0x84, 0x68, 0xa3, 0xec, 0x5c, 0x5e, 0xb1, 0xcd, 0xf9, 0x05, 0xec, 0x18, 0xa1, 0x81,
+	0x25, 0xaf, 0x7a, 0xab, 0xbc, 0xfb, 0x5a, 0x5e, 0x60, 0x64, 0xfd, 0x14, 0x10, 0x3d, 0xc4, 0x3b,
+	0x66, 0x56, 0x92, 0x54, 0xbb, 0x55, 0xd2, 0x56, 0x98, 0xbc, 0x95, 0x3b, 0x8c, 0x9c, 0xb7, 0xf0,
+	0xc0, 0x3a, 0xa8, 0x28, 0x7b, 0x4b, 0x5a, 0xfd, 0x56, 0x69, 0xbb, 0xda, 0x2e, 0xd1, 0x18, 0x8c,
+	0xc8, 0xcf, 0x00, 0x29, 0xc3, 0x2b, 0x3f, 0xe4, 0xf3, 0xf2, 0x1a, 0x77, 0x9d, 0xf3, 0x0b, 0xdc,
+	0x54, 0x16, 0x46, 0xe7, 0x9c, 0xb2, 0x6c, 0x5c, 0x3a, 0x67, 0xf3, 0xae, 0x73, 0x1e, 0xc9, 0x1d,
+	0x46, 0xce, 0x0b, 0x40, 0xe4, 0xbc, 0x3d, 0x6b, 0xb7, 0x4a, 0xd9, 0x08, 0x93, 0xb2, 0x2d, 0x87,
+	0xb0, 0x95, 0xb3, 0x11, 0xc7, 0x1b, 0xc5, 0x92, 0xb1, 0x7e, 0xab, 0x8c, 0x4d, 0xb5, 0x41, 0x0b,
+	0x71, 0xbf, 0x84, 0xce, 0xcf, 0x67, 0x63, 0xc6, 0xa3, 0x73, 0x5d, 0xf3, 0xff, 0xe9, 0x36, 0xf3,
+	0x4f, 0x6c, 0x33, 0x87, 0xe3, 0x2c, 0x99, 0xa5, 0xa5, 0xae, 0x4d, 0x35, 0xbc, 0xd0, 0xb5, 0x25,
+	0x8f, 0xec, 0xda, 0xc4, 0xfd, 0x09, 0x74, 0x68, 0x60, 0x52, 0x1b, 0xa8, 0x0b, 0x39, 0x8b, 0x45,
+	0x5f, 0x0c, 0x68, 0xb4, 0xed, 0x40, 0x0d, 0x9f, 0x6a, 0x57, 0xb9, 0x1b, 0x19, 0x37, 0xe1, 0xd7,
+	0x87, 0xa9, 0xba, 0xd7, 0xd0, 0x9d, 0x90, 0x6f, 0xd4, 0x2e, 0x4a, 0xc0, 0xff, 0x2f, 0x8c, 0x33,
+	0x67, 0xd8, 0xb7, 0x7d, 0x48, 0xae, 0xee, 0x4c, 0x6c, 0xb7, 0x7e, 0x0f, 0x40, 0x7c, 0x5e, 0x0c,
+	0x8b, 0x46, 0x65, 0xbf, 0xe7, 0xe9, 0x1b, 0x02, 0xbf, 0x65, 0x8a, 0xe5, 0xe0, 0x14, 0xb6, 0x16,
+	0x64, 0x2e, 0x69, 0x53, 0xdf, 0xb2, 0xdb, 0x54, 0xfb, 0xe0, 0xbe, 0x12, 0x69, 0x6f, 0xb5, 0x7b,
+	0xd7, 0x9f, 0x2a, 0xf4, 0x35, 0xa2, 0x9f, 0x5c, 0x9c, 0xe7, 0xd0, 0x8d, 0x69, 0xf8, 0xd2, 0x01,
+	0xa8, 0x59, 0x82, 0xec, 0xc1, 0xcc, 0xeb, 0xc4, 0xf6, 0x98, 0x86, 0x81, 0x18, 0x49, 0x0f, 0x2c,
+	0x0d, 0x84, 0xe5, 0x1c, 0xaf, 0x3d, 0xb2, 0xa2, 0x5d, 0x1a, 0x06, 0x6b, 0xf3, 0xc3, 0xa0, 0x7a,
+	0x34, 0x58, 0xf5, 0xc6, 0x78, 0xf0, 0x87, 0x26, 0xd4, 0x3e, 0x3d, 0x7e, 0xed, 0x78, 0xb0, 0x31,
+	0xf7, 0x72, 0xea, 0x14, 0x7d, 0x7f, 0xf9, 0xdb, 0xf1, 0xe0, 0xd1, 0x2a, 0xb2, 0x1a, 0x95, 0xef,
+	0x09, 0x99, 0x73, 0x73, 0xb4, 0x96, 0xb9, 0xfc, 0x9b, 0x4a, 0xcb, 0x5c, 0x35, 0x7e, 0xdf, 0x73,
+	0x7e, 0x00, 0x4d, 0x7a, 0x4b, 0x75, 0xb6, 0x15, 0x6f, 0xe9, 0x95, 0x76, 0xb0, 0x33, 0x87, 0xd5,
+	0x1b, 0xdf, 0x40, 0xb7, 0xf4, 0x3c, 0xee, 0xbc, 0x57, 0xd2, 0x55, 0x7e, 0x8a, 0x1d, 0xbc, 0xbf,
+	0x9c, 0xa8, 0xa5, 0x1d, 0x02, 0x98, 0xe7, 0x36, 0xa7, 0xaf, 0xb8, 0x17, 0x9e, 0x74, 0x07, 0x0f,
+	0x96, 0x50, 0xb4, 0x90, 0x33, 0xd8, 0x9c, 0x7f, 0x3f, 0x73, 0xe6, 0xbc, 0x3a, 0xff, 0xc6, 0x35,
+	0xf8, 0x60, 0x25, 0xdd, 0x16, 0x3b, 0xff, 0x76, 0xa6, 0xc5, 0xae, 0x78, 0x93, 0xd3, 0x62, 0x57,
+	0x3e, 0xba, 0xdd, 0x73, 0x7e, 0x09, 0xbd, 0xf2, 0x6b, 0x96, 0x53, 0x38, 0x69, 0xe9, 0x6b, 0xdc,
+	0xe0, 0xe1, 0x0a, 0xaa, 0x16, 0xf8, 0x31, 0x34, 0xe8, 0x99, 0xaa, 0xa8, 0x0d, 0xfb, 0x75, 0x6b,
+	0xb0, 0x5d, 0x46, 0xea, 0x5d, 0x4f, 0xa1, 0x49, 0x5f, 0x60, 0x3a, 0x01, 0x4a, 0x1f, 0x64, 0x83,
+	0x8e, 0x8d, 0x75, 0xef, 0x3d, 0xad, 0x14, 0x7a, 0xf2, 0x92, 0x9e, 0x7c, 0x99, 0x1e, 0x2b, 0x38,
+	0xe7, 0x4d, 0xf9, 0x2f, 0xcf, 0xb3, 0x7f, 0x05, 0x00, 0x00, 0xff, 0xff, 0x9a, 0x70, 0x70, 0x7d,
+	0xf2, 0x19, 0x00, 0x00,
 }
diff --git a/vendor/src/github.com/docker/containerd/api/grpc/types/api.proto b/vendor/src/github.com/docker/containerd/api/grpc/types/api.proto
index 8cc1477..da26b1b 100644
--- a/vendor/src/github.com/docker/containerd/api/grpc/types/api.proto
+++ b/vendor/src/github.com/docker/containerd/api/grpc/types/api.proto
@@ -232,6 +232,7 @@
 
 message PidsStats {
 	uint64 current = 1;
+	uint64 limit = 2;
 }
 
 message MemoryData {
diff --git a/vendor/src/github.com/docker/distribution/.drone.yml b/vendor/src/github.com/docker/distribution/.drone.yml
deleted file mode 100644
index d943e19..0000000
--- a/vendor/src/github.com/docker/distribution/.drone.yml
+++ /dev/null
@@ -1,38 +0,0 @@
-image: dmp42/go:stable
-
-script:
-  # To be spoofed back into the test image
-  - go get github.com/modocache/gover
-
-  - go get -t ./...
-
-  # Go fmt
-  - test -z "$(gofmt -s -l -w .     | tee /dev/stderr)"
-  # Go lint
-  - test -z "$(golint ./...          | tee /dev/stderr)"
-  # Go vet
-  - go vet ./...
-  # Go test
-  - go test -v -race -cover ./...
-  # Helper to concatenate reports
-  - gover
-  # Send to coverall
-  - goveralls -service drone.io -coverprofile=gover.coverprofile -repotoken {{COVERALLS_TOKEN}}
-
-  # Do we want these as well?
-  # - go get code.google.com/p/go.tools/cmd/goimports
-  # - test -z "$(goimports -l -w ./... | tee /dev/stderr)"
-  # http://labix.org/gocheck
-
-notify:
-    email:
-        recipients:
-            - distribution@docker.com
-
-    slack:
-        team: docker
-        channel: "#dt"
-        username: mom
-        token: {{SLACK_TOKEN}}
-        on_success: true
-        on_failure: true
diff --git a/vendor/src/github.com/docker/distribution/.mailmap b/vendor/src/github.com/docker/distribution/.mailmap
index e4e50ee..f0452da 100644
--- a/vendor/src/github.com/docker/distribution/.mailmap
+++ b/vendor/src/github.com/docker/distribution/.mailmap
@@ -13,3 +13,4 @@
 Sven Dowideit <SvenDowideit@home.org.au> Sven Dowideit <SvenDowideit@users.noreply.github.com>
 Vincent Giersch <vincent.giersch@ovh.net> Vincent Giersch <vincent@giersch.fr>
 davidli <wenquan.li@hp.com> davidli <wenquan.li@hpe.com>
+Omer Cohen <git@omer.io> Omer Cohen <git@omerc.net>
\ No newline at end of file
diff --git a/vendor/src/github.com/docker/distribution/AUTHORS b/vendor/src/github.com/docker/distribution/AUTHORS
index a44266b..0857b62 100644
--- a/vendor/src/github.com/docker/distribution/AUTHORS
+++ b/vendor/src/github.com/docker/distribution/AUTHORS
@@ -8,12 +8,15 @@
 amitshukla <ashukla73@hotmail.com>
 Amy Lindburg <amy.lindburg@docker.com>
 Andrew Meredith <andymeredith@gmail.com>
+Andrew T Nguyen <andrew.nguyen@docker.com>
 Andrey Kostov <kostov.andrey@gmail.com>
 Andy Goldstein <agoldste@redhat.com>
 Anton Tiurin <noxiouz@yandex.ru>
 Antonio Mercado <amercado@thinknode.com>
+Antonio Murdaca <runcom@redhat.com>
 Arnaud Porterie <arnaud.porterie@docker.com>
 Arthur Baars <arthur@semmle.com>
+Asuka Suzuki <hello@tanksuzuki.com>
 Avi Miller <avi.miller@oracle.com>
 Ayose Cazorla <ayosec@gmail.com>
 BadZen <dave.trombley@gmail.com>
@@ -37,7 +40,9 @@
 DJ Enriquez <dj.enriquez@infospace.com>
 Donald Huang <don.hcd@gmail.com>
 Doug Davis <dug@us.ibm.com>
+Eric Yang <windfarer@gmail.com>
 farmerworking <farmerworking@gmail.com>
+Felix Yan <felixonmars@archlinux.org>
 Florentin Raud <florentin.raud@gmail.com>
 Frederick F. Kautz IV <fkautz@alumni.cmu.edu>
 gabriell nascimento <gabriell@bluesoft.com.br>
@@ -45,29 +50,36 @@
 Henri Gomez <henri.gomez@gmail.com>
 Hu Keping <hukeping@huawei.com>
 Hua Wang <wanghua.humble@gmail.com>
+HuKeping <hukeping@huawei.com>
 Ian Babrou <ibobrik@gmail.com>
+igayoso <igayoso@gmail.com>
 Jack Griffin <jackpg14@gmail.com>
 Jason Freidman <jason.freidman@gmail.com>
 Jeff Nickoloff <jeff@allingeek.com>
 Jessie Frazelle <jessie@docker.com>
 Jianqing Wang <tsing@jianqing.org>
+John Starks <jostarks@microsoft.com>
 Jon Poler <jonathan.poler@apcera.com>
 Jonathan Boulle <jonathanboulle@gmail.com>
 Jordan Liggitt <jliggitt@redhat.com>
 Josh Hawn <josh.hawn@docker.com>
 Julien Fernandez <julien.fernandez@gmail.com>
+Keerthan Mala <kmala@engineyard.com>
 Kelsey Hightower <kelsey.hightower@gmail.com>
 Kenneth Lim <kennethlimcp@gmail.com>
 Kenny Leung <kleung@google.com>
 Li Yi <denverdino@gmail.com>
 Liu Hua <sdu.liu@huawei.com>
+liuchang0812 <liuchang0812@gmail.com>
 Louis Kottmann <louis.kottmann@gmail.com>
 Luke Carpenter <x@rubynerd.net>
 Mary Anthony <mary@docker.com>
 Matt Bentley <mbentley@mbentley.net>
+Matt Duch <matt@learnmetrics.com>
 Matt Moore <mattmoor@google.com>
 Matt Robenolt <matt@ydekproductions.com>
 Michael Prokop <mika@grml.org>
+Michal Minar <miminar@redhat.com>
 Miquel Sabaté <msabate@suse.com>
 Morgan Bauer <mbauer@us.ibm.com>
 moxiegirl <mary@docker.com>
@@ -78,6 +90,7 @@
 Oilbeater <liumengxinfly@gmail.com>
 Olivier Gambier <olivier@docker.com>
 Olivier Jacques <olivier.jacques@hp.com>
+Omer Cohen <git@omer.io>
 Patrick Devine <patrick.devine@docker.com>
 Philip Misiowiec <philip@atlashealth.com>
 Richard Scothern <richard.scothern@docker.com>
@@ -90,6 +103,7 @@
 Shreyas Karnik <karnik.shreyas@gmail.com>
 Simon Thulbourn <simon+github@thulbourn.com>
 Spencer Rinehart <anubis@overthemonkey.com>
+Stefan Weil <sw@weilnetz.de>
 Stephen J Day <stephen.day@docker.com>
 Sungho Moon <sungho.moon@navercorp.com>
 Sven Dowideit <SvenDowideit@home.org.au>
@@ -111,3 +125,4 @@
 xiekeyang <xiekeyang@huawei.com>
 Yann ROBERT <yann.robert@anantaplex.fr>
 yuzou <zouyu7@huawei.com>
+姜继忠 <jizhong.jiangjz@alibaba-inc.com>
diff --git a/vendor/src/github.com/docker/distribution/Dockerfile b/vendor/src/github.com/docker/distribution/Dockerfile
index 0ab9629..abb3e3b 100644
--- a/vendor/src/github.com/docker/distribution/Dockerfile
+++ b/vendor/src/github.com/docker/distribution/Dockerfile
@@ -1,11 +1,10 @@
-FROM golang:1.5.3
+FROM golang:1.6
 
 RUN apt-get update && \
     apt-get install -y apache2-utils && \
     rm -rf /var/lib/apt/lists/*
 
 ENV DISTRIBUTION_DIR /go/src/github.com/docker/distribution
-ENV GOPATH $DISTRIBUTION_DIR/Godeps/_workspace:$GOPATH
 ENV DOCKER_BUILDTAGS include_oss include_gcs
 
 WORKDIR $DISTRIBUTION_DIR
diff --git a/vendor/src/github.com/docker/distribution/Makefile b/vendor/src/github.com/docker/distribution/Makefile
index 2ba0108..a0602d0 100644
--- a/vendor/src/github.com/docker/distribution/Makefile
+++ b/vendor/src/github.com/docker/distribution/Makefile
@@ -15,7 +15,7 @@
 
 .PHONY: clean all fmt vet lint build test binaries
 .DEFAULT: all
-all: fmt vet fmt lint build test binaries
+all: fmt vet lint build test binaries
 
 AUTHORS: .mailmap .git/HEAD
 	 git log --format='%aN <%aE>' | sort -fu > $@
@@ -24,51 +24,83 @@
 version/version.go:
 	./version/version.sh > $@
 
-${PREFIX}/bin/registry: version/version.go $(shell find . -type f -name '*.go')
+# Required for go 1.5 to build
+GO15VENDOREXPERIMENT := 1
+
+# Package list
+PKGS := $(shell go list -tags "${DOCKER_BUILDTAGS}" ./... | grep -v ^github.com/docker/distribution/vendor/)
+
+# Resolving binary dependencies for specific targets
+GOLINT := $(shell which golint || echo '')
+GODEP := $(shell which godep || echo '')
+
+${PREFIX}/bin/registry: $(wildcard **/*.go)
 	@echo "+ $@"
 	@go build -tags "${DOCKER_BUILDTAGS}" -o $@ ${GO_LDFLAGS}  ${GO_GCFLAGS} ./cmd/registry
 
-${PREFIX}/bin/digest: version/version.go $(shell find . -type f -name '*.go')
+${PREFIX}/bin/digest:  $(wildcard **/*.go)
 	@echo "+ $@"
 	@go build -tags "${DOCKER_BUILDTAGS}" -o $@ ${GO_LDFLAGS}  ${GO_GCFLAGS} ./cmd/digest
 
-${PREFIX}/bin/registry-api-descriptor-template: version/version.go $(shell find . -type f -name '*.go')
+${PREFIX}/bin/registry-api-descriptor-template: $(wildcard **/*.go)
 	@echo "+ $@"
 	@go build -o $@ ${GO_LDFLAGS} ${GO_GCFLAGS} ./cmd/registry-api-descriptor-template
 
 docs/spec/api.md: docs/spec/api.md.tmpl ${PREFIX}/bin/registry-api-descriptor-template
 	./bin/registry-api-descriptor-template $< > $@
 
-# Depends on binaries because vet will silently fail if it can't load compiled
-# imports
-vet: binaries
+vet:
 	@echo "+ $@"
-	@go vet ./...
+	@go vet -tags "${DOCKER_BUILDTAGS}" $(PKGS)
 
 fmt:
 	@echo "+ $@"
-	@test -z "$$(gofmt -s -l . | grep -v Godeps/_workspace/src/ | tee /dev/stderr)" || \
-		echo "+ please format Go code with 'gofmt -s'"
+	@test -z "$$(gofmt -s -l . 2>&1 | grep -v ^vendor/ | tee /dev/stderr)" || \
+		(echo >&2 "+ please format Go code with 'gofmt -s'" && false)
 
 lint:
 	@echo "+ $@"
-	@test -z "$$(golint ./... | grep -v Godeps/_workspace/src/ | tee /dev/stderr)"
+	$(if $(GOLINT), , \
+		$(error Please install golint: `go get -u github.com/golang/lint/golint`))
+	@test -z "$$($(GOLINT) ./... 2>&1 | grep -v ^vendor/ | tee /dev/stderr)"
 
 build:
 	@echo "+ $@"
-	@go build -tags "${DOCKER_BUILDTAGS}" -v ${GO_LDFLAGS} ./...
+	@go build -tags "${DOCKER_BUILDTAGS}" -v ${GO_LDFLAGS} $(PKGS)
 
 test:
 	@echo "+ $@"
-	@go test -test.short -tags "${DOCKER_BUILDTAGS}" ./...
+	@go test -test.short -tags "${DOCKER_BUILDTAGS}" $(PKGS)
 
 test-full:
 	@echo "+ $@"
-	@go test ./...
+	@go test -tags "${DOCKER_BUILDTAGS}" $(PKGS)
 
 binaries: ${PREFIX}/bin/registry ${PREFIX}/bin/digest ${PREFIX}/bin/registry-api-descriptor-template
 	@echo "+ $@"
 
 clean:
 	@echo "+ $@"
-	@rm -rf "${PREFIX}/bin/registry" "${PREFIX}/bin/registry-api-descriptor-template"
+	@rm -rf "${PREFIX}/bin/registry" "${PREFIX}/bin/digest" "${PREFIX}/bin/registry-api-descriptor-template"
+
+dep-save:
+	@echo "+ $@"
+	$(if $(GODEP), , \
+		$(error Please install godep: go get github.com/tools/godep))
+	@$(GODEP) save $(PKGS)
+
+dep-restore:
+	@echo "+ $@"
+	$(if $(GODEP), , \
+		$(error Please install godep: go get github.com/tools/godep))
+	@$(GODEP) restore -v
+
+dep-validate: dep-restore
+	@echo "+ $@"
+	@rm -Rf .vendor.bak
+	@mv vendor .vendor.bak
+	@rm -Rf Godeps
+	@$(GODEP) save ./...
+	@test -z "$$(diff -r vendor .vendor.bak 2>&1 | tee /dev/stderr)" || \
+		(echo >&2 "+ borked dependencies! what you have in Godeps/Godeps.json does not match with what you have in vendor" && false)
+	@rm -Rf .vendor.bak
diff --git a/vendor/src/github.com/docker/distribution/README.md b/vendor/src/github.com/docker/distribution/README.md
index cc55884..c21d472 100644
--- a/vendor/src/github.com/docker/distribution/README.md
+++ b/vendor/src/github.com/docker/distribution/README.md
@@ -17,7 +17,7 @@
 |**Component**       |Description                                                                                                                                                                                         |
 |--------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
 | **registry**       | An implementation of the [Docker Registry HTTP API V2](docs/spec/api.md) for use with docker 1.6+.                                                                                                  |
-| **libraries**      | A rich set of libraries for interacting with,distribution components. Please see [godoc](https://godoc.org/github.com/docker/distribution) for details. **Note**: These libraries are **unstable**. |
+| **libraries**      | A rich set of libraries for interacting with distribution components. Please see [godoc](https://godoc.org/github.com/docker/distribution) for details. **Note**: These libraries are **unstable**. |
 | **specifications** | _Distribution_ related specifications are available in [docs/spec](docs/spec)                                                                                                                        |
 | **documentation**  | Docker's full documentation set is available at [docs.docker.com](https://docs.docker.com). This repository [contains the subset](docs/index.md) related just to the registry.                                                                                                                                          |
 
diff --git a/vendor/src/github.com/docker/distribution/circle.yml b/vendor/src/github.com/docker/distribution/circle.yml
index f658d11..3d1ffd2 100644
--- a/vendor/src/github.com/docker/distribution/circle.yml
+++ b/vendor/src/github.com/docker/distribution/circle.yml
@@ -8,7 +8,7 @@
 
   post:
   # go
-    - gvm install go1.5.3 --prefer-binary --name=stable
+    - gvm install go1.6 --prefer-binary --name=stable
 
   environment:
   # Convenient shortcuts to "common" locations
@@ -49,26 +49,30 @@
     # - gvm use old && go version
     - gvm use stable && go version
 
+  # Ensure validation of dependencies
+    - gvm use stable && if test -n "`git diff --stat=1000 master | grep -Ei \"vendor|godeps\"`"; then make dep-validate; fi:
+        pwd: $BASE_STABLE
+
   # First thing: build everything. This will catch compile errors, and it's
   # also necessary for go vet to work properly (see #807).
-    - gvm use stable && godep go install ./...:
+    - gvm use stable && godep go install $(go list ./... | grep -v "/vendor/"):
         pwd: $BASE_STABLE
 
   # FMT
-    - gvm use stable && test -z "$(gofmt -s -l . | grep -v Godeps/_workspace/src/ | tee /dev/stderr)":
+    - gvm use stable && make fmt:
         pwd: $BASE_STABLE
 
    # VET
-    - gvm use stable && go vet ./...:
+    - gvm use stable && make vet:
         pwd: $BASE_STABLE
 
   # LINT
-    - gvm use stable && test -z "$(golint ./... | grep -v Godeps/_workspace/src/ | tee /dev/stderr)":
+    - gvm use stable && make lint:
         pwd: $BASE_STABLE
 
   override:
   # Test stable, and report
-     - gvm use stable; export ROOT_PACKAGE=$(go list .); go list -tags "$DOCKER_BUILDTAGS" ./... | xargs -L 1 -I{} bash -c 'export PACKAGE={}; godep go test -tags "$DOCKER_BUILDTAGS" -test.short -coverprofile=$GOPATH/src/$PACKAGE/coverage.out -coverpkg=$(./coverpkg.sh $PACKAGE $ROOT_PACKAGE) $PACKAGE':
+     - gvm use stable; export ROOT_PACKAGE=$(go list .); go list -tags "$DOCKER_BUILDTAGS" ./... | grep -v "/vendor/" | xargs -L 1 -I{} bash -c 'export PACKAGE={}; godep go test -tags "$DOCKER_BUILDTAGS" -test.short -coverprofile=$GOPATH/src/$PACKAGE/coverage.out -coverpkg=$(./coverpkg.sh $PACKAGE $ROOT_PACKAGE) $PACKAGE':
          timeout: 600
          pwd: $BASE_STABLE
 
diff --git a/vendor/src/github.com/docker/distribution/context/util.go b/vendor/src/github.com/docker/distribution/context/util.go
index 299edc0..cb9ef52 100644
--- a/vendor/src/github.com/docker/distribution/context/util.go
+++ b/vendor/src/github.com/docker/distribution/context/util.go
@@ -8,25 +8,17 @@
 // since that time. If the key is not found, the value returned will be zero.
 // This is helpful when inferring metrics related to context execution times.
 func Since(ctx Context, key interface{}) time.Duration {
-	startedAtI := ctx.Value(key)
-	if startedAtI != nil {
-		if startedAt, ok := startedAtI.(time.Time); ok {
-			return time.Since(startedAt)
-		}
+	if startedAt, ok := ctx.Value(key).(time.Time); ok {
+		return time.Since(startedAt)
 	}
-
 	return 0
 }
 
 // GetStringValue returns a string value from the context. The empty string
 // will be returned if not found.
 func GetStringValue(ctx Context, key interface{}) (value string) {
-	stringi := ctx.Value(key)
-	if stringi != nil {
-		if valuev, ok := stringi.(string); ok {
-			value = valuev
-		}
+	if valuev, ok := ctx.Value(key).(string); ok {
+		value = valuev
 	}
-
 	return value
 }
diff --git a/vendor/src/github.com/docker/distribution/coverpkg.sh b/vendor/src/github.com/docker/distribution/coverpkg.sh
index 7ee751a..25d419a 100755
--- a/vendor/src/github.com/docker/distribution/coverpkg.sh
+++ b/vendor/src/github.com/docker/distribution/coverpkg.sh
@@ -3,5 +3,5 @@
 # need to be passed to `go test -coverpkg`:  this includes all of the
 # subpackage's dependencies within the containing package, as well as the
 # subpackage itself.
-DEPENDENCIES="$(go list -f $'{{range $f := .Deps}}{{$f}}\n{{end}}' ${1} | grep ${2})"
+DEPENDENCIES="$(go list -f $'{{range $f := .Deps}}{{$f}}\n{{end}}' ${1} | grep ${2} | grep -v github.com/docker/distribution/vendor)"
 echo "${1} ${DEPENDENCIES}" | xargs echo -n | tr ' ' ','
diff --git a/vendor/src/github.com/docker/distribution/manifest/manifestlist/manifestlist.go b/vendor/src/github.com/docker/distribution/manifest/manifestlist/manifestlist.go
index 49e2b1a..a2082ec 100644
--- a/vendor/src/github.com/docker/distribution/manifest/manifestlist/manifestlist.go
+++ b/vendor/src/github.com/docker/distribution/manifest/manifestlist/manifestlist.go
@@ -47,11 +47,19 @@
 	// OS specifies the operating system, for example `linux` or `windows`.
 	OS string `json:"os"`
 
+	// OSVersion is an optional field specifying the operating system
+	// version, for example `10.0.10586`.
+	OSVersion string `json:"os.version,omitempty"`
+
+	// OSFeatures is an optional field specifying an array of strings,
+	// each listing a required OS feature (for example on Windows `win32k`).
+	OSFeatures []string `json:"os.features,omitempty"`
+
 	// Variant is an optional field specifying a variant of the CPU, for
 	// example `ppc64le` to specify a little-endian version of a PowerPC CPU.
 	Variant string `json:"variant,omitempty"`
 
-	// Features is an optional field specifuing an array of strings, each
+	// Features is an optional field specifying an array of strings, each
 	// listing a required CPU feature (for example `sse4` or `aes`).
 	Features []string `json:"features,omitempty"`
 }
diff --git a/vendor/src/github.com/docker/distribution/manifest/schema2/builder.go b/vendor/src/github.com/docker/distribution/manifest/schema2/builder.go
index 70b006a..44b94ea 100644
--- a/vendor/src/github.com/docker/distribution/manifest/schema2/builder.go
+++ b/vendor/src/github.com/docker/distribution/manifest/schema2/builder.go
@@ -55,6 +55,9 @@
 
 	// Add config to the blob store
 	m.Config, err = mb.bs.Put(ctx, MediaTypeConfig, mb.configJSON)
+	// Override MediaType, since Put always replaces the specified media
+	// type with application/octet-stream in the descriptor it returns.
+	m.Config.MediaType = MediaTypeConfig
 	if err != nil {
 		return nil, err
 	}
diff --git a/vendor/src/github.com/docker/distribution/registry.go b/vendor/src/github.com/docker/distribution/registry.go
index fbe605e..1ede31e 100644
--- a/vendor/src/github.com/docker/distribution/registry.go
+++ b/vendor/src/github.com/docker/distribution/registry.go
@@ -58,6 +58,20 @@
 	Apply(ManifestService) error
 }
 
+// WithTag allows a tag to be passed into Put
+func WithTag(tag string) ManifestServiceOption {
+	return WithTagOption{tag}
+}
+
+// WithTagOption holds a tag
+type WithTagOption struct{ Tag string }
+
+// Apply conforms to the ManifestServiceOption interface
+func (o WithTagOption) Apply(m ManifestService) error {
+	// no implementation
+	return nil
+}
+
 // Repository is a named collection of manifests and layers.
 type Repository interface {
 	// Named returns the name of the repository.
diff --git a/vendor/src/github.com/docker/distribution/registry/api/v2/urls.go b/vendor/src/github.com/docker/distribution/registry/api/v2/urls.go
index 408c7b7..a959aaa 100644
--- a/vendor/src/github.com/docker/distribution/registry/api/v2/urls.go
+++ b/vendor/src/github.com/docker/distribution/registry/api/v2/urls.go
@@ -17,33 +17,35 @@
 // under "/foo/v2/...". Most application will only provide a schema, host and
 // port, such as "https://localhost:5000/".
 type URLBuilder struct {
-	root   *url.URL // url root (ie http://localhost/)
-	router *mux.Router
+	root     *url.URL // url root (ie http://localhost/)
+	router   *mux.Router
+	relative bool
 }
 
 // NewURLBuilder creates a URLBuilder with provided root url object.
-func NewURLBuilder(root *url.URL) *URLBuilder {
+func NewURLBuilder(root *url.URL, relative bool) *URLBuilder {
 	return &URLBuilder{
-		root:   root,
-		router: Router(),
+		root:     root,
+		router:   Router(),
+		relative: relative,
 	}
 }
 
 // NewURLBuilderFromString workes identically to NewURLBuilder except it takes
 // a string argument for the root, returning an error if it is not a valid
 // url.
-func NewURLBuilderFromString(root string) (*URLBuilder, error) {
+func NewURLBuilderFromString(root string, relative bool) (*URLBuilder, error) {
 	u, err := url.Parse(root)
 	if err != nil {
 		return nil, err
 	}
 
-	return NewURLBuilder(u), nil
+	return NewURLBuilder(u, relative), nil
 }
 
 // NewURLBuilderFromRequest uses information from an *http.Request to
 // construct the root url.
-func NewURLBuilderFromRequest(r *http.Request) *URLBuilder {
+func NewURLBuilderFromRequest(r *http.Request, relative bool) *URLBuilder {
 	var scheme string
 
 	forwardedProto := r.Header.Get("X-Forwarded-Proto")
@@ -85,7 +87,7 @@
 		u.Path = requestPath[0 : index+1]
 	}
 
-	return NewURLBuilder(u)
+	return NewURLBuilder(u, relative)
 }
 
 // BuildBaseURL constructs a base url for the API, typically just "/v2/".
@@ -194,12 +196,13 @@
 	*route = *ub.router.GetRoute(name) // clone the route
 	*root = *ub.root
 
-	return clonedRoute{Route: route, root: root}
+	return clonedRoute{Route: route, root: root, relative: ub.relative}
 }
 
 type clonedRoute struct {
 	*mux.Route
-	root *url.URL
+	root     *url.URL
+	relative bool
 }
 
 func (cr clonedRoute) URL(pairs ...string) (*url.URL, error) {
@@ -208,6 +211,10 @@
 		return nil, err
 	}
 
+	if cr.relative {
+		return routeURL, nil
+	}
+
 	if routeURL.Scheme == "" && routeURL.User == nil && routeURL.Host == "" {
 		routeURL.Path = routeURL.Path[1:]
 	}
diff --git a/vendor/src/github.com/docker/distribution/registry/client/repository.go b/vendor/src/github.com/docker/distribution/registry/client/repository.go
index 936a3f1..8cc5f7f 100644
--- a/vendor/src/github.com/docker/distribution/registry/client/repository.go
+++ b/vendor/src/github.com/docker/distribution/registry/client/repository.go
@@ -62,7 +62,7 @@
 
 // NewRegistry creates a registry namespace which can be used to get a listing of repositories
 func NewRegistry(ctx context.Context, baseURL string, transport http.RoundTripper) (Registry, error) {
-	ub, err := v2.NewURLBuilderFromString(baseURL)
+	ub, err := v2.NewURLBuilderFromString(baseURL, false)
 	if err != nil {
 		return nil, err
 	}
@@ -133,7 +133,7 @@
 
 // NewRepository creates a new Repository for the given repository name and base URL.
 func NewRepository(ctx context.Context, name reference.Named, baseURL string, transport http.RoundTripper) (distribution.Repository, error) {
-	ub, err := v2.NewURLBuilderFromString(baseURL)
+	ub, err := v2.NewURLBuilderFromString(baseURL, false)
 	if err != nil {
 		return nil, err
 	}
@@ -402,9 +402,9 @@
 	)
 
 	for _, option := range options {
-		if opt, ok := option.(withTagOption); ok {
-			digestOrTag = opt.tag
-			ref, err = reference.WithTag(ms.name, opt.tag)
+		if opt, ok := option.(distribution.WithTagOption); ok {
+			digestOrTag = opt.Tag
+			ref, err = reference.WithTag(ms.name, opt.Tag)
 			if err != nil {
 				return nil, err
 			}
@@ -465,21 +465,6 @@
 	return nil, HandleErrorResponse(resp)
 }
 
-// WithTag allows a tag to be passed into Put which enables the client
-// to build a correct URL.
-func WithTag(tag string) distribution.ManifestServiceOption {
-	return withTagOption{tag}
-}
-
-type withTagOption struct{ tag string }
-
-func (o withTagOption) Apply(m distribution.ManifestService) error {
-	if _, ok := m.(*manifests); ok {
-		return nil
-	}
-	return fmt.Errorf("withTagOption is a client-only option")
-}
-
 // Put puts a manifest.  A tag can be specified using an options parameter which uses some shared state to hold the
 // tag name in order to build the correct upload URL.
 func (ms *manifests) Put(ctx context.Context, m distribution.Manifest, options ...distribution.ManifestServiceOption) (digest.Digest, error) {
@@ -487,9 +472,9 @@
 	var tagged bool
 
 	for _, option := range options {
-		if opt, ok := option.(withTagOption); ok {
+		if opt, ok := option.(distribution.WithTagOption); ok {
 			var err error
-			ref, err = reference.WithTag(ref, opt.tag)
+			ref, err = reference.WithTag(ref, opt.Tag)
 			if err != nil {
 				return "", err
 			}
diff --git a/vendor/src/github.com/opencontainers/specs/specs-go/config.go b/vendor/src/github.com/opencontainers/specs/specs-go/config.go
index 3e5d499..45e604c 100644
--- a/vendor/src/github.com/opencontainers/specs/specs-go/config.go
+++ b/vendor/src/github.com/opencontainers/specs/specs-go/config.go
@@ -49,7 +49,7 @@
 
 	// ApparmorProfile specified the apparmor profile for the container. (this field is platform dependent)
 	ApparmorProfile string `json:"apparmorProfile,omitempty" platform:"linux"`
-	// SelinuxProcessLabel specifies the selinux context that the container process is run as. (this field is platform dependent)
+	// SelinuxLabel specifies the selinux context that the container process is run as. (this field is platform dependent)
 	SelinuxLabel string `json:"selinuxLabel,omitempty" platform:"linux"`
 }
 
@@ -140,6 +140,8 @@
 	MaskedPaths []string `json:"maskedPaths,omitempty"`
 	// ReadonlyPaths sets the provided paths as RO inside the container.
 	ReadonlyPaths []string `json:"readonlyPaths,omitempty"`
+	// MountLabel specifies the selinux context for the mounts in the container.
+	MountLabel string `json:"mountLabel,omitempty"`
 }
 
 // Namespace is the configuration for a Linux namespace
diff --git a/vendor/src/github.com/opencontainers/specs/specs-go/version.go b/vendor/src/github.com/opencontainers/specs/specs-go/version.go
index 27f45e0..371289a 100644
--- a/vendor/src/github.com/opencontainers/specs/specs-go/version.go
+++ b/vendor/src/github.com/opencontainers/specs/specs-go/version.go
@@ -6,7 +6,7 @@
 	// VersionMajor is for an API incompatible changes
 	VersionMajor = 0
 	// VersionMinor is for functionality in a backwards-compatible manner
-	VersionMinor = 5
+	VersionMinor = 6
 	// VersionPatch is for backwards-compatible bug fixes
 	VersionPatch = 0
 
diff --git a/volume/volume.go b/volume/volume.go
index 1abd1cc..077cddf 100644
--- a/volume/volume.go
+++ b/volume/volume.go
@@ -5,9 +5,6 @@
 	"os"
 	"runtime"
 	"strings"
-
-	"github.com/Sirupsen/logrus"
-	"github.com/docker/docker/pkg/system"
 )
 
 // DefaultDriverName is the driver name used for the driver
@@ -79,8 +76,7 @@
 				return "", err
 			}
 			if runtime.GOOS != "windows" { // Windows does not have deprecation issues here
-				logrus.Warnf("Auto-creating non-existent volume host path %s, this is deprecated and will be removed soon", m.Source)
-				if err := system.MkdirAll(m.Source, 0755); err != nil {
+				if err := os.MkdirAll(m.Source, 0755); err != nil {
 					return "", err
 				}
 			}